我正在尝试检测布料图片中的水平和垂直条纹图案。应该检测到的两个图片示例如下:
我的第一种方法是尝试使用霍夫线检测器。问题在于衣服经常变形或起皱,因此线条不是直线,检测器失败了。
可以假设线条是水平或垂直的,并且有几度的偏差(水平和垂直条纹图案)。还可以假设这些线条是平行的。
如何检测这些略微变形的线条?
我正在尝试检测布料图片中的水平和垂直条纹图案。应该检测到的两个图片示例如下:
我的第一种方法是尝试使用霍夫线检测器。问题在于衣服经常变形或起皱,因此线条不是直线,检测器失败了。
可以假设线条是水平或垂直的,并且有几度的偏差(水平和垂直条纹图案)。还可以假设这些线条是平行的。
如何检测这些略微变形的线条?
我快速尝试了一下Matlab。您可以尝试使用opencv。使用reduce函数进行投影。以下是Matlab代码和一些结果:
im = imread('pRfUL.jpg');
gr = rgb2gray(im);
h = fspecial('sobel');
grad = imfilter(gr, h) + imfilter(gr, h'); % quick gradient
hpr = sum(grad);
vpr = sum(grad');
figure,
subplot(2,2,1), imshow(gr), title('gray scale')
subplot(2,2,2), imshow(grad), title('gradient')
subplot(2,2,3), plot(hpr), title('horizontal projection')
subplot(2,2,4), plot(vpr), title('vertical projection')
编辑
一个可能的改进是分别考虑水平和垂直情况。因此,针对每种情况对图像进行两次遍历(这可能对于噪声/纹理情况执行得更好,并且正如Nallath指出的-我认为他指的是双边滤波-你可以使用一些附加滤波)。也就是说,在寻找水平条带时,请使用水平滤波器,它将为水平方向的边缘提供强烈的响应。垂直情况也是如此。
grad = imfilter(gr, h); % for strong horizontal responses in the above code. use grad = imfilter(gr, h') for vertical
水平情况下的结果:请注意,水平投影和垂直偏移显著降低了。