使用roberts算子对图像进行边缘检测,并二值化的matlab代码实现

对一幅灰度图像进行边缘检测、二值化,这里使用roberts算子,程序如下:

%%使用梯度算子实现边缘检测
%%使用matlab自带的函数进行边缘检测
clear all;
I = imread('rice.png'); %导入图像
imshow(I), title('none');%显示原图
G = edge(I, 'roberts');%应用罗伯特算子对像进行边缘检测,并进行二值化
figure, imshow(G), title('roberts');
%%另有博客主给出的MATLAB实现五种边缘检测,Matlab图像二值化,hen有参考意义

%%自己编码,先卷积检测边缘(使用roberts算子),再将图像二值化

myF = I;

%卷积操作,先补零
myF(:, size(I, 2) + 1) = 0;
myF(size(I, 1) + 1, :) = 0;
%进行卷积检测边缘
P = ones(size(I, 1) + 1, size(I, 2) + 1);
for i = 1:size(I, 1)
    for j = 1:size(I, 2)
        P(i, j) = P(i, j) + abs(myF(i + 1, j + 1) -myF(i, j)) + abs(myF(i +1, j) - myF(i, j + 1));
    end
end
P = P(1:size(I, 1), 1:size(I, 2));
figure, imshow(P, []), title('梯度图像');

%二值化操作
%先统计0到255灰度级对应的像素个数  
L = zeros(1, 256);  
for i = 1:size(P, 1)  
    for j = 1:size(P, 2)  
       for k = 0:255  
            if P(i, j) == k  
                L(k+1) = L(k+1) + 1;  
           end  
        end  
    end  
end  
%绘制I的灰度直方图  
figure, bar(0:255, L);  
axis([0,255,0,1650]);%设置坐标轴x和y的范围——x从0到255,y从0到1650
%%取谷底的灰度级45为二值化阈值
for i = 1:size(P, 1)  
    for j = 1:size(P, 2)  
        if P(i, j) <= 45  
            P(i, j) = 0;
        else
            P(i, j) = 1;
        end
    end  
end  

figure, imshow(P, []), title('二值化图像');%输出二值化图像

结果展示:

原图:                                                                使用matlab自带函数进行的边缘检测结果:

 

自己使用roberts算子卷积后得到的梯度图像:

统计的灰度直方图,大约在45灰度级处取到谷底:

对梯度图像二值化得到的结果:

 

自己编码得到的边缘检测结果与matlab自带函数进行的边缘检测结果略有不同。。。

  • 10
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值