首页 > 其他分享 >MATLAB边缘检测系统实现

MATLAB边缘检测系统实现

时间:2024-08-04 20:27:29浏览次数:11  
标签:adds img 阈值 检测 边缘 MATLAB new

MATLAB边缘检测

一、目的: 

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

二、内容:

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

三、原理或步骤:

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

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

1.滤波(去噪)。

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

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

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

Canny边缘检测的算法步骤:

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

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

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

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

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

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

四、运行结果和分析

每步运行效果:

Figure1原图:

Figure2  高斯模糊后:

Figure3  sobel边缘检测后:

Figure4  非极大抑制后:

五、算法程序

Main.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));   %另一侧插值得到的像素,同样和当前像素比较

        

        if isbigger

           new_edge(i,j)=img(i,j);

        end        

    end

end

figure;

imshow(uint8(new_edge))

%%下面是滞后阈值处理

up=120;     %上阈值

low=100;    %下阈值

set(0,'RecursionLimit',10000);  %设置最大递归深度

for i=1:m

    for j=1:n

      if new_edge(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)

标签:adds,img,阈值,检测,边缘,MATLAB,new
From: https://blog.csdn.net/2401_86418678/article/details/140911319

相关文章

  • 【学习笔记】Matlab和python双语言的学习(蒙特卡洛法)
    文章目录前言一、蒙特卡洛二、经典示例:计算圆周率π1.代码实现----Matlab2.代码实现----python三、示例2:三门问题1.代码实现----Matlab2.代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1E......
  • 利用MATLAB打造混凝土结构裂缝识别系统(二)
    文章目录前言一、操作说明二、导入图像三、选择裂缝识别方法1.“单裂缝识别”方法2.“多裂缝识别”方法四、结果输出与保存实际识别效果展示墙体裂缝:道路裂缝:衬砌裂缝:桥面裂缝:房屋楼板裂缝:前言本节主要介绍所设计的混凝土结构裂缝识别系统各个组件的具体操作与......
  • 1388、STM32单片机心率(脉搏)MAX30102血氧体温检测阈值报警无线蓝牙远程(程序+原理图+
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图六、proteus仿真程序流程图:原理图文字讲解:参考论文:资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩......
  • 1386、STM32单片机心率(脉搏)体温检测阈值设置报警无线蓝牙远程设计(程序+原理图+PCB
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图六、proteus仿真程序流程图:原理图文字讲解:参考论文:资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩......
  • Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断
    对于使用GAF-PCNN-MATT、GASF-CNN、GADF-CNN技术来进行多特征输入数据的分类预测或故障诊断,你可以考虑以下步骤:数据准备:准备你的多特征输入数据集,确保数据的质量和一致性。每个样本应该包含多个特征。特征提取:使用GramianAngularField(GAF)、GramianAngularSecto......
  • 基于IEEE802.11g标准的OFDM信号帧检测matlab仿真
    1.程序功能描述     现有的无线通信信道共享的无线信号识别为将来的软件定义的无线电系统是一个巨大的挑战。在这个项目中,学生将制定IEEE802.11无线信号在AWGN信道,利用MATLAB/Simulink技术来识别。一个完整的发射机模式将开发和实施。在AWGN信道下的性能进行评估。 基......
  • 如何利用Matlab网格生成器画太极
    注:首先要懂几何函数的定义!代码:1.主函数:clc,clear;closeall;g1=[1111;20-20;0-202;020-2;20-20;1221;0000;0000;0000;2222];%大○g2=[1111;010-1;10-10;-2-121;-1010;2211;1122;0000;-1-111;1111];%......
  • MATLAB生成各类区域网格剖分
    一、双洞模型代码:hg=[1111111120-20010-10-20210-10020-2012120-2012101111000000001111000000000000111122221111];ug=[1111010-1......
  • 灰狼优化算法(GWO)与长短期记忆网络(LSTM)结合的预测模型(GWO-LSTM)及其Python和MATLAB实现
    ####一、背景在现代数据科学和人工智能领域,预测模型的准确性和效率是研究者和工程师不断追求的目标,尤其是在时间序列预测、金融市场分析、气象预测等领域。长短期记忆(LSTM)网络是一种解决传统递归神经网络(RNN)在长序列学习中存在的梯度消失和爆炸问题的有效模型。LSTM能够保持......
  • 灰狼优化算法(GWO)与门控循环单元(GRU)结合的预测模型(GWO-GRU)及其Python和MATLAB实现
    ####一、背景深度学习已成为解决复杂时序数据预测问题的重要工具。在众多神经网络架构中,门控循环单元(GatedRecurrentUnit,GRU)凭借其在捕捉时间序列数据中的长程依赖性和相对较低的计算复杂度而受到广泛关注。此外,优化算法在深度学习模型的训练中扮演着至关重要的角色。灰......