Skip to content

Commit 2cbd59a

Browse files
committed
feat: apply_lut1d
1 parent e6a0eb0 commit 2cbd59a

File tree

17 files changed

+327
-303
lines changed

17 files changed

+327
-303
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Type: Package
22
Package: aznyan
33
Title: Image Filters with 'OpenCV'
4-
Version: 26.02.13
4+
Version: 26.03.16
55
Authors@R: c(
66
person("Akiru", "Kato", , "paithiov909@gmail.com", role = c("aut", "cre")),
77
person("Jeroen", "Ooms", role = "cph")

NAMESPACE

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Generated by roxygen2: do not edit by hand
22

33
export(adpthres)
4+
export(apply_lut1d)
45
export(as_recordedplot)
56
export(aznyan_num_threads)
67
export(bilateral_filter)
@@ -60,9 +61,9 @@ export(mean_shift)
6061
export(median_blur)
6162
export(morphology)
6263
export(oilpaint)
64+
export(pack_color)
6365
export(pencil_sketch)
6466
export(posterize)
65-
export(premul)
6667
export(preserve_edge)
6768
export(read_still)
6869
export(resample)
@@ -79,6 +80,7 @@ export(stylize)
7980
export(swap_channels)
8081
export(thres)
8182
export(tile_matrix)
83+
export(unpack_color)
8284
export(unpremul)
8385
export(write_animation)
8486
export(write_still)

R/aznyan-package.R

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,6 @@ cast_nr <- function(nr, nm = "nr") {
5757
as.integer(nr)
5858
}
5959

60-
#' Cast native raster into 4*(w*h)-dimensional integer matrix
61-
#'
62-
#' @param nr A `nativeRaster` object.
63-
#' @param nm Name of `nr`
64-
#' @returns integer matrix
65-
#' @noRd
66-
nr_to_rgba <- function(nr, nm) {
67-
if (missing(nm)) {
68-
nm <- deparse1(substitute(nr))
69-
}
70-
cast_nr(nr, nm) |>
71-
azny_unpack_integers()
72-
}
73-
7460
#' Check if two nativeRaster objects have the same dimensions
7561
#'
7662
#' @noRd
@@ -119,24 +105,3 @@ int_match <- function(x, arg, values) {
119105
clamp <- function(x, min, max) {
120106
pmin(pmax(x, min), max)
121107
}
122-
123-
#' Lerp
124-
#'
125-
#' @param x,y numerics
126-
#' @param mask numeric scalar
127-
#' @returns numerics
128-
#' @noRd
129-
mix <- function(x, y, mask) {
130-
mask <- clamp(mask, 0, 1)
131-
x * mask + y * (1 - mask)
132-
}
133-
134-
#' Step
135-
#'
136-
#' @param x,y numerics
137-
#' @param mask numeric scalar
138-
#' @returns numerics
139-
#' @noRd
140-
step <- function(x, mask) {
141-
(x > mask) * 1
142-
}

R/color-filters.R

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
1-
#' Create color codes while premultiplying alpha
2-
#'
3-
#' @param r,g,b,a Numeric vectors.
4-
#' @param max An integer scalar. The maximum value of the color code.
5-
#' @returns Color codes.
6-
#' @export
7-
premul <- function(r, g, b, a, max = 255L) {
8-
alpha <- a / max
9-
grDevices::rgb(r * alpha, g * alpha, b * alpha, a, maxColorValue = max)
10-
}
11-
121
#' Apply predefined color filter
132
#'
143
#' Applies one of the predefined color filters
@@ -103,5 +92,5 @@ color_filter <- function(
10392
)
10493
) -
10594
1L
106-
as_nr(azny_color_filter(nr, nrow(nr), ncol(nr), filter_id))
95+
as_nr(azny_color_filter(cast_nr(nr), nrow(nr), ncol(nr), filter_id))
10796
}

R/color-manip.R

