海中沙
2012-09-07, 09:24
图像融合程序可以运行 但出不来融合图像 一片黑 不知道问题在哪 希望有高手能帮忙 谢谢 程序如下:
%function E=PCNN3(A,B,x,y)
N=10;
A=imread(['D:\0\m1','.JPG']);
B=imread(['D:\0\m2','.JPG']);
A=rgb2gray(A);
B=rgb2gray(B);
[m,n]=size(A);
A=double(A);
B=double(B);
C=EOL1(A);
C1=EOL1(B);
A=normalized(A);
B=normalized(B);
D=C-C1;
alpha_f=12;
sygema=-1;
eita=0.01;
Vf=1000;
r=14;
for i=1:r
for j=1:r
if i==round((r+1)/2) &&j==round((r+1)/2)
W(i,j)=0;
else W(i,j)=1/sqrt(((i-round((r+1)/2))^2+(j-round((r+1)/2))^2));
end
end
end
D1=zeros(m+r,n+r);
D_p=zeros(m,n);
for i=1:m
for j=1:n
D1(i+r/2,j+r/2)=D(i,j);
end
end
for i=(1+r/2):(m+r/2)
for j=(1+r/2):(n+r/2)
D_p(i-r/2,j-r/2)=sum(sum(D1(i-r/2:i+r/2,j-r/2:j+r/2)));
end
end
beta1=1./(1+exp(-eita*D_p));
beta2=1./(1+exp(eita*D_p));
Y=zeros(m,n);
T=ones(m,n);
U=Y;
O=Y;
for n=1:N
K=filter2(W,Y,'same');
H1=A+K;
H2=B+K;
U=(1+beta1.*H1).*(1+beta2.*H2)+sygema;
for i=1:m
for j=1:n
if U(i,j)>T(i,j)
Y(i,j)=U(i,j)-K(i,j);
else Y(i,j)=0;
end
if A(i,j)==B(i,j)||beta1(i,j)==beta2(i,j)
O(i,j)=A(i,j);
else O(i,j)=Y(i,j);
end
if Y(i,j)==0
T(i,j)=exp(-alpha_f)*T(i,j);
else T(i,j)=Vf;
end
end
end
O=O+Y;
end
E=uint8(O);
imwrite(E,'D:\0\ronghe1.bmp','bmp');
其中用到的EOL1程序如下:
function E=EOL1(matrix)
%E=EOL(matrix)
%计算图像拉普拉斯能量
%matrix是图像矩阵
matrix=double(matrix);%精度转换
[m,n]=size(matrix);%获取图像矩阵的大小
matrix1=zeros(m+2,n+2);%生成一个(m+2)*(n+2)
%这里在计算拉普拉斯能量时,边缘部分的像素值都取为0
%这里的matrix1就是对原图像边缘部分做取0所得到的矩阵
for i=1:m
for j=1:n
matrix1(i+1,j+1)=matrix(i,j);
end
end
%计算图像的拉普拉斯能量
for i=2:m+1
for j=2:n+1
EOL1(i-1,j-1)=(-matrix1(i-1,j-1)-4*matrix1(i-1,j)-matrix1(i-1,j+1)-4*matrix1(i,j-1)+20*matrix1(i,j)-4*matrix1(i,j+1)-matrix1(i+1,j-1)-4*matrix1(i+1,j)-matrix1(i+1,j+1)).^2;
end
end
E=EOL1;%返回所求的结果
normalized程序为:
function [normalized_matrix]=Normalized(matrix)
% function [normalized_matrix,cmin,cmax]=Normalized(matrix)
%计算矩阵的标准型
Min_matrix=min(matrix(:));%取最小值
%获取最大值
Max_matrix=max(matrix(:));
%求解矩阵的标准型
normalized_matrix=(matrix-Min_matrix)./(Max_matrix-Min_matrix+0.000001);
希望大家能帮帮忙 真的很感谢
%function E=PCNN3(A,B,x,y)
N=10;
A=imread(['D:\0\m1','.JPG']);
B=imread(['D:\0\m2','.JPG']);
A=rgb2gray(A);
B=rgb2gray(B);
[m,n]=size(A);
A=double(A);
B=double(B);
C=EOL1(A);
C1=EOL1(B);
A=normalized(A);
B=normalized(B);
D=C-C1;
alpha_f=12;
sygema=-1;
eita=0.01;
Vf=1000;
r=14;
for i=1:r
for j=1:r
if i==round((r+1)/2) &&j==round((r+1)/2)
W(i,j)=0;
else W(i,j)=1/sqrt(((i-round((r+1)/2))^2+(j-round((r+1)/2))^2));
end
end
end
D1=zeros(m+r,n+r);
D_p=zeros(m,n);
for i=1:m
for j=1:n
D1(i+r/2,j+r/2)=D(i,j);
end
end
for i=(1+r/2):(m+r/2)
for j=(1+r/2):(n+r/2)
D_p(i-r/2,j-r/2)=sum(sum(D1(i-r/2:i+r/2,j-r/2:j+r/2)));
end
end
beta1=1./(1+exp(-eita*D_p));
beta2=1./(1+exp(eita*D_p));
Y=zeros(m,n);
T=ones(m,n);
U=Y;
O=Y;
for n=1:N
K=filter2(W,Y,'same');
H1=A+K;
H2=B+K;
U=(1+beta1.*H1).*(1+beta2.*H2)+sygema;
for i=1:m
for j=1:n
if U(i,j)>T(i,j)
Y(i,j)=U(i,j)-K(i,j);
else Y(i,j)=0;
end
if A(i,j)==B(i,j)||beta1(i,j)==beta2(i,j)
O(i,j)=A(i,j);
else O(i,j)=Y(i,j);
end
if Y(i,j)==0
T(i,j)=exp(-alpha_f)*T(i,j);
else T(i,j)=Vf;
end
end
end
O=O+Y;
end
E=uint8(O);
imwrite(E,'D:\0\ronghe1.bmp','bmp');
其中用到的EOL1程序如下:
function E=EOL1(matrix)
%E=EOL(matrix)
%计算图像拉普拉斯能量
%matrix是图像矩阵
matrix=double(matrix);%精度转换
[m,n]=size(matrix);%获取图像矩阵的大小
matrix1=zeros(m+2,n+2);%生成一个(m+2)*(n+2)
%这里在计算拉普拉斯能量时,边缘部分的像素值都取为0
%这里的matrix1就是对原图像边缘部分做取0所得到的矩阵
for i=1:m
for j=1:n
matrix1(i+1,j+1)=matrix(i,j);
end
end
%计算图像的拉普拉斯能量
for i=2:m+1
for j=2:n+1
EOL1(i-1,j-1)=(-matrix1(i-1,j-1)-4*matrix1(i-1,j)-matrix1(i-1,j+1)-4*matrix1(i,j-1)+20*matrix1(i,j)-4*matrix1(i,j+1)-matrix1(i+1,j-1)-4*matrix1(i+1,j)-matrix1(i+1,j+1)).^2;
end
end
E=EOL1;%返回所求的结果
normalized程序为:
function [normalized_matrix]=Normalized(matrix)
% function [normalized_matrix,cmin,cmax]=Normalized(matrix)
%计算矩阵的标准型
Min_matrix=min(matrix(:));%取最小值
%获取最大值
Max_matrix=max(matrix(:));
%求解矩阵的标准型
normalized_matrix=(matrix-Min_matrix)./(Max_matrix-Min_matrix+0.000001);
希望大家能帮帮忙 真的很感谢