使用sobel滤波器找到正边缘和负边缘

时间:2013-04-01 15:02:23

标签: matlab filter

我有一个二进制条码图像,我想应用我创建的sobel滤镜,以便我可以检测到条形码行的正/负垂直边缘,然后我可以使用它来确定每个条形码行的开始/结束。 实现我自己的sobel滤波器的想法是,我可以保留极性(对于每个条形码行的开始/结束),然后在正/负值上绘制不同的颜色线,标记条形码中每个条的开始和结束。

我的问题是,当我在输出图像中应用滤镜时,我没有从原始条形码中获取每一行。任何人都可以在我的代码中看到问题吗?

Image =imread('barcode.jpg')
I = im2double(Image);
G  = rgb2gray(I);
avgI=mean(mean(G))
Threshold = avgI;
T=(G<Threshold);


figure()
New = T.*G
imshow(New);
G = [1 0 -1
     2 0 -2 
     1 0 -1];

Output = I;
for n = 1:1000
Output = conv2(New,G); % 2D Convolution Function
end

subplot(1,2,1), imshow (New);
subplot(1,2,2), imshow (Output);

1 个答案:

答案 0 :(得分:0)

直接在阈值图像上使用卷积运算。另外,请务必将其转换为double,因为它属于logical类。最后,我不知道你为什么要进行1000次卷积,但总的来说,我认为你付出了很大的努力并且相对接近于解决方案。

代码:

Image =imread('barcode.jpg');
I = im2double(Image);
G  = rgb2gray(I);
avgI=mean(mean(G));
Threshold = avgI;
T=(G<Threshold);


figure
G = [1 0 -1
     2 0 -2 
     1 0 -1];

Output = conv2(double(T),G); % 2D Convolution Function

subplot(1,2,1), imshow (T,[]);
subplot(1,2,2), imshow (Output,[]);

输出:

enter image description here