MATLAB图像分割代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[matlab 图像处理 ] 阈值分割

%迭代式阈值分割otsu 阈值分割二值化

close all;% 关闭所有窗口

clear;% 清除变量的状态数据

clc;% 清除命令行

I=imread('rice.png');

subplot(2,2,1);

imshow(I);

title('1 rice 的原图 ');

%迭代式阈值分割

zmax=max(max(I));% 取出最大灰度值

zmin=min(min(I));% 取出最小灰度值

tk=(zmax+zmin)/2;

bcal=1;

[m,n]=size(I);

while(bcal)

%定义前景和背景数

iforeground=0;

ibackground=0;

%定义前景和背景灰度总和

foregroundsum=0;

backgroundsum=0;

for i=1:m

for j=1:n

tmp=I(i,j);

if(tmp>=tk)

%前景灰度值

iforeground=iforeground+1;

foregroundsum=foregroundsum+double(tmp );

else

ibackground=ibackground+1;

backgroundsum=backgroundsum+double(tmp );

end

end

end

%计算前景和背景的平均值

z1=foregroundsum/iforeground;

z2=foregroundsum/ibackground;

tktmp=uint8((z1+z2)/2);

if(tktmp==tk)

bcal=0;

else

tk=tktmp;

end

%当阈值不再变化时, 说明迭代结束

end

disp(strcat(' 迭代的阈值

迭代的阈

值 : 阈值

:',num2str(tk)));% 在 command window里显示出:

newI=im2bw(I,double(tk)/255);% 函数 im2bw 使用阈值( threshold )变换法把

灰度图像( grayscale image )

%转换成二值图像。所谓二值图像,一般意义上是指只有纯黑(0)、纯白( 255)两种颜色的图像。

%语法

%BW = im2bw(I, level)

%BW = im2bw(X, map, level)

%BW = im2bw(RGB, level)

%其中level 就是设置阈值的。level 取值范围 [0, 1] 。

subplot(2,2,2);

imshow(newI);

title('2 rice 的迭代法分割效果图');

%otsu 阈值分割

bw=graythresh(I);

disp(strcat('otsu 阈值分割的阈值:',num2str(bw*255)));% 在 commandwindow 里显示出 : 迭代的阈值 : 阈值

newII=im2bw(I,bw);

subplot(2,2,3);

imshow(newII);

title('3 rice 的 otsu 阈值分割 ');

%二值化阈值为 135

[width,height,bmsize]=size(I);

for i=1:width

for j=1:height

if I(i,j)>135

I(i,j)=255;

else

I(i,j)=0;

end

end

end

subplot(2,2,4);

imshow(I);

title('4 rice 的二值阈值分割 ');

相关文档
最新文档