基于matlab的Canny算法的边缘检测(附源代码)

您所在的位置:网站首页 边缘检测算法流程图怎么画 基于matlab的Canny算法的边缘检测(附源代码)

基于matlab的Canny算法的边缘检测(附源代码)

2024-06-04 18:19| 来源: 网络整理| 查看: 265

边缘概述

边缘可以认为是图像中一定数量点亮度发生变化的地方,边缘检测大体上就是计算这个亮度变化的导数,依据导数的大小,判断亮度变化大小,从而界定目标与背景。在经典的边缘检测算法中Roberts算子,Prewitt算子,Sobel算子属于一阶差分算子,LoG算子,Canny算子属于二阶差分算子。一阶差分算子,就是求图像灰度变化曲线的导数,从而可以突出图像中的对象边缘,而二阶差分算子,求图像灰度变化导数的导数,对图像中灰度变化强烈的地方很敏感,从而可以突出图像的纹理结构。即一阶求边缘,二阶不仅检测出边缘还可检测出弱边缘(纹理)

**(源码资源****有常(注意目前是有常哦)私我vx:xdsqczkyqs713,源码(带GUI,GUI是用户界面的意思)40圆, 加一份课设报告50圆 给的联系方式有常求源码的小可爱们加,非诚勿扰/认真脸)****

这里给一个报告目录供大家参考: 1 概述 3 2边缘检测 4 2.1 一阶检测算子 4 2.1.1 Roberts算子 4 2.1.2 Prewitt算子 5 2.1.3 Sobel算子 6 2.2 二阶Log算子 7 2.3 Canny算法 8 3 程序设计 10 3.1 Canny算法实现 10 3.2 GUI程序设计 12 4结果展示与分析 14 4.1 GUI操作说明 14 4.2 程序测试 16 4.3 结果分析 19 5 心得体会 20 6 参考文献 21

有毕设徐秋,Canny算法改进,见这篇基于双边滤波的改进型Canny算法边缘检测冠状动脉CT图像

Canny算法

从表面效果上来讲,Canny算法是对Sobel、Prewitt等算子效果的进一步细化和更加准确的定位,同时借鉴了LoG算子先进行高斯滤波(噪声平滑)再进行图像梯度计算的思想。 Canny算法的步骤如下:

1、对输入图像进行高斯平滑,降低错误率。

实现方法就是采用高斯平滑算子进行卷积运算。假设原图像为img0 gauss = [1 2 1; 2 4 2;1 2 1] / 16; % Gauss平滑模板 img = conv2(img0, gauss, ‘same’); % 平滑

2、计算梯度幅度和方向来估计每一点处的边缘强度与方向。

一般采用Sobel算子的水平方向和竖直方向的模板分别进行卷积,分别得到水平方向的检测结果DX和垂直方向的检测结果DY,进一步可得到梯度的幅度: sobelx = [-1 0 1; -2 0 2; -1 0 1]; % Sobel水平边缘模板 sobely = sobelx’; % Sobel垂直边缘模板 gradx = conv2(img, sobelx, ‘same’); % 水平边缘卷积 grady = conv2(img, sobely, ‘same’); % 垂直边缘卷积

M = 根号下DX的平方+DY的平方 为了简化计算,通常也可以近似写作: M=|DX|+|DY| 边缘方向为: θ=arctan⁡(DY/DX)

3、根据梯度方向,对梯度幅值进行非极大值抑制。

本质上是对Sobel、Prewitt等算子结果的进一步细化。 非极大值抑制是Canny算法最重要的思想,它不像其他的算子仅仅利用了梯度值的大小,还利用了梯度值的方向,这也是Canny算法求出的边缘具有无方向性,任意方向的边缘检测效果都很好的原因。 那么怎么利用梯度方向呢?看下边这张盗图: 在这里插入图片描述 哦,原来梯度方向与边缘方向满足左手定则(掌心对图像,大拇指指向边缘方向,四指则是梯度方向),也就是说通过计算出的某个像素点的梯度方向我们可以得到该位置的边缘方向。 在33区域内,边缘可以划分为垂直、水平、45°、135°,4个方向,据此将360等分4份(不论正负,区域关于中心方向对称),同样的梯度方向也为四个方向,可划分为4份*。 水平边缘–梯度方向为垂直: - pi / 8



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3