Matlab实现图像边缘检测

 更新时间:2021年10月25日 16:10:31   作者:混z  
这篇文章主要为大家详细介绍了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

代码效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python3中rank函数的用法

    python3中rank函数的用法

    今天小编就为大家分享一篇python3中rank函数的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 详解Django rest_framework实现RESTful API

    详解Django rest_framework实现RESTful API

    这篇文章主要介绍了详解Django rest_framework实现RESTful API,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 浅析使用Python搭建http服务器

    浅析使用Python搭建http服务器

    这篇文章主要介绍了使用Python搭建http服务器,本文通过代码实例相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python flask中静态文件的管理方法

    python flask中静态文件的管理方法

    下面小编就为大家分享一篇python flask中静态文件的管理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • python 添加用户设置密码并发邮件给root用户

    python 添加用户设置密码并发邮件给root用户

    这篇文章主要介绍了python 添加用户设置密码并发邮件给root用户的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 详解Python高阶函数

    详解Python高阶函数

    这篇文章主要介绍了Python高阶函数的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • 使用python实现拉钩网上的FizzBuzzWhizz问题示例

    使用python实现拉钩网上的FizzBuzzWhizz问题示例

    这篇文章主要介绍了使用python实现拉钩网上的FizzBuzzWhizz问题示例,需要的朋友可以参考下
    2014-05-05
  • 分位数回归模型quantile regeression应用详解及示例教程

    分位数回归模型quantile regeression应用详解及示例教程

    这篇文章主要为大家介绍了介绍了分位数回归quantile regeression的概念详解及代码示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Gradio中button组件的基本使用方式

    Gradio中button组件的基本使用方式

    Gradio中的button组件用于实现点击事件,通过click事件绑定函数来处理值的变化,点击时,函数接收组件的值作为输入,返回新的值或更新组件的属性,示例代码展示了如何在点击按钮时修改文本框的值并控制按钮的可见性
    2024-11-11
  • Python读取sqlite数据库文件的方法分析

    Python读取sqlite数据库文件的方法分析

    这篇文章主要介绍了Python读取sqlite数据库文件的方法,结合实例形式分析了Python引入sqlite3模块操作sqlite数据库的读取、SQL命令执行等相关操作技巧,需要的朋友可以参考下
    2017-08-08

最新评论