extract lines from canny edge detection

女生的网名这么多〃 提交于 2019-12-03 07:14:10

问题


In openCV after applying canny edge detection I'd like to further process the result (show only horizontal lines, remove short lines, etc..). But the result of canny is just another image. I'd like to get an array of lines describing the detected edges

I'm aware of the famous Hough Line Transform, but the result is not always good, that's why I'd like to manually process canny result. input:

output canny only:

output canny then Hough line transform

This is Hough line transform result(red lines) for detecting edges of stairs. 4th line from below is not detected correctly, although canny edge detected an edge.

Any idea how to extract edges from canny image?


回答1:


A few things you can try to improve your results:

Apply a Region of Interest

Your image looks to have some bordering window effects. I removed them with a region of interest resulting in an image that looks like this (I tweaked it until it looked right, but if you're using some kind of kernel operator it's window size probably better defines this ROI):

Use standard Hough transform

It also seems you're using the probabilistic Hough transform. So, you're only getting line segments instead of an interpolated line. Consider using the standard transform to get the full theoretical line (rho, theta). Doing this I got an image like shown below:

Here is a code snippet I used to generate the lines (from Python interface):

(mu, sigma) = cv2.meanStdDev(stairs8u)
edges = cv2.Canny(stairs8u, mu - sigma, mu + sigma)
lines = cv2.HoughLines(edges, 1, pi / 180, 70)

Filter lines based on angle

You can probably filter out poor lines by taking the most frequently occurring line angles, and throwing away outliers. This should narrow it down to the most visible steps.

Hope that helps!




回答2:


I recommend using LSWMS (Line Segment detection using Weighted Mean-Shift) method. It's results is better than HT and PPHT.

See http://marcosnietoblog.wordpress.com/2012/04/28/line-segment-detection-opencv-c-source-code and http://www.youtube.com/watch?v=YYeX8IGOAxw



来源:https://stackoverflow.com/questions/10893624/extract-lines-from-canny-edge-detection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!