matlab中图像分割技术之一边缘检测
创始人
2024-03-09 06:13:37
0

1.边缘检测
(1)Roberts边缘算子
(2)Sobel算子
(3)Prewitt算子
(4)拉普拉斯(Laplacian)算子
(5)LOG(Laplacian-Gauss)算子
(6)坎尼(Canny)算子
(7)利用霍夫(Hough)变换

图像分割技术图像分割是把图像分割成若干个特定的、具有独特性质的区域并提取出感兴趣的目标的技术和过程。在对图像的研究和应用中,人们往往仅对图像的某些部分感兴趣(目标或背景),他们一般对应图像中特定的、具有独特性质的区域。
**(1)多种特征融合的分割方法:**除利用图像的原始灰度特征外,我们还可以利用图像的梯度特征、几何特征(形态、坐标、距离、方向、曲率等)、变换特征(傅里叶谱、小波特征、分形特征等)及统计学特征(纹理、不变矩、灰度均值等)等高层次特征。
**(2)多种分割方法结合的分割方法:**由于目标成像的不确定性以及目标的多样性,单一的分割方法很难对含复杂目标的图像取得理想的分割结果。

一、边缘检测

边缘(Edge)是指图像局部亮度变化最显著的部分。边缘主要存在于目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征提取和形状特征提取等图像分析的重要基础。
(1)Roberts边缘算子
一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘走向垂直。Roberts操作实际上是求旋转±45°两个方向上微分值的和。Roberts边缘算子定位精度高,在水平和垂直方向效果较好,但对噪声敏感。
两个卷积核Gx=[1 0 0 -1],Gy=[0 1 -1 0]

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'Roberts',0.04);    %Roberts算子检测边缘
subplot(1,2,1),
imshow(I);
title('原图像')
subplot(1,2,2),
imshow(BW1);
title('Roberts算子检测边缘')

在这里插入图片描述
(2)Sobel算子
Sobel算子是一组方向算子,从不同的方向检测边缘。Sobel算子不是简单的求平均再差分,而是加强了中心像素上下左右四个方向像素的权重,运算结果是一副边缘图像。Sobel算子通常对灰度渐变和噪声较多的图像处理得较好。
两个卷积核Gx=[-1 0 1 -2 0 2 -1 0 1],Gy=[1 2 1 0 0 0-1 -2 -1]

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'Sobel',0.04);  %Sobel算子检测边缘
subplot(1,2,1),
imshow(I);
title('原图像')
subplot(1,2,2),
imshow(BW1);
title('Sobel算子检测边缘')

在这里插入图片描述
(3)Prewitt算子
Prewitt边缘算子是一种边缘样板算子,利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑作用。由于边缘点像素的灰度值与其领域点像素的灰度值有显著不同,在实际应用中通常采用微分算子和模板匹配方法检测图像的边缘。Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得较好。
两个卷积核Gx=[-1 0 1 -2 0 2 -1 0 1],Gy=[1 2 1 0 0 0-1 -2 -1]

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'prewitt',0.04);     % 0.04为梯度阈值
subplot(1,2,1)
imshow(I);
title('原图像')
subplot(1,2,2),
imshow(BW1);
title('Prewitt算子检测边缘')

在这里插入图片描述
(4)拉普拉斯(Laplacian)算子
如果所求的一阶导数高于某一阈值,则可确定该点为边缘点,这样做会导致检测的边缘点太多。一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,若用阈值来进行边缘检测,则在a和b之间的所有点都被记为边缘点。但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘。
(5)LOG(Laplacian-Gauss)算子
高斯滤波和拉普拉斯边缘检测结合在一起,形成LOG算法,也称之为拉普拉斯高斯算法。LOG算子是对Laplacian算子的一种改进,它需要考虑5×5邻域的处理,从而获得更好的检测效果。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'log',0.003,2);                 %sigma=2
subplot(1,3,1);
imshow(I);
title('原图像')
subplot(1,3,2);
imshow(BW1);
title(' sigma =2的LOG算子检测的边缘')
BW1=edge(I, 'log',0.003,3);                 % sigma=3
subplot(1,3,3);
imshow(BW1);
title('sigma =3的LOG算子检测的边缘')

在这里插入图片描述
(6)坎尼(Canny)算子
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。

clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'canny',0.2);      %Canny算子边缘检测
subplot(1,2,1);
imshow(I);
title('原图像')
subplot(1,2,2);
imshow(BW1);
title('Canny算子边缘检测')

在这里插入图片描述

