数字图像边缘检测

 

所有结果均是参考百度文库:http://wenku.baidu.com/link?url=Vyc2wB3Hl_LDtpp7JsVN_-MVGqw6Is1QyTfo2Yrl6jiWoU6G_kJ2I1w8x05qsJIpSCKWXtU_7Z0T2fuQwsc8t585BJr27Ijq2zPPietinjO

 

首先介绍了几种常见的数字图像边缘检测算法,然后给出检测结果,并给出matlab代码。

 

Roberts算子:采用对角线方向相邻两像素之差表示信号的突变,检测水平和垂直方向边缘的性能好于斜线方向,定位精度比较高,但对噪声敏感,检测出的边缘较细。

Prewitt算子:对噪声有平滑作用,检测出的边缘比较粗,定位精度低,容易损失角点。

Kirsch算子:Kirsch算子是像素邻域的加权和,模板中心值较大,不但产生较好的边缘效果,而且对噪声具有平滑作用。但存在伪边缘,边缘比较粗且定位精度低。

Laplacian算子:是二阶微分算子,对图像中的阶跃性边缘点定位准确,对噪声非常敏感,丢失一部分边缘的方向信息,造成一些不连续的检测边缘。

LoG算子:首先用高斯函数进行滤波,然后使用Laplacian算子检测边缘,克服了Laplacian算子抗噪声能力比较差的缺点。

Canny算子:采用高斯函数对图像进行平滑处理,因此具有较强的噪声抑制能力;同样该算子也将一些高频边缘平滑掉,造成边缘丢失,采用了双阈值算法检测和连接边缘,边缘的连续性较好。

Sobel算子:产生的边缘效果较好,对噪声具有平滑作用。但存在伪边缘,边缘比较粗且定位精度低。

八方向Sobel算子:可以得到更完整的边缘信息,但是和Sobel算子一样,它们的抗噪声能力都较差,即对于叠加噪声图像的边缘检测效果很不理想。

最佳Sobel算子:在图像进行八方向Sobel算子检测后的梯度图像使用最佳阈值分割图像,解决了八方向Sobel算子抗噪能力差的特点,在去噪的同时有效地保留了图像的真实边缘,即给出了边缘检测的最佳结果。但这种算法对于部分灰度图像的检测结果并不理想,甚至无法检测。至于具体原因还有待进一步的研究。

 

 

clc

clear all

close all

A = imread('C:UsersYanoDesktop4.jpg'); % 读入图像

imshow(A);title('原图');

x_mask = [1 0;0 -1]; % 建立X方向的模板

y_mask = rot90(x_mask); % 建立Y方向的模板

I = im2double(A); % 将图像数据转化为双精度

dx = imfilter(I, x_mask); % 计算X方向的梯度分量

dy = imfilter(I, y_mask); % 计算Y方向的梯度分量

grad = sqrt(dx.*dx + dy.*dy); % 计算梯度

grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像

level = graythresh(grad); % 计算灰度阈值

BW = im2bw(grad,level); % 用阈值分割梯度图像

figure, imshow(BW); % 显示分割后的图像即边缘图像

title('Roberts')

 

 

clc

clear all

close all

A = imread('C:UsersYanoDesktop4.jpg'); % 读入图像

imshow(A);title('原图');

y_mask = [-1 -1 -1;0 0 0;1 1 1]; % 建立Y方向的模板

x_mask = y_mask'; % 建立X方向的模板

I = im2double(A); % 将图像数据转化为双精度

dx = imfilter(I, x_mask); % 计算X方向的梯度分量

dy = imfilter(I, y_mask); % 计算Y方向的梯度分量

grad = sqrt(dx.*dx + dy.*dy); % 计算梯度

grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像

level = graythresh(grad); % 计算灰度阈值

BW = im2bw(grad,level); % 用阈值分割梯度图像

figure, imshow(BW); % 显示分割后的图像即边缘图像

title('Prewitt')

 

 

clc

clear all

close all

