检测模糊图像中的细线

时间:2012-12-07 17:15:34

标签: image matlab image-processing opencv filtering

enter image description here enter image description here我正在寻找一些想法来检测附加图像中的线条。假设线是垂直的,但它们的质量非常差,每条模糊线之间只有2-3个像素。

我已经尝试过这些方法: 侵蚀和放大器;垂直扩张 - >增强效果良好 CLAHE - >有益于增强 霍夫 - >将图像转换为Black&虽然会有太多断线或桥梁。 我也尝试了垂直线掩模。 基本上基于Black& White图像转换的方法将不适用于此。

Detecting very thin lines in blurry image

3 个答案:

答案 0 :(得分:12)

我会沿着线条折叠图像以获得1d轮廓。并在那里进行检测(例如,通过查看中位数上方的峰值。

以下是折叠后的图片collapsed image

对象检测有明显的

答案 1 :(得分:3)

非常有前途的工作有关嘈杂图像中的微弱边缘检测: 直线的基本版本: http://www.wisdom.weizmann.ac.il/~meirav/EdgesGalunBasriBrandt.pdf 更高级的版本: http://www.wisdom.weizmann.ac.il/~meirav/Curves_Alpert_Galun_Nadler_Basri.pdf

我不确定作者是否公开提供他们的代码。在与作者直接联系时可能是值得的。

这些着作提出了一种经过深入研究和原则性的微弱边缘检测方法。

答案 2 :(得分:1)

这是一种替代方法,可以找到线条,假设峰值在~5像素内明显。它可以容忍图像的小旋转。

img = imread('http://i.stack.imgur.com/w7qMT.jpg');
img = rgb2gray(img);

%# smoothen the image a little with an anisotroic Gaussian
fimg = imfilter(double(img),fspecial('gaussian',[3 1]));

%# find the lines as local maxima
msk = ones(5);
msk(:,2:4) = 0;
lines = fimg > imdilate(fimg,msk);

enter image description here