Matlab遙感數字圖像處理——統計值計算

Matlab遙感數字圖像處理——統計值計算

clear,clc;   %清空工作區,清屏
result = IMG_Read('NVIS.dat');
% result = IMG_Read('Sandiego.img');
% result = IMG_Read('TM.dat');
% result = IMG_Read('can.dat');
% result = IMG_Read('TM-30m.dat');
% result = IMG_Read('Beijing.dat');

datatype = cell2mat(result(1));
Image = cell2mat(result(2));
[lines,samples,bands] = size(Image);

IMG = Image(:,:,1);        %只讀取圖像的一個波段
IMAGE = reshape(IMG,1,[]); %將二維矩陣轉換爲一維數組
IMGnum = samples*lines;

IMGsum = 0;
IMGVAR = 0;
IMGCOV = 0;

fid=fopen('統計結果.txt','w');

%求單波段數據的均值
IMGmean = mean(IMAGE)
% for i=1:IMGnum
%     IMGsum = IMGsum + IMAGE(i);
% end
% IMGmean = IMGsum/IMGnum;
fprintf(fid,'%7s %12s\r\n','統計量','統計值');
fprintf(fid,'%7s %17f\r\n','均值',IMGmean);

%對單波段數據排序
IMAGE1 = IMAGE;
IMAGE1 = sort(IMAGE1);
% for j = 1:IMGnum
%  for i = 1:IMGnum-j
%         if(IMAGE1(i)>IMAGE1(i+1))
%             temp = IMAGE1(i);
%             IMAGE1(i) = IMAGE1(i+1);
%             IMAGE1(i+1) = temp;
%         end
%     end
% end

% 求單波段數據的中值
IMGmedian = median(IMAGE1)
% if mod(IMGnum,2)==0
%     IMGmedian = (IMAGE1(IMGnum/2)+IMAGE1(IMGnum/2+1))/2;
% else 
%     IMGmedian = IMAGE1(fix(IMGnum/2));
% end
fprintf(fid,'%7s %17f\r\n','中值',IMGmedian);

%直方圖統計
IMGmax = max(IMAGE1)
numbers = zeros(2,IMGmax);
for k = 1:IMGmax+1
    numbers(1,k) = k-1;  
    numbers(2,k)= 0;
end
for i = 1:samples*lines
        for k = 1:IMGmax+1
             if IMAGE1(1,i)== numbers(1,k)
                 numbers(2,k) = numbers(2,k)+1;
             end
        end
end

%累計直方圖統計
NUMBER = zeros(2,fix(IMGmax));
NUMBER(2,1) = numbers(2,1);
for k = 2:IMGmax+1
    NUMBER(1,k) = k-1;  
    NUMBER(2,k) = NUMBER(2,k-1) + numbers(2,k); 
end

% 求單波段數據的衆數
IMGmode = mode(IMAGE1(1,:))
fprintf(fid,'%7s %17f\r\n','衆數',IMGmode);
% for i = 1:IMGmax
%     if(numbers(2,i)== max(numbers(2,:)))
%         IMGmode = i-1;
%     end
% end

% 求單波段數據的方差
IMGvar = var(IMAGE)
% for i = 1:IMGnum
%    IMGVAR = IMGVAR+ (IMAGE(i)-IMGmean) ^2;
% end
% IMGvar = IMGVAR/IMGnum
fprintf(fid,'%7s %17f\r\n','方差',IMGvar);

%前兩個波段的協方差
IMG2 = Image(:,:,2);
IMAGE2 = reshape(IMG2,1,[]);
IMGcov = cov(IMAGE,IMAGE2)
% IMGmean2 = mean(IMAGE2);
% for i = 1:IMGnum
%    IMGCOV = IMGCOV+ (IMAGE(i)-IMGmean) * (IMAGE2(i)-IMGmean2);
% end
% IMGcov = IMGCOV/IMGnum
fprintf(fid,'%7s\r %16f %10f\r\n %26f %10f\r\n','協方差',IMGcov);

%前兩個波段的相關係數
IMGcorrcoef = corrcoef(IMG,IMG2)
% TMGcorrcoef = IMGcov/((IMGvar^0.5)*(var(IMAGE2))^0.5)
fprintf(fid,'%7s\r %14f %10f\r\n %25f %10f\r\n','相關係數',IMGcorrcoef);
fclose(fid);

%繪製單波段數據的直方圖
figure(2)
subplot(1,3,1);
hist(IMAGE1,IMGmax)
title('第一個波段灰度直方圖');
% IMGhist = hist(IMAGE,IMGmax);

subplot(1,3,2);
hist(IMAGE2,max(IMAGE2));
title('第二個波段灰度直方圖');
% IMGhist2 = hist(IMAGE2,max(IMAGE2));

subplot(1,3,3);
IMG3 = Image(:,:,3);
IMAGE3 = reshape(IMG3,1,[]);
hist(IMAGE3,max(IMAGE2))
title('第三個波段灰度直方圖');
% IMGhist3 = hist(IMAGE3,max(IMAGE2));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章