Lines changed: 24 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,7 @@
1-
#' Conversion between RGB and HLS color spaces
2-
#'
3-
#' @param x An integer matrix with 3 rows.
4-
#' @returns An integer matrix of the same size as `x`
5-
#' @rdname rgb-hls
6-
#' @name rgb-hls
7-
NULL
8-
9-
#' @rdname rgb-hls
10-
#' @export
11-
rgb2hls <- function(x) azny_rgb_to_hls(floor(x))
12-
13-
#' @rdname rgb-hls
14-
#' @export
15-
hls2rgb <- function(x) azny_hls_to_rgb(floor(x))
16-
17-
#' Create a native raster filled with a color
18-
#'
19-
#' @param color Color name or hex code.
20-
#' @param width,height A positive integer scalar.
21-
#' @returns A `nativeRaster` object.
22-
#' @export
23-
fill_with <- function(color, width, height) {
24-
packed_int <- colorfast::col_to_int(color[1])
25-
out <- matrix(packed_int, nrow = height, ncol = width)
26-
as_nr(out)
27-
}
28-
291
#' Color manipulation
302
#'
313
#' @param nr A `nativeRaster` object.
4+
#' @param lut A 256x3 double matrix in range `[0, 255]`.
325
#' @param intensity A numeric scalar.
336
#' @param depth,shades A positive integer scalar.
347
#' @param gamma A numeric scalar. The gamma exponent.
@@ -42,16 +15,25 @@ fill_with <- function(color, width, height) {
4215
#' @name color-manip
4316
NULL
4417

18+
#' @rdname color-manip
19+
#' @export
20+
apply_lut1d <- function(nr, lut) {
21+
if (!all(is.finite(lut)) || !all(lut >= 0) || !all(lut <= 255)) {
22+
cli::cli_abort("`lut` must be a double matrix in range [0, 255].")
23+
}
24+
as_nr(azny_lut1d(cast_nr(nr), nrow(nr), ncol(nr), lut))
25+
}
26+
4527
#' @rdname color-manip
4628
#' @export
4729
brighten <- function(nr, intensity) {
48-
as_nr(azny_brighten(nr, nrow(nr), ncol(nr), intensity))
30+
as_nr(azny_brighten(cast_nr(nr), nrow(nr), ncol(nr), intensity))
4931
}
5032

5133
#' @rdname color-manip
5234
#' @export
5335
contrast <- function(nr, intensity) {
54-
as_nr(azny_contrast(nr, nrow(nr), ncol(nr), intensity))
36+
as_nr(azny_contrast(cast_nr(nr), nrow(nr), ncol(nr), intensity))
5537
}
5638

5739
#' @rdname color-manip
@@ -61,7 +43,7 @@ duotone <- function(nr, color_a = "yellow", color_b = "navy", gamma = 2.2) {
6143
color_b <- colorfast::col_to_rgb(color_b[1])
6244
as_nr(
6345
azny_duotone(
64-
nr,
46+
cast_nr(nr),
6547
nrow(nr),
6648
ncol(nr),
6749
as.integer(color_a[, 1]),
@@ -74,19 +56,19 @@ duotone <- function(nr, color_a = "yellow", color_b = "navy", gamma = 2.2) {
7456
#' @rdname color-manip
7557
#' @export
7658
grayscale <- function(nr) {
77-
as_nr(azny_grayscale(nr, nrow(nr), ncol(nr)))
59+
as_nr(azny_grayscale(cast_nr(nr), nrow(nr), ncol(nr)))
7860
}
7961

8062
#' @rdname color-manip
8163
#' @export
8264
hue_rotate <- function(nr, rad) {
83-
as_nr(azny_hue_rotate(nr, nrow(nr), ncol(nr), rad))
65+
as_nr(azny_hue_rotate(cast_nr(nr), nrow(nr), ncol(nr), rad))
8466
}
8567

8668
#' @rdname color-manip
8769
#' @export
8870
invert <- function(nr) {
89-
as_nr(azny_invert(nr, nrow(nr), ncol(nr)))
71+
as_nr(azny_invert(cast_nr(nr), nrow(nr), ncol(nr)))
9072
}
9173

9274
#' @rdname color-manip
@@ -96,7 +78,7 @@ linocut <- function(nr, ink = "navy", paper = "snow", threshold = 0.4) {
9678
paper <- colorfast::col_to_rgb(paper[1])
9779
as_nr(
9880
azny_linocut(
99-
nr,
81+
cast_nr(nr),
10082
nrow(nr),
10183
ncol(nr),
10284
as.integer(ink[, 1]),
@@ -109,25 +91,25 @@ linocut <- function(nr, ink = "navy", paper = "snow", threshold = 0.4) {
10991
#' @rdname color-manip
11092
#' @export
11193
posterize <- function(nr, shades = 4) {
112-
as_nr(azny_posterize(nr, nrow(nr), ncol(nr), shades))
94+
as_nr(azny_posterize(cast_nr(nr), nrow(nr), ncol(nr), shades))
11395
}
11496

11597
#' @rdname color-manip
11698
#' @export
11799
reset_alpha <- function(nr, alpha = 1) {
118-
as_nr(azny_reset_alpha(nr, nrow(nr), ncol(nr), alpha))
100+
as_nr(azny_reset_alpha(cast_nr(nr), nrow(nr), ncol(nr), alpha))
119101
}
120102

121103
#' @rdname color-manip
122104
#' @export
123105
saturate <- function(nr, intensity) {
124-
as_nr(azny_saturate(nr, nrow(nr), ncol(nr), intensity))
106+
as_nr(azny_saturate(cast_nr(nr), nrow(nr), ncol(nr), intensity))
125107
}
126108

127109
#' @rdname color-manip
128110
#' @export
129111
sepia <- function(nr, intensity, depth = 20) {
130-
as_nr(azny_sepia(nr, nrow(nr), ncol(nr), intensity, depth))
112+
as_nr(azny_sepia(cast_nr(nr), nrow(nr), ncol(nr), intensity, depth))
131113
}
132114

133115
#' @rdname color-manip
@@ -136,7 +118,7 @@ set_matte <- function(nr, color = "green") {
136118
rgb_int <- colorfast::col_to_rgb(color[1])
137119
as_nr(
138120
azny_set_matte(
139-
nr,
121+
cast_nr(nr),
140122
nrow(nr),
141123
ncol(nr),
142124
as.integer(rgb_int[, 1])
@@ -147,11 +129,11 @@ set_matte <- function(nr, color = "green") {
147129
#' @rdname color-manip
148130
#' @export
149131
solarize <- function(nr, threshold = 0.5) {
150-
as_nr(azny_solarize(nr, nrow(nr), ncol(nr), threshold))
132+
as_nr(azny_solarize(cast_nr(nr), nrow(nr), ncol(nr), threshold))
151133
}
152134

153135
#' @rdname color-manip
154136
#' @export
155137
unpremul <- function(nr, max = 255L) {
156-
as_nr(azny_unpremul(nr, nrow(nr), ncol(nr), max))
138+
as_nr(azny_unpremul(cast_nr(nr), nrow(nr), ncol(nr), max))
157139
}

R/cpp11.R

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ azny_brighten <- function(nr, height, width, intensity) {
124124
.Call(`_aznyan_azny_brighten`, nr, height, width, intensity)
125125
}
126126

127+
azny_color_map <- function(nr, height, width, mode, hsvmode, invmode) {
128+
.Call(`_aznyan_azny_color_map`, nr, height, width, mode, hsvmode, invmode)
129+
}
130+
127131
azny_contrast <- function(nr, height, width, intensity) {
128132
.Call(`_aznyan_azny_contrast`, nr, height, width, intensity)
129133
}
@@ -148,6 +152,10 @@ azny_linocut <- function(nr, height, width, ink, paper, threshold) {
148152
.Call(`_aznyan_azny_linocut`, nr, height, width, ink, paper, threshold)
149153
}
150154

155+
azny_lut1d <- function(nr, height, width, lut_mat) {
156+
.Call(`_aznyan_azny_lut1d`, nr, height, width, lut_mat)
157+
}
158+
151159
azny_posterize <- function(nr, height, width, shades) {
152160
.Call(`_aznyan_azny_posterize`, nr, height, width, shades)
153161
}
@@ -176,30 +184,6 @@ azny_unpremul <- function(nr, height, width, max) {
176184
.Call(`_aznyan_azny_unpremul`, nr, height, width, max)
177185
}
178186

179-
azny_saturate_value <- function(in_vec, val) {
180-
.Call(`_aznyan_azny_saturate_value`, in_vec, val)
181-
}
182-
183-
azny_pack_integers <- function(rgb, a, height, width) {
184-
.Call(`_aznyan_azny_pack_integers`, rgb, a, height, width)
185-
}
186-
187-
azny_unpack_integers <- function(nr) {
188-
.Call(`_aznyan_azny_unpack_integers`, nr)
189-
}
190-
191-
azny_rgb_to_hls <- function(rgb) {
192-
.Call(`_aznyan_azny_rgb_to_hls`, rgb)
193-
}
194-
195-
azny_hls_to_rgb <- function(hls) {
196-
.Call(`_aznyan_azny_hls_to_rgb`, hls)
197-
}
198-
199-
azny_color_map <- function(nr, height, width, mode, hsvmode, invmode) {
200-
.Call(`_aznyan_azny_color_map`, nr, height, width, mode, hsvmode, invmode)
201-
}
202-
203187
azny_diffusion <- function(nr, height, width, iter, decay_factor, decay_offset, gamma, sigma) {
204188
.Call(`_aznyan_azny_diffusion`, nr, height, width, iter, decay_factor, decay_offset, gamma, sigma)
205189
}
@@ -244,6 +228,22 @@ azny_lineweave <- function(nr, height, width, omega, phase, dist1, dist2, dist3,
244228
.Call(`_aznyan_azny_lineweave`, nr, height, width, omega, phase, dist1, dist2, dist3, invert, direction, fg, bg)
245229
}
246230

231+
azny_pack_integers <- function(rgb, a, height, width) {
232+
.Call(`_aznyan_azny_pack_integers`, rgb, a, height, width)
233+
}
234+
235+
azny_unpack_integers <- function(nr) {
236+
.Call(`_aznyan_azny_unpack_integers`, nr)
237+
}
238+
239+
azny_rgb_to_hls <- function(rgb) {
240+
.Call(`_aznyan_azny_rgb_to_hls`, rgb)
241+
}
242+
243+
azny_hls_to_rgb <- function(hls) {
244+
.Call(`_aznyan_azny_hls_to_rgb`, hls)
245+
}
246+
247247
azny_swap_channels <- function(nr, height, width, mapping) {
248248
.Call(`_aznyan_azny_swap_channels`, nr, height, width, mapping)
249249
}

R/fade.R

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
#' Cast native raster into 4*(w*h)-dimensional integer matrix
2+
#'
3+
#' @param nr A `nativeRaster` object.
4+
#' @param nm Name of `nr`.
5+
#' @returns An integer matrix.
6+
#' @noRd
7+
nr_to_rgba <- function(nr, nm) {
8+
if (missing(nm)) {
9+
nm <- deparse1(substitute(nr))
10+
}
11+
cast_nr(nr, nm) |>
12+
azny_unpack_integers()
13+
}
14+
115
#' Fade pixels based on a mask image
216
#'
317
#' @description

0 commit comments

Comments
 (0)