【发布时间】:2016-04-10 04:04:43
【问题描述】:
在附加的图像中,有周期性的垂直条纹,它们沿 x 轴是随机的,并且沿 y 轴的强度会有所不同。
有关如何检测这些的任何建议?
理想情况下,我想通过输出显示条纹的二进制图像来检测这些(我想它最终会看起来像条码)。
谢谢!
【问题讨论】:
标签: matlab image-processing computer-vision image-segmentation edge-detection
在附加的图像中,有周期性的垂直条纹,它们沿 x 轴是随机的,并且沿 y 轴的强度会有所不同。
有关如何检测这些的任何建议?
理想情况下,我想通过输出显示条纹的二进制图像来检测这些(我想它最终会看起来像条码)。
谢谢!
【问题讨论】:
标签: matlab image-processing computer-vision image-segmentation edge-detection
Photon 的回答非常好:他建议使用带状垂直边缘过滤器来捕捉条纹的垂直边缘。
但是,如果您对定位条纹本身而不是边缘感兴趣,您可以考虑采用稍微不同的方法:
我建议,首先,消除“DC”分量,以便条纹会从大致恒定的背景中“弹出”,然后使用垂直的sum 来定位它们并生成蒙版。
这是代码的草图:
img = im2double( imread('http://i.stack.imgur.com/SqZrf.jpg') ); %// read the image
使用水平过滤器来估计局部“DC”,即条纹消失的图像:
dc_est = imfilter(img, ones(1,31)/31, 'symmetric' );
查看图像和估计的“DC”之间的差异应该会使条纹突出并易于使用全局阈值进行阈值:
global_thr = 0.025;
mask = ones(size(img,1),1)*(mean(img-dc_est,1)>global_thr);
figure; imshow(mask);
估计的“DC”dc_est 看起来像:
如果您想进行更复杂的冒险,我建议您探索这项工作:I. Horev, B. Nadler, E. Arias-Castro, M. Galun, R.Basri Detection of long edges on a computational budget: a sub-linear approach (SIAM 2015)。该方法旨在在噪声强度图像中找到这些难以捉摸的边缘和脊。
【讨论】: