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)

相关推荐
B站_计算机毕业设计之家12 分钟前
大数据实战:Python+Flask 汽车数据分析可视化系统(爬虫+线性回归预测+推荐 源码+文档)✅
大数据·python·数据分析·flask·汽车·线性回归·预测
晚枫~13 分钟前
零基础快速上手Playwright自动化测试
javascript·python·测试工具·c#·自动化
机器学习之心15 分钟前
PINN物理信息神经网络风电功率预测!引入物理先验知识嵌入学习的风电功率预测新范式!Matlab实现
神经网络·学习·matlab·风电功率预测·物理信息神经网络
该用户已不存在1 小时前
Python项目的5种枚举骚操作
后端·python
mortimer2 小时前
从 Python+venv+pip 迁移到 uv 全过程 及 处理 torch + cuda 的跨平台指南
pytorch·python·macos
berryyan2 小时前
Windows WSL 环境下配置 Claude Code 非官方账号2233.ai完整教程
人工智能·python
道传科技上位机2 小时前
机器视觉九点标定(现场实用版)
人工智能·数码相机·计算机视觉
用户8356290780512 小时前
告别冗余:用Python删除PDF中的超链接
后端·python
星期天要睡觉2 小时前
计算机视觉(opencv)——基于 MediaPipe 的手势识别系统
人工智能·opencv·计算机视觉
woshigaowei51462 小时前
VS(QT)调用Matlab函数的方法
qt·matlab·vs