%%所有都放一起比较
clc;                %clc的作用就是清屏幕
clear;              %clear是删除所有的变量
close all;          %close all是将所有打开的图片关掉。
i=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像
I=im2gray(i);
BW1=edge(I, 'Roberts',0.04);        %Roberts算子
BW2=edge(I, 'Sobel',0.04);          %Sobel算子
BW3=edge(I, 'Prewitt',0.04);        %Prewitt算子
BW4=edge(I, 'LOG',0.004);           % LOG算子
BW5=edge(I, 'Canny',0.04);          % Canny算子
subplot(2,3,1),
imshow(I);
title('原图像');
subplot(2,3,2),
imshow(BW1)
title('Roberts ')
subplot(2,3,3),
imshow(BW2)
title(' Sobel ')
subplot(2,3,4),
imshow(BW3)
title(' Prewitt ')
subplot(2,3,5),
imshow(BW4)
title(' LOG ')
subplot(2,3,6),
imshow(BW5)
title('Canny ')

在这里插入图片描述
Roberts算子提取边缘的结果边缘较粗,边缘定位不很准确,Sobel算子和Prewitt算子对边缘的定位就准确了一些,而采用拉普拉斯高斯算子进行边缘提取的结果要明显优于前三种算子,特别是边缘比较完整,位置比较准确。相比而言,Canny算子提取的边缘最为完整,而且边缘的连续性很好,效果优于以上其他算子,这主要是因为它进行了“非极大值抑制”和形态学连接操作的结果。

(7)利用霍夫(Hough)变换
检测图像边缘的算法Hough变换本来是应用于直线检测中的,充分体现了Hough变换具有明了的几何解析性、一定的抗干扰能力以及易于实现并行处理等优点。

		clc;                %clc的作用就是清屏幕clear;              %clear是删除所有的变量close all;          %close all是将所有打开的图片关掉。I=imread('E:\我的桌面\MATLAB\练习\3.jpg'); %读取图像rotI=rgb2gray(I);subplot(2,2,1);imshow(rotI);title('灰度图像');axis([50,250,50,200]);grid on;axis on;BW=edge(rotI, 'prewitt');          %prewitt算子边缘检测subplot(2,2,2);imshow(BW);title('prewitt算子边缘检测后图像');axis([50,250,50,200]);grid on;axis on;[H, T, R]=hough(BW);               %霍夫变换subplot(2,2,3);imshow(H, [], 'XData', T, 'YData', R, 'InitialMagnification', 'fit');title('霍夫变换图');xlabel('\theta'), ylabel('\rho');axis on , axis normal, hold on;P=houghpeaks(H,5, 'threshold', ceil(0.3*max(H(:))));x=T(P(:,2)); y=R(P(:,1));plot(x, y, 's', 'color', 'white');lines=houghlines(BW, T, R, P, 'FillGap',5, 'MinLength',7);subplot(2,2,4); , imshow(rotI);title('霍夫变换图像检测');axis([50,250,50,200]);grid on;axis on;hold on;max_len=0;for k=1:length(lines)xy=[lines(k).point1; lines(k).point2];plot(xy(:,1), xy(:,2), 'LineWidth',2, 'Color', 'green');plot(xy(1,1), xy(1,2), 'x', 'LineWidth',2, 'Color', 'yellow');plot(xy(2,1), xy(2,2), 'x', 'LineWidth',2, 'Color', 'red');len=norm(lines(k).point1-lines(k).point2);if(len>max_len)max_len=len;xy_long=xy;endendplot(xy_long(:,1), xy_long(:,2), 'LineWidth',2, 'Color', 'cyan');

在这里插入图片描述

相关内容

热门资讯

中国人民银行发布一次性信用修复... 人民网北京12月22日电 (记者黄盛)中国人民银行今日发布关于实施一次性信用修复政策有关安排的通知。...
一次性信用修复政策6问6答 符合哪些条件的逾期信息可以适用一次性信用修复政策,作不予展示处理? 个人是否需要主动申请适用一次性...
一次性信用修复政策,一图读懂! 相关报道: 责编:李文玉 | 审核:李震 | 监审:古筝 (来源:中国人民银行)
家校纠纷的细节背后,藏着资源和... 石门县第二中学 一起普通的家校纠纷,源头是高二学生与班主任之间产生隔阂,后来演变成班主任退群、学生推...
一次性信用修复政策来了!细则详... 本文转自【央视新闻客户端】; 今天(22日),中国人民银行发布通知,实施一次性信用修复政策,支持信用...
原创 泰... 12月18日,中国驻泰国大使张建卫会见泰国新任总检察长易提蓬的这场会面,看似是一次常规外交互动,实则...
郑重提醒:一次性信用修复政策不... 央行发布一次性信用修复政策,支持信用受损但积极还款的个人高效便捷重塑信用。一次性信用修复政策实行“免...
央行发布一次性信用修复政策! 12月22日,中国人民银行发布通知,实施一次性信用修复政策,支持信用受损但积极还款的个人高效便捷重塑...
支持个人信用重塑!央行一次性信... 为支持信用受损但积极还款的个人高效便捷重塑信用,12月22日中国人民银行对外发布一次性信用修复政策有...