Matlab与FPGA图像处理——Roberts、Prewitt、Sobel、LOG、Canny等常见的图像边缘检测算子比较

6 篇文章 6 订阅
3 篇文章 3 订阅

MATLAB 与 FPGA无线通信、图像处理、数字信号处理系列

基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现

        图像的边缘是图像在亮度级上的阶梯变化的位置,因此可以通过来一阶微分增强边缘的变化,以此检测边缘位置;二阶导数对图像函数的一阶导数求导,能够使检测到的边缘更加的精细。
        这里通过 MATLAB 软件中的几种边缘检测算子对一幅图像进行边缘检测,对比各种算子的性能并选择一种作为 FPGA 硬件实现的边缘检测算法
        使用图像处理中常用的 Lena 图像
在这里插入图片描述
该图像的边缘信息丰富,便于进行算法的性能对比。由于这几种边缘检测算子只能操作灰度图像,所以首先得到灰度图像,在灰度图像中加入均值为0、方差为0.01的高斯噪声,得到噪声图像,使用不同的边缘检测算子处理输入的两幅灰度图,分析边缘检测和抗噪性能。

I=imread('a1.jpg');%载入原图像
figure;
subplot(1,3,1);
imshow(I),title('原图像')%显示原图像
I1=rgb2gray(I);%将原图像进行灰度化
subplot(1,3,2);
imshow(I1),title('灰度图像')%显示灰度图像
I2=imnoise(I1, 'gaussian',0,0.01);%对灰度图像加入均值为0,方差为0.01的高斯噪声
subplot(1,3,3);
imshow(I2),title('加高斯噪声后的图像')%显示加噪声后的图像

figure;
BW1=edge(I1,'roberts','both');%用Roberts算子检测边缘
subplot(2,3,1);
imshow(BW1),title('roberts算子')
BW2=edge(I1,'prewitt','both');%用Prewitt算子检测边缘
subplot(2,3,2);
imshow(BW2),title('prewitt算子')

tic
BW3=edge(I1,'sobel','both');%用Sobel算子检测边缘
toc
disp(['运行时间: ',num2str(toc)]);
subplot(2,3,3);
imshow(BW3),title('sobel算子')
BW4=edge(I1,'log','both');%用LOG算子检测边缘
subplot(2,3,4);
imshow(BW4),title('log算子')
BW5=edge(I1,'canny','both');%用Canny算子检测边缘
subplot(2,3,5);
imshow(BW5),title('canny算子')

figure;
BW6=edge(I2,'roberts','both');%用Roberts算子检测边缘
subplot(2,3,1);
imshow(BW6),title('roberts算子抗噪声性能检测')
BW7=edge(I2,'prewitt','both');%用Prewitt算子检测边缘
subplot(2,3,2);
imshow(BW7),title('prewitt算子抗噪声性能检测')
BW8=edge(I2,'sobel','both');%用Sobel算子检测边缘
subplot(2,3,3);
imshow(BW8),title('sobel算子抗噪声性能检测')
BW9=edge(I2,'log','both');%用LOG算子检测边缘
subplot(2,3,4);
imshow(BW9),title('log算子抗噪声性能检测')
BW10=edge(I2,'canny','both');%用Canny算子检测边缘
subplot(2,3,5);
imshow(BW10),title('canny算子抗噪声性能检测')

figure;
subplot(2,5,1);imshow(BW1),title('roberts算子')
subplot(2,5,2);imshow(BW2),title('prewitt算子')
subplot(2,5,3);imshow(BW3),title('sobel算子')
subplot(2,5,4);imshow(BW4),title('log算子')
subplot(2,5,5);imshow(BW5),title('canny算子')

