Detect Lines in Digital Images
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
As part of our data science training initiative, bnosac is also providing a course on computer vision with R & Python which is held in March 9-10 in Leuven, Belgium (subscribe here or have a look at our full training offer here). Part of the course is covering finding blobs, corners, gradients, edges & lines in images.
For this reason, the R package LineSegmentDetector was made available at https://github.com/bnosac/LineSegmentDetector. It allows to detect segment lines in digital images. An example of this is shown below.
library(LineSegmentDetector) library(pixmap) ## Read in the image + make sure input to the algorithm is matrix with grey-scale values in 0-255 range imagelocation <- system.file("extdata", "chairs.pgm", package="LineSegmentDetector") image <- read.pnm(file = imagelocation, cellres = 1) x <- image@grey * 255 ## Detect and plot the lines segments linesegments <- line_segment_detector(x) linesegments plot(image) plot(linesegments, add = TRUE, col = "red")
The line segment detector finds lines in digital grey-scale images and is an implementation of the linear-time Line Segment Detector explained at https://doi.org/10.5201/ipol.2012.gjmr-lsd. It gives subpixel accurate results and is designed to work on any digital image without parameter tuning. It controls its own number of false detections where on average, one false alarm is allowed per image.
More information here https://github.com/bnosac/LineSegmentDetector.
The algorithm requires as input a grey-scale image. So if you have another image, you can use the excellent magick package to transform it to grey scale.
library(magick) f <- tempfile(fileext = ".pgm") x <- image_read("http://www.momentumshipping.net/lounge/wp-content/uploads/2015/10/containership2.jpg") x <- image_convert(x, format = "pgm", depth = 8) image_write(x, path = f, format = "pgm") image <- read.pnm(file = f, cellres = 1) linesegments <- line_segment_detector(image@grey * 255) plot(image) plot(linesegments, add = TRUE, col = "red")
The algorithm is implemented with Rcpp and is released under the AGPL-3 license. Hope you enjoy it.
Need support in image recognition? Let us know.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.