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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、本实验对不同图像的处理方法:
针对灰度图像,笔者打算根据如下的实验步骤进行实验仿真; 对于彩色图像,笔者打算分别将原图三通道提取出来,然后按照如下 的实验步骤分别对单通道分割,然后对处理后的三个通道进行整合, 得到新的分割图像。
四、实验步骤
1、给定一个初始阈值 Th=Th0,将图像分成 C1 和 C2 两类; 2、分别按下列公式计算两类中的方差σ1^2 和σ2^2,灰度均值 μ1 和μ2,以及图像的总体均值μ;
由于最大类间、类内方差比法是基于图像灰度分布的阈值方法。 数学模型如下:
设原图像为 f(x,y),经过分割处理后的图像为 g(x,y),g(x,y) 为二值图像,则有
g
(
x,
y)
1
0
f (x, y) Th f (x, y) Th
(3-1)
2、最大类间方差法与最大类间、类内方差比法的不同:
最大类间方差法又叫大津法,简称 OTSU。它是按图像的灰度特性, 将图像分成背景和目标 2 部分。背景和目标之间的类间方差越大,说 明构成图像的 2 部分的差别越大。它只需处理类间方差,在 Matlab 中 grathresh()即为最大类间方差函数,用来寻找阈值。
p1
N c2 N im age
(4 4)
4、计算类间方差σb^2=和类内方差σin^2;
b2 p1 (1 )2 p2 (2 )2
2 in
p1பைடு நூலகம்
2 1
p2
2 2
(4 5) (4 6)
5、选择最佳阈值 Th=Th*,使得图像按照该阈值分成 C1 和 C2 后,
满足两者方差比最大:
max
b=zeros(m,n);
%新建二维矩阵 b 用来显示分割后的图像
for i=1:m
for j=1:n
if(a(i,j)>=Th)
b(i,j)=255;
end
if(a(i,j)<Th)
b(i,j)=0;
end
end
end
figure;
imshow(b);
title(‘此为分割结果’);
二、应用于彩色图像的分割代码
s1=0;
s2=0; c1=0; c2=0; q1=0; q2=0; for i=1:m
for j=1:n if(a(i,j)>=T) s1=a(i,j)+s1; c1=c1+1; end if(a(i,j)<T) s2=a(i,j)+s2; c2=c2+1; end
end end u1=s1/c1; %C1 的灰度均值; u2=s2/c2; %C2 的灰度均值; p1=c1/(c1+c2); p2=c2/(c1+c2); u=(s1+s2)/(c1+c2);
最大类间、类内方差比法是在最大类间方差法基础上的发展, 在少部分教科书上可见。它是要处理类间方差与类内方差的比值,找 到满足二者比值最大时的 Th,在 Matlab 没有此方法的工具函数。
3、本实验阈值 Th 的确定方法:
由于最大类间、类内方差比法图像分割的核心是阈值 Th 的确定, 即要处理类间方差和类内方差的比值,找出最大的比值,此时满足最 大比值的 Th 即为所求。我们可以将所有类间、类内方差的比值放在 一个矩阵中,然后使用 find 函数找出矩阵的最大值,对应的 Th 即为 所求,。
照本实验程序进行分割处理,再将原图转换为灰度图按照相 同程序进行分割,二者有一定差别。其中,后者的处理效果 明显好于前者,可以看出,前者的河流部分被覆盖严重,山 脉的颜色差异也没有体现出来。故对彩色图片进行最大类 间、类内差分比法分割的处理效果比灰度图片好。
七、实验结论
本实验达到了实验要求,完成了课程设计的任务。本次课程设计 我学会了很多东西。
end end y=p1*q1+p2*q2; z=x/y; th3(T)=z; end d3=find(th3==max(th3(:))); Th3=d3; for i=1:m
for j=1:n if(B(i,j)>=Th3) B(i,j)=255; end if(B(i,j)<Th3) B(i,j)=0;
G=X(:,:,2);
B=X(:,:,3);
[m,n]=size(R);
%R,G,B 作为 X 三通道矩阵,肯定维度都一样;
%对通道 1 进行分割;
th1=zeros(1,254);
%建立一维零矩阵存放类间类内方差比的值;我们需
要对灰度值从 1 到 254 遍历;
for T=1:254
s1=0;
s2=0;
end
if(R(i,j)<T)
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;
for i=1:m
for j=1:n if(R(i,j)>=Th1) R(i,j)=255; end if(R(i,j)<Th1) R(i,j)=0; end
end end %对通道 2 进行分割 th2=zeros(1,254); for T=1:254
s1=0; s2=0; c1=0; c2=0; q1=0; q2=0; for i=1:m
在实验初期我还对图像分割比较模糊,对于最大类间方差法更是 陌生,在我查资料后才明白最大方差法的提出背景,以及其在MATLAB 图像处理中的应用。而对于最大类间、类内方差比法更是感到力不从 心,因为这个方法基本是在图书馆找不到的。唯一出现的地方仅仅是 课本上两页的论述,我才明白最大类间、类内方差比法是最大方差法 基础上发展来的,是一种拓展。
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); for i=1:m
for j=1:n if(B(i,j)>=T) q1=(B(i,j)-u1)*(B(i,j)-u1)+q1; end if(B(i,j)<T) q2=(B(i,j)-u2)*(B(i,j)-u2)+q2; end
最大类间、类内方差比法进行图像分割
一、实验目的
在理解均匀性图像分割算法的基础上,实现图像的分割,要求 对灰度图像和彩色图像均进行实验,并讨论该方法对何种情况下的图 像有比较好的分割效果。
二、实验要求
建议采用 MATLAB 软件编程实现,核心程序不准调用 MATLAB 的图 像处理函数。
三、实验思路
1、分割的基本原理:
for j=1:n if(G(i,j)>=T) s1=G(i,j)+s1; c1=c1+1;
end if(G(i,j)<T)
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); for i=1:m for j=1:n if(G(i,j)>=T) q1=(G(i,j)-u1)*(G(i,j)-u1)+q1; end if(G(i,j)<T) q2=(G(i,j)-u2)*(G(i,j)-u2)+q2; end end
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;
c1=0;
c2=0;
q1=0;
q2=0;
for i=1:m
for j=1:n
if(R(i,j)>=T)
s1=R(i,j)+s1;
c1=c1+1;
end
if(R(i,j)<T)
s2=R(i,j)+s2;
c2=c2+1;
end
end
end
u1=s1/c1; %C1 的灰度均值;
u2=s2/c2; %C2 的灰度均值;
%C1 的发生概率; %C2 的发生概率; %样本的总体均值;
x=p1*(u-u1)*(u-u1)+p2*(u-u2)*(u-u2); %类内方差;
for i=1:m
for j=1:n
if(a(i,j)>=T)
q1=(a(i,j)-u1)*(a(i,j)-u1)+q1;
end
if(a(i,j)<T)
clear all;
close all;
X=imread('D:\我的图片\3.jpg');
figure;
imshow(X);
title('此为原图');
X=double(X);
I=X;
%建立与原图相等的矩阵 I,用来将 X 三通道分割的结果
整合再分别赋予 I,作为最后的输出结果;
R=X(:,:,1);
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); %类内方差;
for i=1:m
for j=1:n
if(R(i,j)>=T)
q1=(R(i,j)-u1)*(R(i,j)-u1)+q1;
end end end I(:,:,1)=R; I(:,:,2)=G; I(:,:,3)=B; figure; imshow(I); title('此为分割结果');
六、实验运行示例:
原始彩色图像,亦为两个程序同一输入:
1、针对灰度图像的实验结果 2、针对原彩色图像的实验结果
对比两次试验我们发现,对于同一张彩色图片,将其按
2 b 2 in
, Th Th*
6、按下式对原图的像素进行变换
g
(x,
y)
1
0
f (x, y) Th* f (x, y) Th*
(4 7) (4 8)
五、基于 MATLAB 的实验仿真
1、应用于灰度图像分割代码
clear all; close all; 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 遍历; for T=1:254
end end %对通道 3 进行分割 th3=zeros(1,254); for T=1:254
s1=0; s2=0; c1=0;
c2=0; q1=0; q2=0; for i=1:m
for j=1:n if(B(i,j)>=T) s1=B(i,j)+s1; c1=c1+1; end if(B(i,j)<T) s2=B(i,j)+s2; c2=c2+1; end
end y=p1*q1+p2*q2; z=x/y; th2(T)=z; end d2=find(th2==max(th2(:))); Th2=d2; for i=1:m
for j=1:n if(G(i,j)>=Th1) G(i,j)=255; end if(G(i,j)<Th1) G(i,j)=0; end
好歹通过请教与摸索,我完成了这个题目的matlab程序,通过实 验我明白最大类间、类内差分比法更适合处理彩色图片。另外我希望 最大类间、类内方差比法能够得到更多人的了解。
备注:
本实验程序纯笔者手动编写,经验证能在 MATLAB 成功仿真,仿
真环境为 MATLAB2014a win32 ,其余编译环境应该能出结果。代码仅 供参考,笔者水平有限,错误难免,还望指正!
灰度方差:
2 i
( f (x, y) ui )2
( x, y)ci
灰度均值:
i
1 N ci
( x , y )ci
f (x, y)
总体均值:
1
mn
f (i, j)
N image i 1 j 1
(4 1) (4 2) (4 3)
3、按下式计算两类在图像中的分布概率 p1 和 p2;
p1
N c1 N im age
相关文档
最新文档