Matlab实现图像边缘检测
作者:混z 发布时间:2021-02-06 07:40:58
标签:Matlab,边缘检测
为了在一幅图像 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
0
投稿
猜你喜欢
- 我认为多选列表具有完美的功能——只需按下Ctrl键,同时点击鼠标从列表中选择多个项目。以下是一个典型的多选列表框:选出你最喜爱的快餐:&nb
- 对图片进行resize、裁剪、旋转、翻转图片处理时常用的手段有resize、裁剪、旋转、翻转,简单介绍一下python中怎么利用PIL库和t
- 一、写在前面本文基于64位windows系统(鼠标右键点击桌面“此电脑”图标——属性可查看电脑系统版本)、python3.x(pycharm
- 关于list的insert函数list#insert(ind,value)在ind元素前面插入value首先对ind进行预处理:如果ind&
- 本文实例为大家分享了php微信公众号开发之快递查询的具体代码,供大家参考,具体内容如下快递查询数组用法foreach查询接口是:爱快递:ht
- 如何去读取一个没有表头的二维csv文件(如下图所示)?并以元组的形式表现数据:((1.0, 0.0, 3.0, 180.0), (2.0,
- 随机数和蒙特卡洛模拟求解单一变量非线性方程求解线性系统方程函数的数学积分常微分方程的数值解等势线绘图和曲线:等势线 import
- 本文实例分析了php5.4传引用时报错问题。分享给大家供大家参考,具体如下:php5.3系列版本以及以前版本,传引用没有什么问题,升级到ph
- 本文为大家分享了童年掌机游戏,基于pygame实现打砖块的具体代码,供大家参考,具体内容如下项目背景: 小时候有过一个掌机游戏机,里面有俄罗
- 导言篇:我的python环境是:python3.6.5这里我选择的GUI编程包是:tkintertkinker在python2.5以后就是自
- 描述:使用QtDesignner设计界面,pyQt5+python3实现主体方法制作的猜数字游戏。游戏规则:先选择游戏等级:初级、中级、高级
- 要将xian80地理坐标系转换成投影坐标系:xian1980 = """GEOGCS["GCS_Xi
- 首先我们应当了解什么是math库:math库是python提供的内置数学类函数库,math库不支持复数类型,仅支持整数和浮点数运算。math
- 前言随着圣诞的到来,大家纷纷@官方微信给自己的头像加上一顶圣诞帽。当然这种事情用很多P图软件都可以做到。但是作为一个学习图像处理的技术人,还
- 用mysqldump和source可以使用这种方式导出数据:mysqldump -urott -P5678 --default-charac
- asp压缩access数据库,具体asp代码见下: Class DatabaseTools &n
- 原来工作中曾经碰到过UL列表里一些异常的表现,加上昨天看到了http://bbs.blueidea.com/thread-2984871-1
- 前言最近开始学习深度学习相关的内容,各种书籍、教程下来到目前也有了一些基本的理解。参考Keras的官方文档自己做一个使用applicatio
- 平时我们写个脚本,要放到后台执行去,我们怎么做呢?nohup python example.py 2>&1 /dev/null
- 什么是 NFT?NFT英文全称为Non-Fungible Token,翻译成中文就是:非同质化代币,具有不可分割、不可替代、独一无二等特点。