A = imread('C:UsersYanoDesktop4.jpg'); % 读入图像

imshow(A);title('原图');

mask1=[-3,-3,-3;-3,0,5;-3,5,5]; % 建立方向模板

mask2=[-3,-3,5;-3,0,5;-3,-3,5];

mask3=[-3,5,5;-3,0,5;-3,-3,-3];

mask4=[-3,-3,-3;-3,0,-3;5,5,5];

mask5=[5,5,5;-3,0,-3;-3,-3,-3];

mask6=[-3,-3,-3;5,0,-3;5,5,-3];

mask7=[5,-3,-3;5,0,-3;5,-3,-3];

mask8=[5,5,-3;5,0,-3;-3,-3,-3];

I = im2double(A); % 将数据图像转化为双精度

d1 = imfilter(I, mask1); % 计算8个领域的灰度变化

d2 = imfilter(I, mask2);

d3 = imfilter(I, mask3);

d4 = imfilter(I, mask4);

d5 = imfilter(I, mask5);

d6 = imfilter(I, mask6);

d7 = imfilter(I, mask7);

d8 = imfilter(I, mask8);

dd = max(abs(d1),abs(d2)); % 取差值变化最大的元素组成灰度变化矩阵

dd = max(dd,abs(d3));

dd = max(dd,abs(d4));

dd = max(dd,abs(d5));

dd = max(dd,abs(d6));

dd = max(dd,abs(d7));

dd = max(dd,abs(d8));

grad = mat2gray(dd); % 将灰度变化矩阵转化为灰度图像

level = graythresh(grad); % 计算灰度阈值

BW = im2bw(grad,level); % 用阈值分割梯度图像

figure, imshow(BW); % 显示分割后的图像,即边缘图像

title('Kirsch')

 

 

clc

clear all

close all

A = imread('C:UsersYanoDesktop4.jpg'); % 读入图像

imshow(A);title('原图');

mask=[0,-1,0;-1,4,-1;0,-1,0]; % 建立模板

I = im2double(A); % 将数据图像转化为双精度

dx = imfilter(I, mask); % 计算梯度矩阵

grad = mat2gray(dx); % 将梯度矩阵转化为灰度图像

BW = im2bw(grad,0.58); % 用阈值分割梯度图像

figure, imshow(BW); % 显示分割后的图像,即梯度图像

title('Laplacian')

 

 

clc

clear all

close all

A = imread('C:UsersYanoDesktop4.jpg'); % 读入图像

imshow(A);title('原图');

mask=[0,0,-1,0,0;0,-1,-2,-1,0;-1,-2,16,-2,-1;0,-1,-2,-1,0;0,0,-1,0,0]; % 建立模板

I = im2double(A); % 将数据图像转化为双精度

dx = imfilter(I, mask); % 计算梯度矩阵

grad = mat2gray(dx); % 将梯度矩阵转化为灰度图像

BW = im2bw(grad,0.58); % 用阈值分割梯度图像

figure, imshow(BW); % 显示分割后的图像,即梯度图像

title('log')

 

 

clc

clear all

close all

A = imread('C:UsersYanoDesktop4.jpg'); % 读入图像

imshow(A);title('原图');

y_mask = [-1 -2 -1;0 0 0;1 2 1]; % 建立Y方向的模板

x_mask = y_mask'; % 建立X方向的模板

I = im2double(A); % 将图像数据转化为双精度

dx = imfilter(I, x_mask); % 计算X方向的梯度分量

dy = imfilter(I, y_mask); % 计算Y方向的梯度分量

grad = sqrt(dx.*dx + dy.*dy); % 计算梯度

grad = mat2gray(grad); % 将梯度矩阵转换为灰度图像

level = graythresh(grad); % 计算灰度阈值

BW = im2bw(grad,level); % 用阈值分割梯度图像

figure, imshow(BW); % 显示分割后的图像即边缘图像

title('Sobel')

原文地址:https://www.cnblogs.com/510602159-Yano/p/3776056.html