
MATLAB边缘检测算子的实现
作者: 李神
1. 概述
边缘检测是图像处理和计算机视觉中的基本问题. 边缘检测的目的是识别数字图像中亮度明显变化的点. 图像属性的重大变化通常反映出重要事件和属性变化. 其中包括(i)深度不连续,(ii)表面方向上的不连续,(iii)材料属性的变化以及(iv)场景照明的变化. 边缘检测是图像处理和计算机视觉尤其是特征提取领域的研究领域.
一阶: Roberts Cross运算符,Prewitt运算符,Sobel运算符,Kirsch运算符,指南针运算符;
二阶: Marr-Hildreth,二阶导数在梯度方向上的零交叉,Canny算子,拉普拉斯算子.
2. 经典边缘检测算子简介
Roberts运算符,也称为Roberts运算符,是最简单的运算符之一. 它是一个使用局部差异运算符查找边的运算符. 他使用对角线方向上两个相邻像素之间的差异来近似渐变幅度以检测边缘. 垂直边缘的检测效果优于倾斜边缘,并且定位精度高. 对噪声敏感,不能抑制噪声的影响.
Prewitt运算符是用于边缘检测的一阶微分运算符. 它使用像素的上下像素与左右像素之间的灰度差异来检测边缘处的边缘,并去除一些虚假边缘,从而对噪声具有平滑效果. . 原理是使用两个方向模板在图像空间中与图像卷积. 这两个方向模板检测一个水平边缘和一个垂直边缘.
对于数字图像f(x,y)matlab canny算子边缘检测函数代码,Prewitt运算符定义如下:
G(i)= {[f(i-1,j-1)+ f(i-1,j)+ f(i-1,j + 1)]-[f(i + 1,j -1)+ f(i + 1,j)+ f(i + 1,j + 1)]}
G(j)= {[f(i-1,j + 1)+ f(i,j + 1)+ f(i + 1,j + 1)]-[f(i-1,j -1)+ f(i,j-1)+ f(i + 1,j-1)]}
然后P(i,j)= max [G(i),G(j)]或P(i,j)= G(i)+ G(j)

Sobel算法是像素图像边缘检测中最重要的运算符之一,并且在诸如机器学习,数字媒体和计算机视觉等信息技术领域中发挥着重要作用. 从技术上讲matlab canny算子边缘检测函数代码,它是一个离散的一阶差分算子,用于计算图像亮度函数阶跃的近似值. 在图像的任何一点上使用此运算符将生成与该点对应的梯度向量或法线向量.

拉普拉斯算子是n维欧式空间中的二阶微分算子,定义为梯度grad的散度div. 可以使用操作模板来计算该定理.
该函数的拉普拉斯算子也是该函数的黑塞矩阵的踪迹. 可以证明它是各向同性的,也就是说,它与坐标轴的方向无关,并且在坐标轴旋转之后,梯度结果也不会改变. 如果邻域系统是4个邻域,则拉普拉斯算子的模板为:
1
1
-4
1
1
4个邻域拉普拉斯算子
如果邻域系统是8个邻域,则拉普拉斯算子的模板为:
1
1
1
1
-8
1
1

1
1
8个邻域拉普拉斯算子
如前所述,拉普拉斯算子对噪声敏感,因此通常首先对图像进行平滑处理,因为平滑处理也是通过模板执行的,因此通常的分割算法会结合拉普拉斯算子和平滑算子生成新模板.
3. MATLAB实现方法一
实验图片:

使用Matlab内部函数边缘实现边缘检测算法:
I = imread('lena.jpg');%提取图像
img = rgb2gray(I);
[m,n] = size(img);
BW1 = edge(img,'sobel'); %使用Sobel算子进行边缘检测
BW2 = edge(img,'roberts');%使用Roberts算子进行边缘检测
BW3 = edge(img,'prewitt'); %使用Prewitt运算符进行边缘检测
BW4 = edge(img,'log'); %使用Log运算符进行边缘检测
BW5 = edge(img,'canny'); %使用Canny运算符进行边缘检测
h = fspecial('gaussian',5);%¸高斯滤波
BW6 = edge(img,'canny');%高斯滤波使用Canny运算符进行边缘检测
子图(2,3,1),imshow(BW1);
title('sobel edge check');
子图(2,3,2),imshow(BW2);
title('roberts edge check');
子图(2,3,3),imshow(BW3);
title('prewitt edge check');
子图(2,3,4),imshow(BW4);
title('log edge check');
子图(2,3,5),imshow(BW5);
title('canny edge check');
子图(2,3,6),imshow(BW6);
title('gasussian&canny edge check');
成就结果:


