图像分割(MATLAB实现)
图像分割 就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。
现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。
今日学习笔记:
1、 利用roberts、prewitt、soble、log和canny等算子,对步骤一灰度图像进行边缘检测
代码如下:
A=imread('666666.jpg');
C=rgb2gray(A);
B1=edge(C,'roberts');
B2= edge(C,'prewitt');
B3= edge(C,'sobel');
B4= edge(C,'log');
B5= edge(C,'canny');
figure,imshow(B1),title('Reberts算子边缘检测');
figure,imshow(B2,[]),title('Prewitt算子边缘检测');
figure,imshow(B3,[]),title('Sobel算子边缘检测');
figure,imshow(B4,[]),title('LoG算子边缘检测');
figure,imshow(B5,[]),title('canny算子边缘检测');


2、 自定阈值,对转换后的灰度图像进行阈值分割
A=imread('666666.jpg');
C=rgb2gray(A);
level=graythresh(C)
b=im2bw(C,level);
figure,imshow(b);

3、打开 Matlab内容自带的coins.png图像,显示并观察它的直方图,选定一个阈值对其进行分割
A=imread('coins.png');
subplot(131);imshow(A);
subplot(132);imhist(A)
T=110;
S=size(A)
[maxczn,maxP] = max(A(:,:));
[minczn,minP] = min(A(:,:));
for i = 1:S(1)
for j = 1:S(2)
if A(i,j)>= T A(i,j) = 255;
else A(i,j) = 0;
end
end
end
subplot(133);
imshow(A);a

4、 利用graythresh函数自动获取灰度图的阈值和上一题灰度图的阈值,并进行分割
A=imread('666666.jpg');
B=imread('coins.png');
C=rgb2gray(A);
level = graythresh(C)
b=im2bw(C,level);
level = graythresh(B)
c=im2bw(B,level);
figure,imshow(b),title('66666');
figure,imshow(c),title('coins');
B1=edge(b,'roberts');
B2= edge(c,'prewitt');
figure,imshow(B1,[]),title('Reberts');
figure,imshow(B2,[]),title('Prewitt');

5、 全局阈值分割
可以通过全局的信息,例如整个图像的灰度直方图。如果在整个图像中只使用一个阈值,则这种方法叫做全局阈值法,整个图像分成两个区域,即目标对象( 黑色)和背景对象(白色)。全局阈值将整个图像的灰度阈值设置为常数。
对于物体和背景对比较明显的图像,其灰度直方图为双峰形状,可以选择两峰之间的波谷对应的像素值作为全局阙值,将图像分割为目标对象和背景。
6、Otsu阈值分割
最大类间方差法,又称为Otsu算法,该算法是在灰度直方图的基础上采用最小二乘法原理推导出来的,具有统计意义上的最佳分割。它的基本原理是以最佳阈值将图像的灰度值分割成两部分,使两部分之间的方差最大,即具有最大的分离性。
7、迭代式阈值分割
(1) 设定参数T0,并选择一个初始的估计阈值T1
(2)用阈值T分割图像。将图像分成两部分: G1 是由灰度值大于T1的像素组成,G2是由灰度值小于或等于T1的像素组成。
(3)计算G1和G2中所有像素的平均灰度值u1和u2,以及新的阈值T2 =(u1+u2)/2。
(4)如果|T2-T1|<T0,则推出T2即为最优阈值;否则,将T2赋值给T1,并重复步骤(2) ~ (4) ,直到获取最优阈值。
