Apply a morphology method. This is a very flexible function which can be used to apply any morphology method with custom parameters. See imagemagick website for examples.
Usage
image_morphology(
image,
method = "convolve",
kernel = "Gaussian",
iterations = 1,
opts = list()
)
image_convolve(
image,
kernel = "Gaussian",
iterations = 1,
scaling = NULL,
bias = NULL
)
Arguments
- image
magick image object returned by
image_read()
orimage_graph()
- method
a string with a valid method from
morphology_types()
- kernel
either a square matrix or a string. The string can either be a parameterized kerneltype such as:
"DoG:0,0,2"
or"Diamond"
or it can contain a custom matrix (see examples)- iterations
number of iterations
- opts
a named list or character vector with custom attributes
- scaling
string with kernel scaling. The special flag
"!"
automatically scales to full dynamic range, for example:"50%!"
- bias
output bias string, for example
"50%"
Examples
#example from IM website:
if(magick_config()$version > "6.8.8"){
pixel <- image_blank(1, 1, 'white') |> image_border('black', '5x5')
# See the effect of Dilate method
pixel |> image_scale('800%')
pixel |> image_morphology('Dilate', "Diamond") |> image_scale('800%')
# These produce the same output:
pixel |> image_morphology('Dilate', "Diamond", iter = 3) |> image_scale('800%')
pixel |> image_morphology('Dilate', "Diamond:3") |> image_scale('800%')
# Plus example
pixel |> image_morphology('Dilate', "Plus", iterations = 2) |> image_scale('800%')
# Rose examples
rose |> image_morphology('ErodeI', 'Octagon', iter = 3)
rose |> image_morphology('DilateI', 'Octagon', iter = 3)
rose |> image_morphology('OpenI', 'Octagon', iter = 3)
rose |> image_morphology('CloseI', 'Octagon', iter = 3)
# Edge detection
man <- demo_image('man.gif')
man |> image_morphology('EdgeIn', 'Octagon')
man |> image_morphology('EdgeOut', 'Octagon')
man |> image_morphology('Edge', 'Octagon')
# Octagonal Convex Hull
man |>
image_morphology('Close', 'Diamond') |>
image_morphology('Thicken', 'ConvexHull', iterations = 1)
# Thinning down to a Skeleton
man |> image_morphology('Thinning', 'Skeleton', iterations = 1)
# Specify custom kernel matrix usingn a string:
img <- demo_image("test_mag.gif")
i <- image_convolve(img, kernel = '4x5:
0 -1 0 0
-1 +1 -1 0
-1 +1 -1 0
-1 +1 +1 -1
0 -1 -1 0 ', bias = "50%")
}