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));
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值