Matlab实现图像边缘检测
作者:混z 时间:2021-02-06 07:40:58
为了在一幅图像 f 的(x,y)位置寻找边缘的强度和方向,所选择的工具就是梯度,梯度使用向量来表示:
该向量指出了图像 f 在位置(x,y)处的最大变化率的方向,梯度向量的大小表示为:
它是梯度向量方向变化率的值。
梯度向量的方向表示为:
梯度算子
roberts算子:
sobel算子:
prewitt算子:
Matlab实现
function output = my_edge(input_img,method)
if size(input_img,3)==3
input_img=rgb2gray(input_img);
end
input_img=im2double(input_img);
sobel_x=[-1,-2,-1;0,0,0;1,2,1];
sobel_y=[-1,0,1;-2,0,2;-1,0,1];
prewitt_x=[-1,-1,-1;0,0,0;1,1,1];
prewitt_y=[-1,0,1;-1,0,1;-1,0,1];
psf=fspecial('gaussian',[5,5],1);
input_img=imfilter(input_img,psf);%高斯低通滤波,平滑图像,但可能会使图像丢失细节
input_img=medfilt2(input_img); %中值滤波消除孤立点
[m,n]=size(input_img);
output=zeros(m,n);
if nargin==2
if strcmp(method,'sobel')
for i=2:m-1
for j=2:n-1
local_img=input_img(i-1:i+1, j-1:j+1);
%近似边缘检测,加快速度 %output(i,j)=abs(sum(sum(sobel_x.*local_img)))+abs(sum(sum(sobel_x.*local_img)));
output(i,j)=sqrt(sum(sum(sobel_x.*local_img))^2+sum(sum(sobel_y.*local_img))^2);
end
end
elseif strcmp(method,'prewitt')
for i=2:m-1
for j=2:n-1
local_img=input_img(i-1:i+1, j-1:j+1);
output(i,j)=sqrt(sum(sum(prewitt_x.*local_img))^2+sum(sum(prewitt_y.*local_img))^2);
end
end
else
errordlg('maybe you should input sobel or prewitt');
end
else %如果不输入算子的名称,默认使用roberts算子进行边缘检测
for i=1:m-1
for j=1:n-1
output(i,j)=abs(input_img(i,j)-input_img(i+1,j+1))+ ...
abs(input_img(i+1,j)-input_img(i,j+1));
end
end
end
output=imadjust(output);%使边缘图像更明显
thresh=graythresh(output);%确定二值化阈值
output=bwmorph(im2bw(output,thresh),'thin',inf);%强化细节
end
代码效果:
来源:https://blog.csdn.net/qq_44310495/article/details/111288118
标签:Matlab,边缘检测
0
投稿
猜你喜欢
如何利用Redis作为Mybatis的二级缓存
2023-07-05 10:51:11
SQL Server中使用SQL语句实现把重复行数据合并为一行并用逗号分隔
2024-01-18 03:06:54
MySQL命令无法输入中文问题的解决方式
2024-01-15 19:29:54
Python Web框架Flask中使用新浪SAE云存储实例
2022-11-03 06:27:16
Echarts基本入门之柱状图、折线图通用配置
2024-04-28 09:37:10
盘点十个超级好用的高级Python脚本
2023-12-04 23:41:27
Django与数据库交互的实现
2024-01-15 19:23:20
如何提升JavaScript的运行速度(DOM篇)
2010-05-17 13:32:00
sql2005 日志清理 SQL2005压缩清除日志的方法
2024-01-28 12:59:25
利用python实现可视化大屏
2023-08-17 17:29:17
ASP生成静态页面的方法
2010-05-27 12:13:00
Python+Matplotlib实现给图像添加文本标签与注释
2022-05-02 12:40:16
inner join和left join之间的区别详解
2024-01-27 12:57:17
python中property属性的介绍及其应用详解
2022-09-26 03:21:36
MySQL执行时间的查询
2024-01-14 13:54:25
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2024-05-11 10:25:13
基于Python制作AI聊天软件的示例代码
2023-09-27 14:58:25
Java使用正则表达式验证手机号和电话号码的方法
2023-11-20 08:07:12
解析python 中/ 和 % 和 //(地板除)
2021-04-19 02:05:14
基于canvas的二维码邀请函生成插件
2024-04-17 10:40:53