1 实验题目
给出多幅图像的直方图并计算该图像信息熵、标准差和平均梯度,并进行分析(注 意图像的选择和设计)。
2 程序源代码
clc;
A1=imread('b.jpg');
subplot(4,4,1);imshow(A1);title('原图');
Ar=A1(:,:,1);%R 通道
Ag=A1(:,:,2);%G 通道
Ab=A1(:,:,3);%B 通道
subplot(4,4,4),imshow(A1(:,:,1));title('红色分量图'); %R 通道
subplot(4,4,7),imshow(A1(:,:,2));title('绿色分量图'); %G 通道
subplot(4,4,10),imshow(A1(:,:,3));title('蓝色分量图'); %B 通道
subplot(4,4,5),imhist(Ar);title('红色分量直方图');
subplot(4,4,8),imhist(Ag);title('绿色分量直方图');
subplot(4,4,11),imhist(Ab);title('蓝色分量直方图');
subplot(4,4,6),imhist(Ar,10);title('红色指定灰度级');
subplot(4,4,9),imhist(Ag,25);title('绿色指定灰度级');
subplot(4,4,12),imhist(Ab,50);title('蓝色指定灰度级');
if length(size(A1))>2%size 获得矩阵的大小,length 获得矩阵最大维度
A1=rgb2gray(A1);
end
subplot(4,4,2);imshow(A1);title('原图灰度化');
subplot(4,4,3);imhist(A1);title('原直方图');
ima=imadjust(A1);%按默认参数进行对比度调整
his=histeq(A1);%按默认参数对直方图进行均衡化
subplot(4,4,13);imshow(ima);title('对比度默认拉伸图');
subplot(4,4,14);imhist(ima);title('对比度默认拉伸后的直方图');
subplot(4,4,15);imshow(his);title('灰度图均衡后图');
subplot(4,4,16);imhist(his);title('灰度图均衡后直方图');
[row,col]=size(A1);%获取行数 和 列数
A1=double(A1);
sum=0;
for i=1:row
for j=1:col
sum=sum+A1(i,j);
end
end
%求均值
mid=sum/(row*col);
disp(['均值 mid:',num2str(mid)]);
%求方差
s=0;
for x=1:row
for y=1:col
s=s+(A1(x,y)-mid)^2;%求得所有像素与均值的平方和。
end
end
var=s/(row*col);%方差
disp(['方差 var:',num2str(var)]);
%求信息熵,通信原理上面有
[M,N]=size(A1);
temp=zeros(1,256);%设置空白矩阵,用于记录概率,一行 256 列的 0 矩阵。
for m=1:M
for n=1:N
if A1(m,n)==0%如果数值为 0
i=1;%序号为 1
else
i=A1(m,n);%否则为原来序号
end
temp(i)=temp(i)+1;%统计每个灰度值出现的次数
end
end
temp=temp/(M*N);%所有值除以元素个数,表示概率 即公式中的 P(i)
com=0;
for i=1:length(temp)%返回 temp 的行列中的最大值 即 256
if temp(i)==0%如果概率为 0 则不累加 0 要单独处理
else
com=com-temp(i)*log2(temp(i));
end
end
disp(['信息熵 com:',num2str(com)]);
3 运行结果
分析:直方图可以用于分析图像的亮度分布情况;信息熵表示图像的复杂度或不确定性,值越高表示图像越复杂;标准差表示图像的灰度值变化程度,值越大表示图像的 对比度越高;平均梯度表示图像的边缘密度,值越大表示图像的边缘越多。