基于最大类间类内方差比法的图像分割.docx

上传人:b****3 文档编号:24903389 上传时间:2023-06-02 格式:DOCX 页数:15 大小:457.09KB
下载 相关 举报
基于最大类间类内方差比法的图像分割.docx_第1页
第1页 / 共15页
基于最大类间类内方差比法的图像分割.docx_第2页
第2页 / 共15页
基于最大类间类内方差比法的图像分割.docx_第3页
第3页 / 共15页
基于最大类间类内方差比法的图像分割.docx_第4页
第4页 / 共15页
基于最大类间类内方差比法的图像分割.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于最大类间类内方差比法的图像分割.docx

《基于最大类间类内方差比法的图像分割.docx》由会员分享,可在线阅读,更多相关《基于最大类间类内方差比法的图像分割.docx(15页珍藏版)》请在冰豆网上搜索。

基于最大类间类内方差比法的图像分割.docx

基于最大类间类内方差比法的图像分割

最大类间、类内方差比法进行图像分割

一、实验目的

在理解均匀性图像分割算法的基础上,实现图像的分割,要求对灰度图像和彩色图像均进行实验,并讨论该方法对何种情况下的图像有比较好的分割效果。

二、实验要求

建议采用MATLAB软件编程实现,核心程序不准调用MATLAB的图像处理函数。

三、实验思路

1、分割的基本原理:

由于最大类间、类内方差比法是基于图像灰度分布的阈值方法。

数学模型如下:

设原图像为f(x,y),经过分割处理后的图像为g(x,y),g(x,y)为二值图像,则有

(3-1)

2、最大类间方差法与最大类间、类内方差比法的不同:

最大类间方差法又叫大津法,简称OTSU。

它是按图像的灰度特性,将图像分成背景和目标2部分。

背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大。

它只需处理类间方差,在Matlab中grathresh()即为最大类间方差函数,用来寻找阈值。

最大类间、类内方差比法是在最大类间方差法基础上的发展,在少部分教科书上可见。

它是要处理类间方差与类内方差的比值,找到满足二者比值最大时的Th,在Matlab没有此方法的工具函数。

3、本实验阈值Th的确定方法:

由于最大类间、类内方差比法图像分割的核心是阈值Th的确定,即要处理类间方差和类内方差的比值,找出最大的比值,此时满足最大比值的Th即为所求。

我们可以将所有类间、类内方差的比值放在一个矩阵中,然后使用find函数找出矩阵的最大值,对应的Th即为所求,。

4、本实验对不同图像的处理方法:

针对灰度图像,笔者打算根据如下的实验步骤进行实验仿真;对于彩色图像,笔者打算分别将原图三通道提取出来,然后按照如下的实验步骤分别对单通道分割,然后对处理后的三个通道进行整合,得到新的分割图像。

四、实验步骤

1、给定一个初始阈值Th=Th0,将图像分成C1和C2两类;

2、分别按下列公式计算两类中的方差σ1^2和σ2^2,灰度均值μ1和μ2,以及图像的总体均值μ;

灰度方差:

灰度均值:

总体均值:

3、按下式计算两类在图像中的分布概率p1和p2;

4、计算类间方差σb^2=和类内方差σin^2;

5、选择最佳阈值Th=Th*,使得图像按照该阈值分成C1和C2后,满足两者方差比最大:

6、按下式对原图的像素进行变换

5、基于MATLAB的实验仿真

1、应用于灰度图像分割代码

clearall;

closeall;

