我正在寻找一些想法来检测附加图像中的线条。假设线条是垂直的,但它们的质量非常差,每条模糊线条之间只有 2-3 个像素。
我已经尝试过这些方法:垂直腐蚀和膨胀 -> 增强 CLAHE 的好结果 -> 有利于增强霍夫 -> 失败,因为将图像转换为黑色,同时会有太多的断线或断桥。我也试过垂直线掩码。基本上基于黑白图像转换的方法不适用于此。
我正在寻找一些想法来检测附加图像中的线条。假设线条是垂直的,但它们的质量非常差,每条模糊线条之间只有 2-3 个像素。
我已经尝试过这些方法:垂直腐蚀和膨胀 -> 增强 CLAHE 的好结果 -> 有利于增强霍夫 -> 失败,因为将图像转换为黑色,同时会有太多的断线或断桥。我也试过垂直线掩码。基本上基于黑白图像转换的方法不适用于此。
我会沿着线条折叠图像以获得一维轮廓。并在那里进行检测(例如,通过查看中值以上的峰值。
这是折叠的图像
那里的物体检测很明显
关于噪声图像中微弱边缘检测的非常有前途的作品:直线的基本版本 :http: //www.wisdom.weizmann.ac.il/~meirav/EdgesGalunBasriBrandt.pdf 更高级的版本: http://www.wisdom.weizmann .ac.il/~meirav/Curves_Alpert_Galun_Nadler_Basri.pdf
我不确定作者是否公开了他们的代码。直接联系作者可能是值得的。
这些工作为微弱边缘检测提出了一种经过充分研究和原则性的方法。
这是另一种方法,它会找到你的线条,假设峰值在 ~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);