MATLAB边缘检测

一、目的:

熟悉边缘检测原理,并运用matlab软件实现图像的canny边缘检测,体会canny边缘检测的优缺点。

二、内容:

编写matlab程序,实现对lena图像的边缘检测,输出程序运行结果。

三、原理或步骤:

首先回顾一下边缘检测的一般步骤:

边缘检测算法一般包含如下四个步骤:

1.滤波(去噪)。

2.增强(一般是通过计算梯度幅值)。

3.检测(在图像中有许多点的梯度幅值会比较大,而这些点并不都是边缘,所以应该用某种方法来确定边缘点,比如最简单的边缘检测判据:梯度幅值阈值)。

4.定位(有的应用场合要求确定边缘位置,可以在子像素水平上来估计,指出边缘的位置和方向)

Canny边缘检测的算法步骤:

1.用高斯滤波器平滑图像(不同尺度的Canny检测子由高斯的不同标准差来表示)用一阶偏导的有限差分来计算梯度的幅值和方向。

2.对高斯平滑后的图像进行sobel边缘检测。这里需要求横的竖的还有联合的,所以一共三个需要sobel边缘检测图像。

3.对联合的sobel检测图像进行非极大值抑制(Non-Maxima Suppression, NMS)

4.用双阈值算法检测和连接边缘,并进行滞后阈值处理。

其中非极大值抑制细化了幅值图像中的屋脊带,只保留幅值局部变化最大的点。

双阈值算法:用两个阈值得到两个阈值图像,然后把高阈值的图像中的边缘连接成轮廓,连接时到达轮廓的端点时,在低阈值图像上找可以连接的边缘。不断收集,直到所有的间隙连接起来为止。

四、运行结果和分析

每步运行效果:

Figure1原图:

Canny算子的方向性使得它的边缘检测和定位优于其他算子,具有更好的边缘强度估计,能产生梯度方向和强度两个信息。

五、算法程序

M ain.m

clear all;

close all;

clc;

img=imread('lena.bmp');

imshow(img);

m n\]=size(img); img=double(img); %%canny边缘检测的前两步相对不复杂,所以我就直接调用系统函数了 %%高斯滤波 w=fspecial('gaussian',\[5 5\]); img=imfilter(img,w,'replicate'); figure; imshow(uint8(img)) %%sobel边缘检测 w=fspecial('sobel'); img_w=imfilter(img,w,'replicate'); %求横边缘 w=w'; img_h=imfilter(img,w,'replicate'); %求竖边缘 img=sqrt(img_w.\^2+img_h.\^2); %注意这里不是简单的求平均,而是平方和在开方。 figure; imshow(uint8(img)) %%下面是非极大抑制 new_edge=zeros(m,n); for i=2:m-1 for j=2:n-1 Mx=img_w(i,j); My=img_h(i,j); if My\~=0 o=atan(Mx/My); %边缘的法线弧度 elseif My==0 \&\& Mx\>0 o=pi/2; else o=-pi/2; end %Mx处用My和img进行插值 adds=get_coords(o); %边缘像素法线一侧求得的两点坐标,插值需要 M1=My\*img(i+adds(2),j+adds(1))+(Mx-My)\*img(i+adds(4),j+adds(3)); %插值后得到的像素,用此像素和当前像素比较 adds=get_coords(o+pi); %边缘法线另一侧求得的两点坐标,插值需要 M2=My\*img(i+adds(2),j+adds(1))+(Mx-My)\*img(i+adds(4),j+adds(3)); %另一侧插值得到的像素,同样和当前像素比较 isbigger=(Mx\*img(i,j)\>M1)\*(Mx\*img(i,j)\>=M2)+(Mx\*img(i,j)\up \&\&new_edge(i,j)\~=255 %判断上阈值 new_edge(i,j)=255; new_edge=connect(new_edge,i,j,low); end end end figure; imshow(new_edge==255)

相关推荐
该用户已不存在1 小时前
Mojo vs Python vs Rust: 2025年搞AI,该学哪个?
后端·python·rust
站大爷IP3 小时前
Java调用Python的5种实用方案:从简单到进阶的全场景解析
python
xiaohouzi1122339 小时前
OpenCV的cv2.VideoCapture如何加GStreamer后端
人工智能·opencv·计算机视觉
用户8356290780519 小时前
从手动编辑到代码生成:Python 助你高效创建 Word 文档
后端·python
小关会打代码9 小时前
计算机视觉案例分享之答题卡识别
人工智能·计算机视觉
c8i9 小时前
python中类的基本结构、特殊属性于MRO理解
python
天天进步20159 小时前
用Python打造专业级老照片修复工具:让时光倒流的数字魔法
人工智能·计算机视觉
liwulin05069 小时前
【ESP32-CAM】HELLO WORLD
python
荼蘼9 小时前
答题卡识别改分项目
人工智能·opencv·计算机视觉
Doris_202310 小时前
Python条件判断语句 if、elif 、else
前端·后端·python