【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt

这篇具有很好参考价值的文章主要介绍了【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Sobel边缘检测算法

1、算法简介

Sobel 算子算子包含两组 3x3 的矩阵,如图所示:
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
对于图像而言,取 3 行 3 列的图像数据,将图像数据与对应位置的算子的值相乘再相加,得到 x 方向的 Gx ,和 y 方向的 Gy ,将得到的 Gx 和 Gy ,平方后相加,再取算术平方根,得到 Gxy ,近似值为 Gx 和 Gy 绝对值之和,将计算得到的 Gxy 与我们设定的阈值相比较,Gxy 如果大于阈值,表示该点为边界点,此点显示黑点,否则显示白点。如图所示:
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt

2、matlab实现

clear;
sob=imread('bianyuan1.jpg');      %读取原图像
grayPic=mat2gray(sob);         %矩阵归一化
[m,n]=size(grayPic);           %获取图片大小
newGrayPic=grayPic;                %保留图像边缘一个像素
sobelNum=0;                       
sobelThreshold=0.5;                 %设定阈值
for j=2:m-1                        %进行边界提取
    for k=2:n-1
sobelNum=abs(grayPic(j-1,k+1)+2*grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-2*grayPic(j,k-1)-grayPic(j+1,k-1))+abs(grayPic(j-1,k-1)+2*grayPic(j-1,k)+grayPic(j-1,k+1)-grayPic(j+1,k-1)-2*grayPic(j+1,k)-grayPic(j+1,k+1));
        if(sobelNum > sobelThreshold)
            newGrayPic(j,k)=255;
        else
            newGrayPic(j,k)=0;
        end
    end
end
figure;
imshow(newGrayPic);

3、Sobel检测结果

【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt

二、Roberts边缘检测算法

1、算法简介

Roberts算子是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘的走向垂直(正交)。
梯度算子定义为:
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
可以近似为:
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
由此,我们可得图像离散化(差分代替偏导)的对角线Roberts算子:
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt

2、matlab实现

clear;
rob=imread('bianyuan1.jpg');        %读取原图像
gp=mat2gray(rob);           %图像矩阵归一化
[m,n]=size(gp);              %计算图像大小
newGrayPic=gp;                 
robertsNum=0;                        %经Roberts算子计算得到的每个像素的值
robertThreshold=0.2;                   %设定阈值
for j=1:m-1                           %进行边界提取
    for k=1:n-1
      robertsNum=abs(gp(j,k)-gp(j+1,k+1))+abs(gp(j+1,k)-gp(j,k+1));
      if(robertsNum > robertThreshold)
            newGrayPic(j,k)=255;
       else
            newGrayPic(j,k)=0;
      end
    end
end
figure;
imshow(newGrayPic);

3、roberts检测结果

【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt

三、Prewitt边缘检测算法

1、算法简介

Prewitt算子也是一种一阶微分算子,与Robert使用22的模板不同,Prewitt算子使用的是33的模板,利用像素点上下、左右邻点的灰度差来检测边缘,故其边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
例如,下面给出Prewitt算子的模板,在像素点P5处 x 和 y 方向上的梯度大小 g_x 和 g_y 分别计算为:
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt

2、matlab实现

clear;
pre=imread('bianyuan1.jpg');       %读取原图像
gp=mat2gray(pre);    %图像矩阵归一化
[m,n]=size(gp);
newGrayPic=gp;           %保留图像边缘一个像素
PrewittNum=0;            
PrewittThreshold=0.5;          %设定阈值
for j=2:m-1                   %进行边界提取
for k=2:n-1
PrewittNum=abs(gp(j-1,k+1)-gp(j+1,k+1)+gp(j-1,k)-gp(j+1,k)+gp(j-1,k-1)-gp(j+1,k-1))+abs(gp(j-1,k+1)+gp(j,k+1)+gp(j+1,k+1)-gp(j-1,k-1)-gp(j,k-1)-gp(j+1,k-1));
        if(PrewittNum > PrewittThreshold)
            newGrayPic(j,k)=255;
        else
            newGrayPic(j,k)=0;
        end
    end
end
figure;
imshow(newGrayPic);

3、Prewitt检测结果

【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
参考:
链接: 基于Sobel算法的边缘检测简介
链接: Roberts算子边缘检测原理及实现
链接: 图像边缘检测之Prewitt算子文章来源地址https://www.toymoban.com/news/detail-445324.html

到了这里,关于【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包