a=imread('D:

\我的图片\3.jpg');

a=rgb2gray(a);

figure;

imshow(a);

title('此为原图');

a=double(a);

[m,n]=size(a);

th=zeros(1,254);%建立一维零矩阵存放类间类内方差比的值;我们需要对灰度值从1到254遍历;

forT=1:

254

s1=0;

s2=0;

c1=0;

c2=0;

q1=0;

q2=0;

fori=1:

m

forj=1:

n

if(a(i,j)>=T)

s1=a(i,j)+s1;

c1=c1+1;

end

if(a(i,j)

s2=a(i,j)+s2;

c2=c2+1;

end

end

end

u1=s1/c1;%C1的灰度均值;

u2=s2/c2;%C2的灰度均值;

p1=c1/(c1+c2);%C1的发生概率;

p2=c2/(c1+c2);%C2的发生概率;

u=(s1+s2)/(c1+c2);%样本的总体均值;

x=p1*(u-u1)*(u-u1)+p2*(u-u2)*(u-u2);%类内方差;

fori=1:

m

forj=1:

n

if(a(i,j)>=T)

q1=(a(i,j)-u1)*(a(i,j)-u1)+q1;

end

if(a(i,j)

q2=(a(i,j)-u2)*(a(i,j)-u2)+q2;

end

end

end

y=p1*q1+p2*q2;%类间方差;

c=x/y;

th(T)=c;%零矩阵每个位置都存放着类间、类内方差的比值;

end

d=find(th==max(th(:

)));%寻找方差比最大时,该方差比在th矩阵中所处的位置,也就是具体的阈值T

Th=d;

b=zeros(m,n);%新建二维矩阵b用来显示分割后的图像

fori=1:

m

forj=1:

n

if(a(i,j)>=Th)

b(i,j)=255;

end

if(a(i,j)

b(i,j)=0;

end

end

end

figure;

imshow(b);

title(‘此为分割结果’);

2、应用于彩色图像的分割代码

clearall;

closeall;

X=imread('D:

\我的图片\3.jpg');

figure;

imshow(X);

title('此为原图');

X=double(X);

I=X;%建立与原图相等的矩阵I,用来将X三通道分割的结果整合再分别赋予I,作为最后的输出结果;

R=X(:

:

1);

G=X(:

:

2);

B=X(:

:

3);

[m,n]=size(R);%R,G,B作为X三通道矩阵,肯定维度都一样;

%对通道1进行分割;

th1=zeros(1,254);%建立一维零矩阵存放类间类内方差比的值;我们需要对灰度值从1到254遍历;

forT=1:

254

s1=0;

s2=0;

c1=0;

c2=0;

q1=0;

q2=0;

fori=1:

m

forj=1:

n

if(R(i,j)>=T)

s1=R(i,j)+s1;

c1=c1+1;

end

if(R(i,j)

s2=R(i,j)+s2;

c2=c2+1;

end

end

end

u1=s1/c1;%C1的灰度均值;

u2=s2/c2;%C2的灰度均值;

p1=c1/(c1+c2);%C1的发生概率;

p2=c2/(c1+c2);%C2的发生概率;

u=(s1+s2)/(c1+c2);%样本的总体均值;

x=p1*(u-u1)*(u-u1)+p2*(u-u2)*(u-u2);%类内方差;

fori=1:

m

forj=1:

n

if(R(i,j)>=T)

q1=(R(i,j)-u1)*(R(i,j)-u1)+q1;

end

if(R(i,j)

q2=(R(i,j)-u2)*(R(i,j)-u2)+q2;

end

end

end

y=p1*q1+p2*q2;%类间方差;

z=x/y;

th1(T)=z;%零矩阵每个位置都存放着类间、类内方差的比值;

end

d1=find(th1==max(th1(:

)));%寻找方差比最大时,该方差比在th矩阵中所处的位置为d1,也就是具体的阈值T1

Th1=d1;

fori=1:

m

forj=1:

n

if(R(i,j)>=Th1)

R(i,j)=255;

end

if(R(i,j)

R(i,j)=0;

end

end

end

%对通道2进行分割

th2=zeros(1,254);

forT=1:

254

s1=0;

s2=0;

c1=0;

c2=0;

q1=0;

q2=0;

fori=1:

m

forj=1:

n

if(G(i,j)>=T)

s1=G(i,j)+s1;

c1=c1+1;

end

if(G(i,j)

s2=G(i,j)+s2;

c2=c2+1;

end

end

end

u1=s1/c1;

u2=s2/c2;

p1=c1/(c1+c2);

p2=c2/(c1+c2);

u=(s1+s2)/(c1+c2);

x=p1*(u-u1)*(u-u1)+p2*(u-u2)*(u-u2);

fori=1:

m

forj=1:

n

if(G(i,j)>=T)

q1=(G(i,j)-u1)*(G(i,j)-u1)+q1;

end

if(G(i,j)

q2=(G(i,j)-u2)*(G(i,j)-u2)+q2;

end

end

end

y=p1*q1+p2*q2;

z=x/y;

th2(T)=z;

end

d2=find(th2==max(th2(:

)));

Th2=d2;

fori=1:

m

forj=1:

n

if(G(i,j)>=Th1)

G(i,j)=255;

end

if(G(i,j)

G(i,j)=0;

end

end

end

%对通道3进行分割

th3=zeros(1,254);

forT=1:

254

s1=0;

s2=0;

c1=0;

c2=0;

q1=0;

q2=0;

fori=1:

m

forj=1:

n

if(B(i,j)>=T)

s1=B(i,j)+s1;

c1=c1+1;

end

if(B(i,j)

s2=B(i,j)+s2;

c2=c2+1;

end

end

end

u1=s1/c1;

u2=s2/c2;

p1=c1/(c1+c2);

p2=c2/(c1+c2);

u=(s1+s2)/(c1+c2);

x=p1*(u-u1)*(u-u1)+p2*(u-u2)*(u-u2);

fori=1:

m

forj=1:

n

if(B(i,j)>=T)

q1=(B(i,j)-u1)*(B(i,j)-u1)+q1;

end

if(B(i,j)

q2=(B(i,j)-u2)*(B(i,j)-u2)+q2;

end

end

end

y=p1*q1+p2*q2;

z=x/y;

th3(T)=z;

end

d3=find(th3==max(th3(:

)));

Th3=d3;

fori=1:

m

forj=1:

n

if(B(i,j)>=Th3)

B(i,j)=255;

end

if(B(i,j)

B(i,j)=0;

end

end

end

I(:

:

1)=R;

I(:

:

2)=G;

I(:

:

3)=B;

figure;

imshow(I);

title('此为分割结果');

6、实验运行示例:

原始彩色图像,亦为两个程序同一输入:

1、针对灰度图像的实验结果

2、针对原彩色图像的实验结果

对比两次试验我们发现,对于同一张彩色图片,将其按照本实验程序进行分割处理,再将原图转换为灰度图按照相同程序进行分割,二者有一定差别。

其中,后者的处理效果明显好于前者,可以看出,前者的河流部分被覆盖严重,山脉的颜色差异也没有体现出来。

故对彩色图片进行最大类间、类内差分比法分割的处理效果比灰度图片好。

七、实验结论

本实验达到了实验要求,完成了课程设计的任务。

本次课程设计我学会了很多东西。

在实验初期我还对图像分割比较模糊,对于最大类间方差法更是陌生,在我查资料后才明白最大方差法的提出背景,以及其在MATLAB图像处理中的应用。

而对于最大类间、类内方差比法更是感到力不从心,因为这个方法基本是在图书馆找不到的。

唯一出现的地方仅仅是课本上两页的论述,我才明白最大类间、类内方差比法是最大方差法基础上发展来的,是一种拓展。

好歹通过请教与摸索,我完成了这个题目的matlab程序,通过实验我明白最大类间、类内差分比法更适合处理彩色图片。

另外我希望最大类间、类内方差比法能够得到更多人的了解。

备注:

本实验程序纯笔者手动编写,经验证能在MATLAB成功仿真,仿真环境为MATLAB2014awin32,其余编译环境应该能出结果。

代码仅供参考,笔者水平有限,错误难免,还望指正!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 电大

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1