1.算法原理简介
首先对两幅实验用SAR 图像进行滤波处理,消除噪声,尽可能的减少噪点对变化检测结果的影响。然后利用图像比值法生成初步的新像素矩阵。假设P1(i,j)是第一幅实验用SAR 图像对应像素点(i,j)的灰度,P2(i,j)是第二幅实验用图对应像素点(i,j)的灰度。对应两幅图像,变化的部分像素差异较大,所以比值P1(i,j)/P2(i,j)距离1 就比较远;而对应不变的点,像素虽然不至于完全一致,但是比值会在1 的附近。这个特性就为此方法的实现奠定了良好的基础。
然后对上一步得到的像素矩阵进行处理,例如进行取反操作(这个要看实际需要),乘以某一恰当的系数将像素值的差距拉大。便可得到一幅SAR 图像变化图像。最后将实验所得的结果跟参考进行比对,得到差异,并统计漏检和误检的像素点数量。
2.具体算法步骤:
步骤1:读入变化前后的实验用用SAR图像
步骤2:将两幅图像的像素矩阵相比,得到新的像素矩阵
步骤3:对上步所得像素矩阵进行取反,将系数等简单的处理,得到变化检测的图像
步骤4: 对上步得到的新图像以及参考进行模糊C均值分类,对参考和新图像进行比较
步骤5: 对参考和实验结果进行相减操作,得到误差图像
步骤6: 统计漏测点和误测点的数量并输出
步骤7: 结束
3.算法程序
function Untitled2
clc
clear all
close all
I1=imread('1999.04.bmp');
I2=imread('1999.05.bmp');
I3=imread('1999.05.bmp');
I1=rgb2gray(I1);
I2=rgb2gray(I2);
I3=rgb2gray(I3);
I1=medfilt2(I1,[3,3]);
I2=medfilt2(I2,[3,3]);
I3=medfilt2(I3,[3,3]);
[N,L]=size(I1);
I=(I1./I2).*256;
I=imcomplement(I);
IM=I;
I11=fcm2(I);
IM=I3;
I22=fcm2(I3);
k=0;
[T,J]=cuowu(I11,I22,N,L);
k=T+J;
disp(sprintf('½á1û©¼ì%d¸öÏñËØμ㣬Îó¼ì%d¸öÏñËØμã',T,J));
disp(sprintf('½á1ûí¼Ïñ12óD%d¸öÏñËØ£¬ÆäÖDóë2ο¼Îó2îÏñËظöêyÎa%d',N*L,k));
k=k/(N*L)*100;
disp(sprintf('′Ë·½·¨óë2ο¼í¼ÏñμÄÎó2îÂê%2.4f¸ö°ù·Öμã',k));
I4=I11-I22;
figure(1)
subplot(221)
imshow(I1);
title('before change');
subplot(223)
imshow(I2);
title('after change');
subplot(222)
imshow(I3);
title('reference');
subplot(224)
imshow(I);
title('result');
figure(2)
subplot(121)
imshow(I11);
title('result_fcm2');
subplot(122)
imshow(I22);
title('reference_fcm2');
figure(3)
imshow(I4);
title('分析后与结果的误差');
function IMMM=fcm2(IM)
[maxX,maxY]=size(IM);
IM=double(IM);
IMM=cat(2,IM,IM);
cc1=8;
cc2=230;
IMM=cat(3,IM,IM);
ttFcm=0;
while(ttFcm<30)
ttFcm=ttFcm+1;
c1=repmat(cc1,maxX,maxY);
c2=repmat(cc2,maxX,maxY);
c=cat(3,c1,c2);
ree=repmat(0.000001,maxX,maxY);
ree1=cat(3,ree,ree);
distance=IMM-c;
distance=distance.*distance+ree1;
daoshu=1./distance;
daoshu2=daoshu(:,:,1)+daoshu(:,:,2);
distance1=distance(:,:,1).*daoshu2;
u1=1./distance1;
distance2=distance(:,:,2).*daoshu2;
u2=1./distance2;
ccc1=sum(sum(u1.*u1.*IM))/sum(sum(u1.*u1));
ccc2=sum(sum(u2.*u2.*IM))/sum(sum(u2.*u2));
tmpMatrix=[abs(cc1-ccc1)/cc1,abs(cc2-ccc2)/cc2];
pp=cat(3,u1,u2);
for i=1:maxX
for j=1:maxY
if max(pp(i,j,:))==u1(i,j)
IX2(i,j)=1;
elseif max(pp(i,j,:))==u2(i,j)
IX2(i,j)=2;
end
end
end
if max(tmpMatrix)<0.0001
break;
else
cc1=ccc1;
cc2=ccc2;
end
end
for i=1:maxX
for j=1:maxY
if IX2(i,j)==2
IMMM(i,j)=255;
else
IMMM(i,j)=0;
end
end
end
end
function [T,J]=cuowu(I11,I22,N,L)
T=0;J=0;
for i=1:N
for j=1:L
if (I11(i,j)==0&&I22(i,j)==255)
T=T+1;
elseif (I11(i,j)==255&&I22(i,j)==0)
J=J+1;
end
end
end
end
end
4.实验结果
5.实验结果分析
结果漏检44545个像素点,误检49个像素点
结果图像共有90601个像素,其中与参考误差像素个数为44594
此方法与参考图像的误差率49.2202个百分点
|