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

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探索者
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DengFengLai123/article/details/105107609#comments_24079160