4. 方法二
原始实验图片

1)拉普拉斯算子的实现:
清除;
sourcePic = imread('lena.jpg');已读取%%图像
grayPic = mat2gray(sourcePic);%实现图像的矩阵归一化操作
[m,n] = size(grayPic);
newGrayPic = grayPic;
LaplacianNum = 0;%通过拉普拉斯运算获得的每个像素的值
LaplacianThreshold = 0.2;%设置阈值
对于j = 2: m-1%用于边界提取
对于k = 2: n-1
LaplacianNum = abs(4 * grayPic(j,k)-grayPic(j-1,k)-grayPic(j + 1,k)-grayPic(j,k + 1)-grayPic(j,k-1 ));
if(LaplacianNum> LaplacianThreshold)
newGrayPic(j,k)= 255;
其他
newGrayPic(j,k)= 0;
结束
结束
结束
figure,imshow(newGrayPic);
title(“拉普拉斯算子处理结果”)
成就结果:

2)Prewitt运算符的实现:
清除;
sourcePic = imread('lena.jpg');
grayPic = mat2gray(sourcePic);
[m,n] = size(grayPic);
newGrayPic = grayPic;
PrewittNum = 0;

PrewittThreshold = 0.5;%设置阈值
对于j = 2: m-1%用于边界提取
对于k = 2: n-1
PrewittNum = abs(grayPic(j-1,k + 1)-grayPic(j + 1,k + 1)+ grayPic(j-1,k)-grayPic(j + 1,k)+ grayPic(j -1,k-1)-grayPic(j + 1,k-1))+ abs(grayPic(j-1,k + 1)+ grayPic(j,k + 1)+ grayPic(j + 1,k + 1) )-grayPic(j-1,k-1)-grayPic(j,k-1)-grayPic(j + 1,k-1));
if(PrewittNum> PrewittThreshold)
newGrayPic(j,k)= 255;
其他
newGrayPic(j,k)= 0;
结束
结束
结束
figure,imshow(newGrayPic);
title('Prewitt运算符处理结果')
成就结果:

3)Sobel运算符的实现:
清除;
sourcePic = imread('lena.jpg');
grayPic = mat2gray(sourcePic);
[m,n] = size(grayPic);
newGrayPic = grayPic;
sobelNum = 0;
sobelThreshold = 0.7;
对于j = 2: m-1
对于k = 2: n-1
sobelNum = abs(grayPic(j-1,k + 1)+ 2 * grayPic(j,k + 1)+ grayPic(j + 1,k + 1)-grayPic(j-1,k-1) -2 * grayPic(j,k-1)-grayPic(j + 1,k-1))+ abs(grayPic(j-1,k-1)+ 2 * grayPic(j-1,k)+ grayPic( j-1,k + 1)-grayPic(j + 1,k-1)-2 * grayPic(j + 1,k)-grayPic(j + 1,k + 1));
if(sobelNum> sobelThreshold)
newGrayPic(j,k)= 255;
其他
newGrayPic(j,k)= 0;
结束
结束

结束
figure,imshow(newGrayPic);
title('Sobel运算符的处理结果')
成就结果:

5)Roberts运算符的实现:
清除所有;
clc;
sourcePic = imread('lena.jpg');
grayPic = mat2gray(sourcePic);
[m,n] = size(grayPic);
newGrayPic = grayPic;
robertsNum = 0;
robertThreshold = 0.2;
对于j = 1: m-1
对于k = 1: n-1
robertsNum = abs(grayPic(j,k)-grayPic(j + 1,k + 1))+ abs(grayPic(j + 1,k)-grayPic(j,k + 1));
if(robertsNum> robertThreshold)
newGrayPic(j,k)= 255;
其他
newGrayPic(j,k)= 0;
结束
结束
结束
figure,imshow(newGrayPic);
title('roberts运算符的处理结果')
成就结果:

5. 参考文件
1 ---------------------------------------------- ---------------------百度百科
欢迎大家关注我的微信公众号FPGA开源工作室和QQ组.

本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-236861-1.html
没有申请就闯进中国被侵略者侵犯国土
好坏好坏的
好你们继续掐再给中国十年发展时间
收台湾是大势所趋民心所向