【问题标题】:Finding positive and negative edges using a sobel filter使用 sobel 滤波器查找正边缘和负边缘
【发布时间】:2013-04-01 23:22:16
【问题描述】:

我有一个二进制条形码图像,我想应用我创建的 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);

【问题讨论】:

    标签: matlab filter


    【解决方案1】:

    直接在阈值图像上使用卷积操作。还要确保将其转换为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,[]);
    

    输出:

    【讨论】:

    • 非常感谢,我应该在最初发布之前删除那个 for 循环。
    • @Navack 没问题。如果它回答了您的问题,请确保接受答案。
    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2015-07-19
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多