《数字图像处理-数字图像分割与边缘检测实验|CSDN创作打卡》杭州电子科技大学

作业一:图像分割

问题1:对灰度图像进行前景和背景的分割,结果显示为二值图像。实现直方图阈值法,基于灰度直方图求双峰或多峰,基于两峰之间的谷底计算一个(双峰)或者多个(多峰)阈值。

原理:

基于阈值的图像分割方法

  图像分割就是将一幅图像分成若干个部分、区域,然后将其中自己感兴趣的部分,或对自己有意义的区域提取出来,由此获得一些有用的图像特征和信息的过程。

  图像分割有很多方法,其中基于阈值的分割方法最常使用。主要是利用图像中要提取的目标和背景在灰度上的差异,选择一个合适的阈值。

  ①直方图阈值法:通过图像的灰度直方图来选择阈值,图象被处理为二值图像。

  ②半阈值选择法:根据直方图或其他方法选择合适的阈值,但只对背景部分进行处理,这样目标物体就还是多值图像,背景是二值图像。

  ③迭代阈值法:通过程序不断迭代出所需要的阈值,再对图像二值化处理。

  ④Otsu算法:也叫最大类间差法,取一个最优阈值把原图像分为前景色(A部分)与背景色(B部分),两部分的类间方差越大,说明两部分差别越大,便能有效的分割图像。

  ⑤最大熵阈值分割法:计算所有分割阈值下的图像总熵,找到最大的熵,将最大熵对应的分割阈值作为最终的阈值,图像中灰度大于此阈值的像素作为前景,否则作为背景。

该函数的实现是一个迭代的过程,每次处理前对直方图数据进行判断,看其是否已经是一个双峰的直方图,如果不是,则对直方图数据进行半径为1(窗口大小为3)的平滑,如果迭代了一定的数量比如1000次后仍未获得一个双峰的直方图,则函数执行失败,如成功获得,则最终阈值取两个双峰之间的谷底值作为阈值。

f=imread('1.jpg');
figure(1);
imshow(f);
title('原图');
 
figure(2);
bw1=im2bw(f);%使用默认值0.5
imshow(bw1)
title('使用0.5作为门槛时的二值图像');
 
figure(3);
level=graythresh(f);%使用graythresh计算灰度门槛
bw2=im2bw(f,level);
imshow(bw2);
title('通过graythresh计算灰度门槛时的二值图像')
I=imread('1.jpg');       %读取当前路径下的图片
I1=rgb2gray(I);
subplot(2,2,1);imshow(I1);title('灰度图像');
 
grid on;                        %显示网格线
axis on;                        %显示坐标系
[m,n]=size(I1);                 %测量图像尺寸参数
GK=zeros(1,256);                %预创建存放灰度出现概率的向量
for k=0:255
     GK(k+1)=length(find(I1==k))/(m*n);             %计算每级灰度出现的概率,将其存入GK中相应位置
end
subplot(2,2,2),bar(0:255,GK,'g')                    %绘制直方图
 
title('灰度直方图')
xlabel('灰度值')
ylabel('出现概率')
I2=im2bw(I,200/255);    
subplot(2,2,3),imshow(I2);title('直方图阈值处理分割图像')
imwrite(I2,'05 直方图阈值200的分割图像.jpg');
grid on;                         %显示网格线
axis on;                         %显示坐标系

你可能感兴趣的:(MATLAB,数字图像处理,计算机视觉,图像处理,opencv,matlab,算法)