Unsupervised Smooth Contour Detection.
Following the a contrario approach, the starting point is defining the conditions where contours should not be detected: soft gradient regions contaminated by noise. To achieve this, low frequencies are removed from the input image. Then, contours are validated as the frontiers separating two adjacent regions, one with significantly larger values than the other. Significance is evaluated using the Mann-Whitney U test to determine whether the samples were drawn from the same distribution or not. This test makes no assumption on the distributions. The resulting algorithm is similar to the classic Marr-Hildreth edge detector, with the addition of the statistical validation step. Combined with heuristics based on the Canny and Devernay methods, an efficient algorithm is derived producing sub-pixel contours.
image_contour_detector(x, Q = 2)
a matrix of image pixel values in the 0-255 range.
numeric value with the pixel quantization step
an object of class cld which is a list with the following elements
curves: The number of contour lines found
contourpoints: The number of points defining the contour lines found
data: A data.frame with columns 'x', 'y' and 'curve' giving the x/y locations for each contour curve
Rafael Grompone von Gioi, and Gregory Randall, Unsupervised Smooth Contour Detection, Image Processing On Line, 6 (2016), pp. 233-267. https://doi.org/10.5201/ipol.2016.175
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
library(pixmap) imagelocation <- system.file("extdata", "image.pgm", package="image.ContourDetector") image <- read.pnm(file = imagelocation, cellres = 1) x <- image@grey * 255 contourlines <- image_contour_detector(x) contourlines plot(image) plot(contourlines, add = TRUE, col = "red") ## ## line_segment_detector expects a matrix as input ## if you have a jpg/png/... convert it to pgm first or take the r/g/b channel library(magick) x <- image_read(system.file("extdata", "atomium.jpg", package="image.ContourDetector")) x mat <- image_data(x, channels = "gray") mat <- as.integer(mat, transpose = TRUE) mat <- drop(mat) contourlines <- image_contour_detector(mat) plot(contourlines)
Read 262144 items Contour Lines Detector found 192 contour lines Linking to ImageMagick 126.96.36.199 Enabled features: fontconfig, freetype, fftw, lcms, pango, webp, x11 Disabled features: cairo, ghostscript, rsvg format width height colorspace matte filesize density 1 JPEG 750 504 sRGB FALSE 85791 72x72
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.