平滑线表面有一个小问题。
图像是sobel处理后边缘检测的结果。
表面不平整,凸起单位为一个像素。
红圈部分是凸起。
http://www.mathworks.com/help/matlab/creating_plots/smooth-contour-data-with-convolution-filter.html
我尝试过的链接,但线宽增加了太多。
我必须得到一个像素宽度的直线。
如何清理这些凸起?
非常感谢。
7/21更新:
Canny方法可以生成一个像素的检测图像。
Canny边缘检测的结果:
线被分割成2个部分,下部移动了一个像素。
我希望当线宽在2~3像素范围内时,可以认为是直线而不是2行。
对于扩张和侵蚀,我试图平滑成为直线的线
Canny>扩张:
Canny&gt; <膨胀>侵蚀:
之前和之后的结果是相同的......
有人能给我一个想法吗?
非常感谢。
答案 0 :(得分:2)
如果你正在处理一个简单的2-D,黑白图像,存储为0/1阵列,并且你保证从上到下总是有一条直线,那么这可能是帮助 -
% recreate scenario
A = zeros(100,50);
A(:,25) = 1;
A([30:40,80:85],24)=1;
A([20:35,70:90],26)=1;
% a rude way
S = sum(A,1);
B = repmat(S==max(S),100,1);
imshow(B)
答案 1 :(得分:1)
也许类似于Canny edge detection的方法可能是您要搜索的解决方案。 Canny边缘检测器使用非最大抑制,这意味着边缘仅由在其邻居之间具有最大梯度的像素形成,导致在一个像素宽度边缘中的许多情况。