| image_modify_hsv {plothelper} | R Documentation | 
Modify the H, S, V Values of a Color Vector or an Image
Description
The function modifies the H (0 - 1), S, V values of a vector of colors or an image. The three channels can be modified separately. However, the most frequently used is only the V modification. The ways to modify include: setting values to some specified values (set_*), adding (add_*), multiplying the original values (mult_*), rescaling the original values (rescale_*), using a function to recompute values (fun_*). The most useful way is to use some internal curves that mimic those PS-like apps. DO see Details.
Usage
image_modify_hsv(
  x,
  set_h = NULL,
  add_h = NULL,
  mult_h = NULL,
  rescale_h = NULL,
  fun_h = NULL,
  set_s = NULL,
  add_s = NULL,
  mult_s = NULL,
  rescale_s = NULL,
  fun_s = NULL,
  set_v = NULL,
  add_v = NULL,
  mult_v = NULL,
  rescale_v = NULL,
  fun_v = NULL,
  result = "magick",
  res = 144
)
Arguments
| x | an image created by  | 
| set_h | set H values with specific values. | 
| add_h | add specific values to current H values. | 
| mult_h | multiply the current values with specific values. | 
| rescale_h | a length 2 numeric vector 
specifying the desired range of H values, 
e. g.,  | 
| fun_h | your own modifying function 
(e. g.,  | 
| set_s,add_s,mult_s,rescale_s,fun_s | parameters to change S values. Used in the same way as those for H. See above. | 
| set_v,add_v,mult_v,rescale_v,fun_v | parameters to change V values. Used in the same way as those for H. See above. | 
| result | the default is "magick", the output is 
a magick picture. When it is "raster", a matrix is created 
which can be use as a raster 
for  | 
| res | when the result is a magick picture, the 
 | 
Details
fun_* can be a function or 
a named list which tells the 
function which internal function is to be used. 
You must ensure values used by the function 
specified by you to be in the range [0, 1] for 
H, S, V modification and [0, 255] for R, G, B
modification. Also, you'd better make sure 
the output values of the function are in 
When fun_* is a list, it should be written in the 
following way: 
- (1) - fun_* = list(fun = "s", c1 = -2, c2 = 2, domain = c(0, 1))An "s" curve will be used. c1 points out how to deal with values below 0.5, c2 with values above 0.5. For c1 and c2, a value larger than 0 means a curvature towards y = 1, and a value smaller than 0 means a curvature towards y = 0. So, c1 < 0 and c2 > 0 will make an s shape curve. c1 and c2 can be any number, though those with absolute values below 4 are quite good (default is -2 and 2). 0 means no change. domain specifies the value domain to put the result. The default is c(0, 1) which means not to rescale, thus 0.1 is 0.1. However, if you set- domain = c(0.5, 1), then 0.1 will be 0.55. If you do not know how to set domain, just ignore it.
- (2) - fun_* = list(fun = "circle", value = 0.5)When the fun is "circle" or "c", an arc will be used. value must be a number between -1 and 1 (default is 0.5). A number larger than 0 means the curvature is towards y = 1, and a number smaller than 0 means it is towards y = 0. value should not be 0.
- (3) - list(fun_* = "linear", x0 = 0.4, y0 = 0.6)This makes a linear modification except that there is a breakpoint. The default point is (0.4, 0.6) which means: suppose all the original numbers and output numbers are in the [0, 1] range and the points with their x position smaller than 0.4 will be put along the line that links (0, 0) and (0.4, 0.6), and, those with x position larger than 0.4 will be put along the line that links (0.4, 0.6) and (1, 1).
Examples
# First create an image
library(magick)
mycolor=grDevices::hsv(0, s=seq(0.1, 0.9, 0.1), 
	v=seq(0.1, 0.9, 0.1))
img=image_graph(width=400, height=400)
print(showcolor(mycolor)+theme_void())
dev.off()
# Now increase S values with 
# an internal circle curve and 
# set V values between [0.5, 1].
res=image_modify_hsv(img, 
	fun_s=list("circle", value=1), 
	rescale_v=c(0.5, 1))