图像分割概述
图像分割是按照某些特性(如灰度值、频谱、纹理等)将图像划分成一些区域,在这些区域内其特性是相同或者均匀的,两个相邻区域彼此特性是不同的,存在着边缘或边界。
阈值化
像素信息
需要计算并绘制图像中一条或多条线段上的所有像素的灰度值,可用improfile函数实现该功能。
阈值化处理
许多情况,图像是由具有不同灰度值的两类区域组成。直方图具有两个峰,分别与两个灰度值范围相对应,可选择一个阈值,将其分开。 阈值化示例:
l = imread( 'blood.tif' ) ;
imshow( l) ;
figure, imhist( l) ; % 显示图像l的灰度直方图,可见灰度值118 为谷值,选阈值T= 118
axis( [ 0 255 0 2000 ] ) ; % 指定显示的坐标轴尺寸
l1 = im2bw( l, 118 / 255 ) ; % im2bw需要灰度值范围在【0 , 1 】内
figure, imshow( l1) ;
去除背景:实际上是利用图像的灰度级调整技术来实现的。 语法是 l1=imadjust(l, [low high], [bottom top])
即将原始图像中灰度值小于low的像素灰度值转换为bottom,而将灰度值大于high的像素灰度值转换为top。
imshow( 'blood1.tif' ) ;
l = getimage;
figure, imhist( l) ; % 图像灰度118 处为谷值,选T= 118
axis( [ 0 255 0 2000 ] ) ;
l1 = imadjust( l, [ 0 118 / 255 ] , [ ] ) ; % 大于18 / 255 的像素为1 ,其它像素保持为相应的灰度值
figure, imshow( l1) ;
l2 = imcomplement( l1) ; % 获取l1的补图像
figure, imshow( l2) ;
阈值确定
灰度直方图表示灰度值i的像素在画面中有多少个或者所占的比例。 确定: 方法一:去两个峰之间的谷值。 方法二:p参数法。 方法三:自动阈值法。 方法四:最大类间方差法。 程序实现:
l0 = imread( 'fruits,bmp' ) ;
l0 = rgb2gray( l0) ;
imshow( l0) ; I = double( l0) ;
T= ( min ( I( : ) + max ( ( ) ) / 2 ; % 选择灰度中值作为初始阈值T
done= false;
while ~ done
l1= I>= T; % 利用阈值T把图像分割成两个区域
T1= ( mean( I( I1) + mean( I( ~ I1) / 2 ; % 计算均值作为新阈值
done= abs ( T- T1) < 0.5 ; T= T1; % 与上个阈值差小于给定值
end
figure,imshow( I1) ; % 显示分割后的图像
l= imread( 'fruits.bmp' ); % 读入一幅图像 I= rgb2gray( ) ;
imshow( ) ; % 显示所输入的灰度图像
level= graythresh( I) ; % 采用最大类间方差法自动求取阈值
I1= im2bw( l, level) ; % 利用所得到的阈值分割图像 figure, imshow( I1) ; % 显示分割后的二值图像 figure, imhist( ) ; % 显示原始图像的灰度直方图 axis( [ 0 255 0 1000 ] ) ;
区域生长法
算法步骤:
边缘检测
边缘性质
基于微分的边缘检测
x = - 2 : 0.05 : 2 ;
y = - 2 : 0.05 : 2 ;
[ X, Y] = meshgrid( x, y) ; % 把行向量转换成二维数组
sigma = 0.5 ;
r = 1 / ( 2 * pi* sigma^ 4 ) * ( ( X. ^ 2 + Y. ^ 2 ) / ( sigma^ 2 ) - 2 ) . * exp( - ( X. ^ 2 + Y. ^ 2 ) / ( 2 * sigma^ 2 ) ) ; % 计算LoG算子
mesh( X, Y, r) ; % 显示