图像的统计与描述

图像的统计和描述(matlab)

本篇是遥感数字图像处理中的关于图像的统计与描述。共分为七个部分,分别为均值、中值、排序、众数、方差/协方差、相关系数、直方图/累计直方图,下面将分别进行叙述。
程序均用matlab实现

1.均值

对图像进行处理时,首先需要先将二维向量转变为一维向量,同时将数据类型转换为double型才能使运算结果更加准确。
程序分析:使用for循环遍历每一个波段每一个像素的灰度值,累计相加求和,最后除以总的像素个数,得到每个波段的灰度平均值。
代码实现如下所示:

function st=statics(image)
[size,cols,bands]=size(image);
%初始化均值向量
average=zeros(1,bands);
for band=1:bands
	%转换为一维向量
	oneband=image(:,:,band);
	%转换为double类型
	oneband=double(oneband(:));
	for i=1:rows*cols
		average(band)=average(band)+oneband(i);
	end
	average(band)=average(band)/rows/cols;
end

2.中值

程序分析:循环遍历每个波段的灰度值,进行排序,去位于中间位置的灰度值即为中值。
程序实现如下:

%初始化中值向量
mid=zeros(1,bands);
for band=1:bands
	oneband=image(:,:,band);
	oneband=double(oneband(:);
	%排序
	for i=1:rows*cols-1
		for j=i+1:rows*cols
			if(oneband(j)<oneband(i))
				t=oneband(j);
				oneband(j)=oneband(i);
				oneband(i)=t;
			end
		end
	end
	mid(band)=oneband(round(rows*cols/2);
end

3.众数

程序分析:求众数需要先求出灰度直方图,个数最大的那个对应的灰度值即为众数

%初始化灰度直方图向量
zft=zeros(bands+1,256);
%初始化众数向量
mode=zeros(1,bands);
for band=1:bands
	oneband=image(:,:,band);
	oneband=double(oneband(:));
	%求灰度直方图
	for i=rows*cols
		zft(band+1,oneband(i)+1)=zft(band+1,oneband(i)+1)+1;
	end
	%遍历灰度直方图,求最大值
	max=zft(band+1,1);
	index=1;
	for i=1:256
		if(zft(band,i+1)>zft(band,i))
			max=zft(band,i+1);
			index=i+1;
		end
	end
	%求众数
	mode(band)=zft(1,index+1);
end

4.方差/协方差

程序分析:得到的方差/协方差矩阵是一个bands*bands的矩阵。矩阵的第一行第一列的值是该波段所有像素灰度值的方差,第一行第二列的值是第一个波段与第二个波段的协方差,以此类推。
程序实现如下所示:

%初始化方差/协方差矩阵
var=zeros(bands,bands)
for iband=1:bands
	ioneband=image(:,:,iband);
	ioneband=double(ioneband(:));
	for jband=1:jbands
		joneband=image(:,:,jband);
		joneband=double(joneband(:));
		sum=0;
		for i=1:rows*cols
			sum=sum+(ioneband(i)-average(band))*(joneband(i)-average(band));
		end
	end
	var(iband,jband)=sum/rows/cols;
end

5.相关系数

程序分析:相关系数等于对应的协方差除以各自的方差
程序实现如下:

%初始化相关系数向量
p=zeros(bands,bands);
for i=1:bands
	for j=1:bands
		p(i,j)=var(i,j)/sqrt(var(i,i)*var(j,j));
	end
end

6.直方图/累计直方图

程序分析:灰度直方图的代码上面已给出,累计直方图即统计该灰度值之间(包括它自己)的所有灰度值的像素和。
程序实现如下所示:

%初始化灰度直方图向量
zft=zeros(bands+1,256);
%初始化累计直方图向量
ljzft=zeros(bands+1,256);
for band=1:bands
	oneband=image(:,:,band);
	oneband=double(oneband(:));
	%求灰度直方图
	for i=rows*cols
		zft(band+1,oneband(i)+1)=zft(band+1,oneband(i)+1)+1;
	end
	%求累计直方图
	ljzft(band,1)=zft(band,1)
	for i=2:256
		ljzft(band,i)=ljzft(band,i-1)+zft(band,i);
	end
end

7.排序

关于排序的部分代码已在求中值的时候给出,不再叙述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值