图像特征分析(一):颜色特征描述,颜色矩,颜色直方图(附matlab代码)
图像分析被视为一种图像信息提取的方式,在这一过程中从图像中提取有价值的信息。其主要归为两类:视觉特性和统计属性。其中视觉特性主要体现为形态特性和纹理结构等直观感知要素。而统计属性则需借助特定变换手段才能获取到的具体属性参数。例如可以通过观察物体的颜色、形状及其空间排列关系来确定形态特性和纹理结构;而频谱特性和灰度分布直方图等则是通过数据处理来获得的具体统计属性描述。
基于视觉特征的不同分类,在本专题中将分别开设三篇博客来详细解析颜色特性、纹理特性以及形状特性。当前文章将重点阐述颜色特性的分析方法,并详细介绍matlab的具体实现方案。
一. 颜色特征分析
颜色特征被视为图像内生属性的一部分。它不受图像尺寸、方向以及观察视角等因素的影响,并因这些特性而被广泛应用在图像识别任务中。下面主要介绍两种常用的颜色特征表示方法:颜色矩与颜色直方图。
1. 颜色矩
1.1 原理解释
基于数学原理的方法能够有效地表征颜色特性。具体而言,在随机变量R的概率分布中可以通过计算各种矩来全面表征其颜色特性。假设将数字图像中所有像素点的颜色值视为一个概率分布,则该图像同样可以通过其各阶不同类型的矩来进行表征和分析。

(上式中描述了图像的颜色通道参数及其对应关系:其中变量i代表图像的颜色通道数量,在灰度图中仅取值1,在彩色图中则取值3;而Pij则表示的是第j个像素在第i个颜色通道中的具体数值信息)。
(2)二阶颜色矩
二阶颜色矩被定义为二阶中心距的开平方结果即标准差其主要反映了图像的颜色分布范围数值越大则表明颜色分布范围越广

(上式中,Ei是所有像素第i个颜色通道的颜色均值)
(3)三阶颜色矩
三阶颜色矩基于三阶中心距计算其三次方根,并称为偏差;能够体现图像色彩分布的对称特征。

当指数指标S_i等于零时(即S_i=0),图像的颜色分布呈现对称状态;
当指数指标S_i小于零(即S_i<0)时(亦即左侧),颜色分布出现左边偏差或负向偏差;
当指数指标S_i大于零(即S_i>0)时(亦即右侧),颜色分布出现右边偏差或正向偏差。
1.2 matlab代码实现
一阶矩即均值,则可通过mean2()函数计算;二阶矩即标准差,则可通过std2()函数进行计算或者直接依据相关公式进行手动实现;三者之间的关系则体现为三阶矩即偏差,在实际应用中亦可相应地通过相关公式实现

clear;
clc;
I=imread('lena.png');
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
figure;
subplot(221);imshow(I);title('原图');
subplot(222);imshow(R);title('R');
subplot(223);imshow(G);title('G');
subplot(224);imshow(B);title('B');
R=double(R);
G=double(G);
B=double(B);
[m,n]=size(R);
%一阶矩(均值)
Rmean=mean2(R);
Gmean=mean2(G);
Bmean=mean2(B);
%二阶矩(标准差)
Rstd=std2(R);
Gstd=std2(G);
Bstd=std2(B);
%三阶矩(偏差)
sum=0.0;
for i=1:m
for j=1:n
sum=sum+(R(i,j)-Rmean)^3;
end
end
Rske=(sum/(m*n))^(1/3);
sum=0.0;
for i=1:m
for j=1:n
sum=sum+(G(i,j)-Gmean)^3;
end
end
Gske=(sum/(m*n))^(1/3);
sum=0.0;
for i=1:m
for j=1:n
sum=sum+(B(i,j)-Bmean)^3;
end
end
Bske=(sum/(m*n))^(1/3);
代码解释
在求二阶矩标准差时也可以通过下面的公式法求
sum=0.0;
for i=1:m
for j=1:n
sum=sum+(R(i,j)-Rmean)^2;
end
end
Rstd=(sum/(m*n))^(1/2);
sum=0.0;
for i=1:m
for j=1:n
sum=sum+(G(i,j)-Gmean)^2;
end
end
Gstd=(sum/(m*n))^(1/2);
sum=0.0;
for i=1:m
for j=1:n
sum=sum+(B(i,j)-Bmean)^2;
end
end
Bstd=(sum/(m*n))^(1/2);
代码解释
得到的结果如下:

2. 颜色直方图
颜色直方图表征为图像不同色彩在整幅图片中像素数量的比例关系,并反映了图像色彩分布的概率特性,在处理无法自动分割的图像以及无需考虑物体三维位置信息的情形下具有显著应用价值。常用的色彩空间包括RGB色彩模型与HSV色彩模型;以下通过同一幅图片来展示两种色彩空间下的直方图分布情况
matlab代码实现
(1)RGB颜色空间
%RGB颜色空间
I=imread('onion.png');
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
figure(1);
subplot(221);imshow(I);
subplot(222);imshow(R);
subplot(223);imshow(G);
subplot(224);imshow(B);
figure(2);
subplot(131);imhist(R)
subplot(132);imhist(G)
subplot(133);imhist(B)
代码解释


(2)HSV颜色空间
%hsv颜色空间
I=imread('onion.png');
J=rgb2hsv(I);
h=J(:,:,1);
s=J(:,:,2);
v=J(:,:,3);
figure(1);
subplot(131);imshow(h);title('h色调的灰度图像')
subplot(132);imshow(s);title('s饱和度的灰度图像')
subplot(133);imshow(v);title('v亮度的灰度图像')
figure(2);
subplot(131);imhist(R);title('h直方图');
subplot(132);imhist(G);title('s直方图');
subplot(133);imhist(B);title('v直方图');
代码解释


在翻阅颜色矩相关资料时
clc;
clear;
X=[1 2 3
5 5 5
7 8 9];
%标准差
b=std2(X);
%方差
f1=var(X(:));
f2=b^2;
%错误方法
f3=std(X);
f4=std(f3);
f5=std(std(X));
代码解释

定义了一个矩阵X,在其中计算出的标准偏差值为b;采用两种不同的方法分别得到了两个方差值 f₁ 和 f₂;其中前者与后者计算得出的结果一致;但通过再次应用std函数后得到的结果记为 f₅ ,其结果与其不同;具体而言即先分别计算每列的标准偏差以获得一行的标准偏差向量;接着对该向量再次计算一次标准偏差。
以下是对图像颜色特征描述的简要概述:文章详细阐述了基于颜色矩与基于直方图的两种编码方法,并对其中一种方法提出了值得商榷的问题。如若在查阅资料的过程中出现疑问,请参考本文内容以获得帮助。
如若本文对您有所帮助,请记得点赞以示鼓励。如有任何错误或建议,请随时留言指正!
