hu17889
2008-04-09, 15:32
最近开始做指纹图像的预处理,编了一个归一化的程序,但是处理后的效果很差,请各位看看
谢谢!!!
不知道什么归一化方法好?
附件中是我用的归一化公式
下面是整个程序
function DestJu = MyConsistent(SourJu,BloWide)
%归一化函数
%将SourJu矩阵归一化到矩阵DestJu,BloWide子块大小
%求块灰度期望和方差
%m,n矩阵的长宽
[m,n]=size(SourJu);
bloi=ceil(m/BloWide); %分块后,块纵坐标
bloj=ceil(n/BloWide); %块横坐标
extSourJu=SourJu;
if ceil(m/BloWide)-m/BloWide~=0 || ceil(n/BloWide)-n/BloWide~=0
extSourJu(bloi*BloWide,bloj*BloWide)=0; %扩展矩阵,使得SourJu扩展后的长宽可以整除BloWide
end
%用blkproc内建函数
mi=blkproc(extSourJu,[BloWide BloWide],'mean2');%子块期望
vi=VarJu(extSourJu,BloWide);%子块方差
%求输入子块期望的期望m0和子块期望的方差var0
m0=mean2(mi);
var0=VarJu(mi,1);
DestJu=extSourJu;%初始化
%将extSourJu矩阵归一化到DestJu矩阵中,并输出DestJu
for i=1:floor(bloi*BloWide)
for j=1:floor(bloj*BloWide)
if extSourJu(i,j)>=m0
DestJu(i,j)=m0+((var0*(extSourJu(i,j)-mi(ceil(i/BloWide),ceil(j/BloWide)))^2)/vi(ceil(i/BloWide),ceil(j/BloWide)))^0.5;
else
DestJu(i,j)=m0-((var0*(extSourJu(i,j)-mi(ceil(i/BloWide),ceil(j/BloWide)))^2)/vi(ceil(i/BloWide),ceil(j/BloWide)))^0.5;
end
end
end
end
function v=VarJu(extSourJu,BloWide)
%方差
%sourJu输入的矩阵,求方差的块大小
[m,n]=size(extSourJu);
if BloWide>1
tJu=reshape(extSourJu(:,1:BloWide:end),BloWide,[]);
for i=2:BloWide
tJu=[tJu;reshape(extSourJu(:,i:BloWide:end),BloWide,[])];
end
v=reshape(var(tJu),m/BloWide,[]);
else
v=var(reshape(extSourJu,m*n,[]));
end
end
谢谢!!!
不知道什么归一化方法好?
附件中是我用的归一化公式
下面是整个程序
function DestJu = MyConsistent(SourJu,BloWide)
%归一化函数
%将SourJu矩阵归一化到矩阵DestJu,BloWide子块大小
%求块灰度期望和方差
%m,n矩阵的长宽
[m,n]=size(SourJu);
bloi=ceil(m/BloWide); %分块后,块纵坐标
bloj=ceil(n/BloWide); %块横坐标
extSourJu=SourJu;
if ceil(m/BloWide)-m/BloWide~=0 || ceil(n/BloWide)-n/BloWide~=0
extSourJu(bloi*BloWide,bloj*BloWide)=0; %扩展矩阵,使得SourJu扩展后的长宽可以整除BloWide
end
%用blkproc内建函数
mi=blkproc(extSourJu,[BloWide BloWide],'mean2');%子块期望
vi=VarJu(extSourJu,BloWide);%子块方差
%求输入子块期望的期望m0和子块期望的方差var0
m0=mean2(mi);
var0=VarJu(mi,1);
DestJu=extSourJu;%初始化
%将extSourJu矩阵归一化到DestJu矩阵中,并输出DestJu
for i=1:floor(bloi*BloWide)
for j=1:floor(bloj*BloWide)
if extSourJu(i,j)>=m0
DestJu(i,j)=m0+((var0*(extSourJu(i,j)-mi(ceil(i/BloWide),ceil(j/BloWide)))^2)/vi(ceil(i/BloWide),ceil(j/BloWide)))^0.5;
else
DestJu(i,j)=m0-((var0*(extSourJu(i,j)-mi(ceil(i/BloWide),ceil(j/BloWide)))^2)/vi(ceil(i/BloWide),ceil(j/BloWide)))^0.5;
end
end
end
end
function v=VarJu(extSourJu,BloWide)
%方差
%sourJu输入的矩阵,求方差的块大小
[m,n]=size(extSourJu);
if BloWide>1
tJu=reshape(extSourJu(:,1:BloWide:end),BloWide,[]);
for i=2:BloWide
tJu=[tJu;reshape(extSourJu(:,i:BloWide:end),BloWide,[])];
end
v=reshape(var(tJu),m/BloWide,[]);
else
v=var(reshape(extSourJu,m*n,[]));
end
end