图像分割算法实例.docx
《图像分割算法实例.docx》由会员分享,可在线阅读,更多相关《图像分割算法实例.docx(7页珍藏版)》请在冰豆网上搜索。
图像分割算法实例
图像分割算法实例
图像分割算法实例
1.基于边缘检测法的图像分割
边缘(Edge)是指图像局部亮度变化最显著的部分。
边缘主要存在于目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征提取和形状特征提取等图像分析的重要基础。
图像分析和理解的第一步常常是边缘检测(EdgeDetection)。
由于边缘检测十分重要,因此成为机器视觉研究领域最活跃的课题之一。
图像中的边缘通常与图像亮度或图像亮度的一阶导数的不连续性有关。
图像亮度的不连续可分为:
①阶跃不连续,即图像亮度在不连续处的两边的像素灰度值有着显著的差异:
②线条不连续,即图像亮度从一个值变化到另一个值,保持一个较小的行程后又返回到原来的值。
在实际中,阶跃和线条边缘图像是很少见的,由于大多数传感元件具有低频特性,使得阶跃边缘变成斜坡型边缘,线条边缘变成屋顶形边缘,其中的亮度变化不是瞬间的,而是跨越一定的距离。
常用的边缘检测器有6种,分别是,Sobel,Roberts,Prewitt,Log,Canny,Zerocross。
本次实例的原图如下。
1.1首先运用边缘检测器Sobel算子,对原始图片进行分割,结果如下。
(具体程序见附录1)
当取不同的阈值时,程序处理后的结果不同,观察可得,当阈值为0.06时,分割效果最好。
1.2换用不同的边缘检测器,对原图进行处理,结果如下(具体程序见附录2)
观察结果可知,在6种边沿检测器中,Sobel的分割效果较为理想。
2.基于阈值法的图像分割
阈值分割法是灰度图像分割中采用非常普遍的一种方式。
从灰度图像中分挑出有意义区域的最基本的方法便是设定阈值的分割方法。
阈值法是采用图像中要获取的目标物和其背景存在灰度特征上的差异。
比如设定一个灰度阈值,但凡灰度值低于此阈值的像素都变成某一个指定的灰度值,然而灰度值高于这个阈值的像素都设置成另一指定的值。
这样就能够将图像中的背景和物体用两种不同的灰度级区分开来。
阈值分割法适合用在物体与背景有较强对比性的情况下,重要的是背景或者物体的灰度相对单一。
本次主要采用的是直方图阈值分割法。
分割时,选择的阈值应该位于直方图两个不同峰之间的谷上,这样方便将各个峰区分开来。
本论文采取的是一种多维直方图阈值化方案,阈值是从不同的颜色空间(RGB、YIQ、HSI)中选出来的,并且用作区域分裂。
2.1先得到图像的直方图,(具体程序见附录3)
2.2根据直方图,选取不同的阈值进行图像分割
观察图像可知,当阈值设置为180时,分割效果最理想
附录1:
clc
clearall
I=imread('House.bmp');
I=rgb2gray(I);
figure
(1)
subplot(1,2,1);imshow(I)
title('原始图像')
subplot('1,2,2');imhist(I)
title('直方图')
I0=edge(I,'sobel');
I1=edge(I,'sobel',0.06);
I2=edge(I,'sobel',0.04);
I3=edge(I,'sobel',0.02);
figure
(2)
subplot(2,2,1);imshow(I0)
title('默认门限')
subplot(2,2,2);imshow(I1)
title('阀值为0.06')
subplot(2,2,3);imshow(I2)
title('阀值为0.04')
subplot(2,2,4);imshow(I3)
title('阀值为0.02')
附录2:
clc
clearall
I=imread('House.bmp');
I=rgb2gray(I);
BW1=edge(I,'sobel');
BW2=edge(I,'roberts');
BW3=edge(I,'prewitt');
BW4=edge(I,'log');
BW5=edge(I,'canny');
BW6=edge(I,'zerocross');
figure
(1)
imshow(I),title('原始图像')
figure
(2)
subplot(2,3,1),imshow(BW1),title('Sobel算子检测结果')
subplot(2,3,2),imshow(BW2),title('Roberts算子检测结果')
subplot(2,3,3),imshow(BW3),title('Prewitt算子检测结果')
subplot(2,3,4),imshow(BW4),title('Log算子检测结果')
subplot(2,3,5),imshow(BW5),title('Canny算子检测结果')
subplot(2,3,6),imshow(BW6),title('Zerocross算子检测结果')
附录3:
clc
clearall
closeall
I=imread('House.bmp');
I=rgb2gray(I);
figure
(1),imshow(I),title('原始图像')
figure
(2);imhist(I),title('直方图')
I1=im2bw(I,180/255);
I2=im2bw(I,120/255);
figure(3)
subplot(2,1,1);imshow(I1),title('直方图阈值法分割结果阈值180')
subplot(2,1,2);imshow(I2),title('直方图阈值法分割结果阈值120')