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個百分點
|