Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 模糊图像中的细线检测_Image_Matlab_Image Processing_Opencv_Filtering - Fatal编程技术网

Image 模糊图像中的细线检测

Image 模糊图像中的细线检测,image,matlab,image-processing,opencv,filtering,Image,Matlab,Image Processing,Opencv,Filtering,我正在寻找一些想法来检测附加图像中的线条。线被认为是垂直的,但是它们的质量很差,并且在每条模糊线之间只有2-3个像素 我已经尝试过这些方法: 垂直方向的侵蚀和膨胀->增强效果良好 CLAHE->有助于增强 Hough->由于将图像转换为黑色而失败&而将有太多的断线或桥。 我也试过垂直线遮罩。 基本上,基于黑白图像转换的方法不适用于此 我会沿着线条折叠图像,以获得1d轮廓。并在那里进行检测(例如,通过查看中位数上方的峰值) 这是折叠的图像 那里的物体检测很明显,这里有一种替代方法,可以找到线条,假

我正在寻找一些想法来检测附加图像中的线条。线被认为是垂直的,但是它们的质量很差,并且在每条模糊线之间只有2-3个像素

我已经尝试过这些方法: 垂直方向的侵蚀和膨胀->增强效果良好 CLAHE->有助于增强 Hough->由于将图像转换为黑色而失败&而将有太多的断线或桥。 我也试过垂直线遮罩。 基本上,基于黑白图像转换的方法不适用于此


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

这是折叠的图像


那里的物体检测很明显,这里有一种替代方法,可以找到线条,假设峰值在~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);

关于噪声图像中微弱边缘检测的非常有前途的工作: 直线的基本版本: 更高级的版本:

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


这些工作为微弱边缘检测提出了一种经过充分研究且具有原则性的方法。

似乎是一种有趣的方法。如何折叠列以获得如此好的1d轮廓?+1。可以只使用
ys=sum(I,1)
,而
I
是灰度图像。此外,要找到最大值,可以使用
findpeaks()
,可能与
平滑()结合使用
去除噪声。在本示例中效果很好,但如果旋转恰好导致顶部和底部相对偏移一行,则将失败。您可以通过仅从图像中间提取一条小条纹来减少问题。@mmgp我仅通过求和来折叠列,作者明确表示“假定直线是垂直的",这正是我正在解决的问题。如果它们确实是垂直的,那么这个过程肯定会起作用。如果它们只是略微不垂直,那么解决方法就是将y轴分成几个块,为每个块制作1d剖面,检测那里的峰值。但无论如何,我并不是假装解决方案是100%最优的。它不会他是解决指定问题的工作。我很确定它可以做得更好。到目前为止,折叠是一个非常好的主意,谢谢。我认为对于存在旋转的情况,我们必须用另一种方法找到旋转!你们有没有想过任何过滤方法来进一步提高质量?没有照明问题对于这种情况,旋转也可以在另一篇文章中讨论。-(免责声明-这是我自己的博客)。然后,您可以使用例如
BWAREOPEN
删除一些杂散信号,然后您可以运行骨架化以使线条宽1像素。这是一种很好的过滤方法。谢谢。但是,您如何检测如此细的线条?例如,在黑色区域底部的线条占剩余线条的20%的情况下nes,如果我们只寻找峰值,这些不会被消除吗?@Hamed我可以看到从这里开始的一种方法是通过多数投票。选择第一行,如果在位置
x
处有一个白点,那么现在,你说有一条垂直线通过
x
。对每一行重复。如果在给定位置
x
你得到的大多数线条“说”x上有一个白点,然后你画了一个垂直的传递到x上。如果你不细化线条(我相信乔纳斯拼错了,你不想在这里得到骨架)然后你可能会得到多条相邻的线,这些线可以很容易地折叠成一条。@Hamed:这里的输出是分割结果。你需要从这些线中提取什么信息?实际上,我需要完全检索线来重建图像。回答你的问题,线的数量也很重要如果它们被很好地突出显示,那么计算它们并不是问题。谢谢。很好的论文,谢谢!简单的谷歌搜索会找到以下源代码:它可能是也可能不是相关论文/算法的源代码。这是论文的主页: