一、前言
在matlab中,灰度图像是一个二维矩阵,RGB彩色图像是一个三维矩阵,可以通过统计特性得到一幅图像的统计信息,来帮助我们对图像进行判断,比如平均值、方差和相关系数等统计特征。
二、图像大小
我们在matlab中主要使用size函数来计算图像大小,使用numel函数计算图像的像素总个数(即size计算的图像大小的乘积)。
以下面灰度图像tire.tif为例:
I=imread('tire.tif');% I为灰度图像对应二维数组
% 第一种格式
A=size(I);
% 第二种格式
[r,c]=size(I);
[r,c,m]=size(I);% 将二维矩阵当作第三维为1的三维矩阵,即m=1
% 第三种格式
row=size(I,1);
column=size(I,2);
% 计算图像像素总数piexl=row*column
pixel=numel(I);
% disp函数的作用是在命令行窗口显示变量的值
disp(A);
disp(r);
disp(c);
disp(m);
disp(row);
disp(column);
disp(pixel);
最终命令行窗口结果:
205 232
205
232
1
205
232
47560
三、图像均值
对于灰度图像即计算图像的灰度平均值,对于彩色图像既可以计算所有颜色值的平均值也可以计算每种颜色的平均值,反映一幅图像的平均亮度。在matlab中,采用mean2函数计算矩阵均值。
% 均值反映了图像的亮度,均值越大说明图像亮度越大,反之越小
I=imread('onion.png');
J=rgb2gray(I);
% 当定义一个MATLAB函数,中间一行代码如果结尾不加分号,MATLAB会把这行代码的值直接输出到命令行窗口
% 对于灰度图像(二维矩阵),mean2()函数计算图像的平均灰度值
gary=mean2(J)
% 对于彩色图像(三维矩阵),mean2()可以得到所有颜色值的平均值(即(r+g+b)/3)
rgb=mean2(I)
% 可以使用mean2(I(:,:,1))、mean2(I(:,:,2))、mean2(I(:,:,3))分别计算彩色图像每种颜色的平均值
r=mean2(I(:,:,1))
g=mean2(I(:,:,2))
b=mean2(I(:,:,3))
subplot(121),imshow(I);
subplot(122),imshow(J);
最终命令行窗口结果:
gary =
100.6817
rgb =
91.7928
r =
137.3282
g =
92.7850
b =
45.2651
实现效果:
(对于本例,通过输出结果可以发现此幅图像的红色和绿色均值较大,蓝色均值较小,说明原图中红色和绿色成分较多,蓝色成分较少,符合原图。)
四、图像标准差
图像的标准差反映了图像像素值与均值的离散程度,在matlab中使用std2函数计算图像标准差。
% std()可计算向量的标准差,std2()可计算矩阵的标准差
I=imread('pout.tif');
s1=std2(I)
J=histeq(I);
s2=std2(J)
% 注意s2>s1,标准差反映了图像像素值与均值的离散程度,标准差越大说明图像的质量越好
subplot(221),imshow(I);
subplot(222),imshow(J);
subplot(223),imhist(I);
title('原图的灰度直方图');
subplot(224),imhist(J);
title('均衡化后的灰度直方图');
最终命令行窗口结果:
s1 =
23.1811
s2 =
74.7572
实现效果:
(对于本例,通过输出结果可以发现灰度图像经过直方图均衡化处理后,明暗对比度增加,图像变得更加清晰,其标准差也变大了。)
五、图像方差
图像方差即为图像标准差的平方,在matlab中,有两种可以方法可以求出图像方差:
(1)使用var函数计算;
(2)使用标准差的平方计算。
I=imread('tire.tif');
I=im2double(I);% 注意一定要将图像类型转为double类型,否则使用var函数时会报错:数据类型无效.第一个输入参数必须为单精度值或双精度值
% 方法一:使用var函数计算
s1=var(I(:))
% 方法二:使用标准差的平方计算
s2=(std2(I))^2
最终命令行窗口结果:
s1 =
0.0595
s2 =
0.0595
六、图像协方差矩阵
协方差矩阵是两幅图像之间的相关程度的一种度量。协方差矩阵为0时,表明两图像之间相互独立,反之表示两图像之间相互依赖.。在matlab中,使用cov函数计算图像协方差矩阵。
% 相同图像求协方差矩阵
I=imread('tire.tif');
I=im2double(I);
s=var(I(:)) % 图像的方差
c1=cov(I,I) % cov(I,I)等同于cov(I(:),I(:)),注意cov(A,B)中的A和B必须具有相同的大小
% 不同图像求协方差矩阵
J1=imread('sun.png');
J1=im2double(rgb2gray(J1));
J2=imread('grass.png');
J2=im2double(rgb2gray(J2));
c2=cov(J1,J2) % cov(I,I)等同于cov(I(:),I(:)),注意cov(A,B)中的A和B必须具有相同的大小
最终命令行窗口结果:
s =
0.0595
c1 =
0.0595 0.0595
0.0595 0.0595
c2 =
0.0423 0.0066
0.0066 0.0159
更加具体的cov函数的用法可参考博客:
【 MATLAB 】协方差 cov以及协方差矩阵基础知识
七、图像相关系数
图像相关系数是两幅图像相关性的一种度量,其值越接近1,两幅图像的线性相关性越密切;其值越接近0,两幅图像的线性相关性越不密切。在matlab中,使用corr2函数计算两个灰度图像的相关系数。
I=imread('pout.tif');
% 中值滤波对孤立的噪声像素即椒盐噪声、脉冲噪声具有良好的滤波效果,可以保持图像的边缘特性,不会使图像产生显著的模糊。
% medfilt2为中值滤波函数
J=medfilt2(I);
% corr2函数计算两个灰度图像(注意大小相等,只针对二维矩阵)的相关系数
r1=corr2(I,J) % 不同图像
r2=corr2(I,I) % 相同图像
subplot(121),imshow(I);
subplot(122),imshow(J);
最终命令行窗口结果:
r1 =
0.9959
r2 =
1
实现效果:
八、图像等高线
在matlab中,使用imcontour绘制灰度图像的等高线。简单调用格式如下:
I=imread('peppers.png');
J=rgb2gray(I);
subplot(131),imshow(J);
% imcontour(I,n)设置灰度图像等高线的条数为n,若不指定n,该函数会自动选择n
subplot(132),imcontour(J,3);
subplot(133),imcontour(J);
实现效果: