So I have Image like this
CG generated bathroom http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg
I want to get something like this (I hevent drawn all lines I want but I hope you can get my idea)
Black & White CG generated bathroom with some red lines between tiles http://superior0.narod.ru/lines.jpg
I need some super fast algorithm for finding all straight lines on it. I want to give to algorithm parameters like min length and max line distortion. I want to get relative to picture pixel coords start and end points of lines.
So on this picture to find all lines between tiles and thouse 2 black lines on top.
So I need algorithm for super fast finding straight lines of different colors on picture.
Is there any such algorithm? (super duper fast=)
You need to use sophisticated image processing methods such as Canny Edge Detection,Marr-Hildreth edge detection, Gaussian Filtering and Hough Transform etc.
But existence of "super fast" method is highly unlikely.
Minimum complexity of most of the image processing algorithms is at least O(N^2)
.
By "super fast" I mean at most O(1)
;)
Some links that might help:
- http://www.sci.utah.edu/~cscheid/spr05/imageprocessing/project4/
- http://www.contrib.andrew.cmu.edu/~suppe/mobot/
- http://www.dunwich.org/baptiste/sic/ecms/ecpublis.html#2
- http://wayback.archive.org/web/20090304153603/http://hdebruijn.soo.dto.tudelft.nl/jaar2006/alders.htm
I think you need a Hough transform or a Radon transform. Read the articles I've linked and feel free to ask any questions :)
Consider the contour dots algorithm described in http://outliner.codeplex.com/
It will produce the vector-described edges in the form of Bezier curves organized in strokes.
You need some effort to choose the most straigh strokes (the end points are ready to use).
This algoritms is quite fast but not super duper.
I don't know how well it will work in your application, but you might try some sort of edge detection approach. Not sure how to convert those edges into vectors, if that's what you're looking for, but this might be a place to start. Anyway, some of the edge detection algorithms (e.g. the Discrete Laplace Operator) are pretty quick on moderm computing architectures.
Oh, and if you do that, you probably want to convert the image to YCbCr and just use the luma (Y) component. That's also a fast operation