subplot(2,5,6);imshow(BW6),title('roberts算子抗噪声性能检测')
subplot(2,5,7);imshow(BW7),title('prewitt算子抗噪声性能检测')
subplot(2,5,8);imshow(BW8),title('sobel算子抗噪声性能检测')
subplot(2,5,9);imshow(BW9),title('log算子抗噪声性能检测')
subplot(2,5,10);imshow(BW10),title('canny算子抗噪声性能检测')

        如图所示为分别为 Lena 图像的原图像、无噪声灰度图像和有噪声灰度图像,可以看到加入噪声之后图像上有明显变化。
在这里插入图片描述
        如图所示为输入无噪声的灰度图像所得到的5种边缘检测算子的效果图,可得:Roberts 算子可以得到非常细的边缘,定位的精度很高,能够检测到的边缘较少,最大的优点是计算量小速度快,适用于边缘明显且噪声较少的图像分割。Prewitt 算子和 Sobel 算子检测出的结果类似,相比之下 Sobel 检测的边缘更加突出;LOG 和 Canny 算子检测出的边缘比较连贯,且具有较好的平滑性,边缘细节也更多。
在这里插入图片描述
        如图所示为加入噪声后的边缘检测对比图。可知噪声对边缘检测的影响很大:Roberts 算子丢失了很多边缘,已经影响到图像的肉眼识别;Prewitt 算子和 Sobel 算子的抗噪声性能比 Roberts 算子好一些,有一定的抑制噪声的能力;LOG 算子和 Canny 算子检测的边缘清晰连贯,但是噪声情况下会出现很多伪边缘,在噪声较大时已经影响到正常的识别,Canny 算子在这方面更加明显。在实际应用中 Sobel 算子的效率要高于 Canny 算子,适用于对效率要求较高而不关心细纹理情况的场合。
在这里插入图片描述
        通过综合考虑边缘定位的效果、算法的抗噪声性能和算法实现的复杂度,选择 Sobel 算子作为实时视频图像的边缘检测算子,搭建实时视频采集平台后使用 FPGA 对 Sobel 边缘检测算法进行硬件加速

MATLAB 与 FPGA无线通信、图像处理、数字信号处理系列

基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现

欢迎关注:FPGA探索者
在这里插入图片描述

  • 3
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Sobel算子Canny算子、Prewitt边缘检测算子Roberts边缘检测算子都是常用的图像边缘检测算法,它们各有优缺点,下面对它们进行比较: 1. Sobel算子 Sobel算子是一种基于梯度的边缘检测算法,它可以在图像中检测到水平和垂直方向上的边缘。相对于其他算法Sobel算子计算速度快,易于实现,同时在边缘检测中也有较好的效果。但是,Sobel算子只能检测到水平和垂直方向上的边缘,对于斜向边缘的检测效果不太好。 2. Canny算子 Canny算子是一种常用的边缘检测算法,它利用高斯滤波器平滑图像,然后计算梯度,最后使用非极大值抑制和双阈值处理来检测边缘。Canny算子可以检测到所有方向上的边缘,同时它通过双阈值处理可以控制检测到的边缘数量。但是,Canny算子的计算量比较大,运行速度比较慢。 3. Prewitt边缘检测算子 Prewitt算子也是一种基于梯度的边缘检测算法,它与Sobel算子类似,可以检测到水平和垂直方向上的边缘。相对于Sobel算子,Prewitt算子的计算量较小,但是在边缘检测中的效果不如Sobel算子。 4. Roberts边缘检测算子 Roberts算子是一种基于微分的边缘检测算法,它使用两个 $2\times 2$ 的卷积核来计算图像中每个像素点的梯度值,从而得到边缘信息。相对于其他算法Roberts算子计算速度快,但其缺点是对噪声比较敏感,且检测到的边缘比较粗糙。 综上所述,不同的边缘检测算法有各自的优缺点,需要根据实际应用场景进行选择。在一些需要快速处理的场景中,可以选择Sobel算子Roberts算子;在需要精确检测、对噪声抗干扰的场景中,可以选择Canny算子;在计算资源有限的场景中,可以选择Prewitt算子

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值