-
大小: 91KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-05-16
- 语言: Matlab
- 标签:
资源简介
用matlab编写的二维最大熵和最小交叉熵实现图像的分割,之后再用灰度值进行图像增强。
代码片段和文件信息
%二维最大熵法和交叉熵法结合
close all;
clear all;
clc;
%读入红外灰度图像
I=imread(‘13.bmp‘);
% I=imread(‘D:\hdtx\000000014.bmp‘);
% I=imread(‘D:\hdtx\2.bmp‘);
% I=imread(‘D:\hdtx\1.bmp‘);
%显示红外图像
subplot(221);
imshow(I);
% a=histeq(a);
% a=medfilt2(a);
a0=double(I);
%求解图像的长度
[mn]=size(I);
L=256;
h=1;
HA=zeros(256256);
H=zeros(LL);
a1=zeros(mn);
PA(256256)=0;
Hll=0;
hmax=0;
vll=0;
mll=0;
H0=zeros(256256);
H1=zeros(256256);
% 计算平均领域灰度的一维灰度直方图
for i=1:m
for j=1:n
for k=-h:h
for w=-h:h;
p=i+k;
q=j+w;
if (p<=0)|( p>m)
p=i;
end
if (q<=0)|(q>n)
q=j;
end
a1(ij)=a0(pq)+a1(ij);
end
end
a2(ij)=uint8(1/9*a1(ij));
end
end
fxy=zeros(256256);
% 计算二维直方图
for i=1:m
for j=1:n
c1=a0(ij);
d=double(a2(ij));
fxy(c1+1d+1)=fxy(c1+1d+1)+1;
end
end
Pxy=fxy/m/n;
%利用递推算法求解最大熵
%-----求解图片的最大熵----%
for i=1:256
for j=1:256
if(Pxy(ij)==0)
Hll=Hll;
vll=vll;
else
Hll=Hll-Pxy(ij)*log(Pxy(ij));
vll=vll+i*j*Pxy(ij);
end
mll=mll+Pxy(ij)*log(i*j);
end
end
%---------------------------%
%----递推求解
PA(11)=Pxy(11);
if (PA(11)==0)
HA(11)=0;
v1(11)=0;
m1(11)=0;
else
HA(11)=-PA(11)*log(PA(11));
end
for s=2:L
PA(s1)=PA(s-11)+Pxy(s1);
v1(s1)=0;
m1(s1)=0;
for t=2:L
v1(1t)=0;
m1(1t)=0;
PA(1t)=PA(1t-1)+Pxy(1t);
PA(st)=PA(st-1)+PA(s-1t)-PA(s-1t-1)+Pxy(st);
m1(st)=m1(st-1)+m1(s-1t)-m1(s-1t-1)+Pxy(st)*log(t*s);
end
end
for s=2:L
if(Pxy(s1)==0)
HA(s1)=HA(s-11);
else
HA(s1)=HA(s-11)-Pxy(s1)*log(Pxy(s1));
end
end
for t=2:L
if(Pxy(1t)==0)
HA(1t)=HA(1t-1);
else
HA(1t)=HA(1t-1)-Pxy(1t)*log(Pxy(1t));
end
end
for s=2:L
for t=2:L
if(Pxy(st)==0)
HA(st)=HA(st-1)+HA(s-1t)-HA(s-1t-1);
v1(st)=v1(st-1)+v1(s-1t)-v1(s-1t-1);
else
HA(st)=HA(st-1)+HA(s-1t)-HA(s-1t-1)-Pxy(st)*log(Pxy(st));
v1(st)=v1(st-1)+v1(s-1t)-v1(s-1t-1)+t*s*Pxy(st);
end
end
end
Px=1-PA;
for s=1:256
for t=1:256
if(PA(st)>=0.00001&Px(st)>=0.00001)
H(st)=log(PA(st))+log(Px(st))+HA(st)/PA(st)+(Hll-HA(st))/Px(st);
I7(st)=(v1(st)/PA(st))*m1(st)+((vll-v1(st))/Px(st))*(mll-m1(st));
else
H(st)=0;
end
end
end
Hmax=max(max(H(:)));
I7max=max(max(I7(:)));
r1=(Hmax^2-I7max)/(I7max^2-I7max+Hmax-Hmax^2);
r2=1-r1;
for i=1:256
for j=1:256
HH(ij)=r1*H(ij)+r2*
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 77878 2012-04-10 08:55 二维最大熵与交叉熵结合\1.bmp
文件 77878 2012-04-16 22:13 二维最大熵与交叉熵结合\11.bmp
文件 77878 2012-04-16 22:13 二维最大熵与交叉熵结合\12.bmp
文件 77878 2012-04-16 22:13 二维最大熵与交叉熵结合\13.bmp
文件 4296 2012-05-10 19:32 二维最大熵与交叉熵结合\shou1.m
文件 4202 2012-05-10 19:31 二维最大熵与交叉熵结合\shou2.m
文件 4084 2012-05-10 19:33 二维最大熵与交叉熵结合\shou3.m
文件 4089 2012-05-10 19:17 二维最大熵与交叉熵结合\shou4.m
目录 0 2012-11-15 20:08 二维最大熵与交叉熵结合
----------- --------- ---------- ----- ----
328183 9
- 上一篇:基于OSTU的阈值分割算法研究
- 下一篇:语音识别matlab
评论
共有 条评论