Matlab图像特征分析——颜⾊矩、直⽅图、灰度差分统计、⾃
相关函数、灰度共⽣矩阵
Matlab图像特征分析——颜⾊矩、直⽅图、灰度差分统计、⾃相关函数、灰度共⽣矩阵
本⼈⽬前耕耘的领域是数字⽔印,在数字⽔印处理的过程中会涉到图像的分析,本篇⽂章主要针对常⽤的,基础的⼏种图像分析⽅法进⾏简单介绍,以下正⽂。
其实,图像分析可以看作是⼀个信息提取的过程,即从图像中提取想要的数据、信息、度量,再将其描述和表⽰出来。图像特征是指图像的原始特征或属性,分为视觉特征和统计特征。视觉特征主要是⼈视觉的直接感受(颜⾊,⼤⼩等),统计特征是指需要通过变换或测量才能得到的⼈为的特征(频谱、直⽅图等)。本⽂主要分析图像颜⾊特征和纹理特征,并通过Matlab实现特征分析。
⼀、颜⾊特征
颜⾊特征描述了图像或图像区域所对应景物的表⾯性质,颜⾊对⼈眼的敏感度较图像尺⼨、⽅向来说偏低,因此颜⾊特征被⼴泛应⽤于图像识别。常⽤的颜⾊表⽰⽅法有颜⾊矩、颜⾊直⽅图、颜⾊相关性等,本⽂介绍颜⾊矩和颜⾊直⽅图两种⽅法。
1.1 颜⾊矩
颜⾊矩是以数学⽅法为基础的,通常颜⾊矩直接在RGB颜⾊空间计算,也可以在其他颜⾊空间计算。颜⾊主要信息分布在低阶矩,因此常⽤⼀阶矩、⼆阶矩。其定义如下:
⼀阶矩:
⼆阶矩:
其中 i 代表R、G、B三个颜⾊通道,j表⽰像素值,N表⽰像素数量。从定义可以看出,⼀阶矩表⽰每个颜⾊通道的平均值;⼆阶矩表⽰颜⾊⽅差。
代码⽰例
Matlab中⽤mean2()和std()两个函数分别求⼀阶矩和⼆阶矩。其代码实现如下:
I = imread('flower.jpg '); % 读取指定图像
J = imread('leaf.jpg ');
I = double(I);  %转化数据类型
J = double(J);
I_r = I(:,:,1);  %提取红⾊通道
I_g = I(:,:,2);  %提取绿⾊通道
I_b = I(:,:,3);  %提取蓝⾊通道
J_r = J(:,:,1);  %提取红⾊通道
J_g = J(:,:,2);  %提取绿⾊通道
J_b = J(:,:,3);  %提取蓝⾊通道
Ravg1 = mean2(I_r) %不带分号,将结果显⽰在命令⾏窗⼝
Gavg1 = mean2(I_g)
Bavg1 = mean2(I_b)
Rstd1 = std(std(I_r)) %std是求标准差,两次std就是⽅差,即⼆阶矩
Gstd1 = std(std(I_g))
Bstd1 = std(std(I_b))
运⾏结果:
Ravg1 =
140.9577
Gavg1 =
53.7861
Bavg1 =
44.9997
Rstd1 =
24.3750
用subplot函数Gstd1 =
4.9645
Bstd1 =
3.8668
1.2 颜⾊直⽅图
颜⾊直⽅图描述的是图像中不同颜⾊在整幅图像中所占的⽐例多少,不关⼼⾊彩的位置,适⽤于描述那些难以⾃动分割和不需要考虑物体空间位置的图像。设⼀幅图像的⼤⼩为M * N。颜⾊直⽅图H的定义为: .其中是第i种颜⾊在整幅图像中的具体像素数。图像直⽅图归⼀化为:.
绘制图像颜⾊直⽅图
imhist() 函数可以计算并绘制图像的颜⾊直⽅图。以下为例:绘制彩⾊图像R、G、B分量的直⽅图,其具体Matlab的实现如下:
I = imread('pic01.jpg');
I_r = I(:,:,1);
I_g = I(:,:,2);
I_b = I(:,:,3);
figure;
subplot(221);imshow(I);                            %显⽰彩⾊图像
subplot(222);imshow(I_r);          %R分量灰度图
subplot(223);imshow(I_g);          %G分量灰度图
subplot(224);imshow(I_b);          %B分量灰度图
figure;
subplot(131);imhist(I(:,:,1));title('红⾊分量直⽅图');    %显⽰红⾊分辨率下的直⽅图
subplot(132);imhist(I(:,:,2));title('绿⾊分量直⽅图')  %显⽰绿⾊分辨率下的直⽅图
subplot(133);imhist(I(:,:,3));title('蓝⾊分量直⽅图')  %显⽰蓝⾊分辨率下的直⽅图
其运⾏结果如下:
使⽤上述同样的代码。更换⼀张⾊彩谝亮⼀些的图进⾏同样的测试,其结果如下图:
对照这两幅图像的颜⾊特征解释直⽅图,直⽅图的横坐标是0-255,表⽰像素值;纵坐标表⽰该像素值在整幅图像中的个数。第⼀幅图像的颜⾊⽐较鲜艳,⾊彩丰富且图像谝深⾊⼀些,故直⽅图较为均匀(纵坐标的到5000)且数字偏⼩的像素更多⼀些;第⼆幅图像为雪景,图像谝⽩、谝亮,所以在150-255之间的像素值较多(纵坐标达到7000)。
2> 图像直⽅图均衡化
图像处理中经常有⼀个操作是图像均衡化,使⽤histeq()函数。histeq()有以下⼏种使⽤⽅式:
= histeq(,) 变换灰度图像 I,以使输出灰度图像 J 具有 length(hgram) 个 bin 的直⽅图近似匹配⽬标直⽅图 hgram。
= histeq(,) 变换灰度图像 I,以使输出灰度图像 J 具有 n 个 bin 的直⽅图⼤致平坦。当 n 远⼩于 I 中的离散灰度级数时,J 的直⽅图更平坦。
= histeq() 变换灰度图像 I,以使输出灰度图像 J 的直⽅图具有 64 个 bin 且⼤致平坦。
⽤上⾯的第⼀个图为例进⾏⼀次均衡化,实现如下
I = imread('pic03.jpg');
I = rgb2gray(I);
H = histeq(I);
figure;
subplot(121); imshow(I);  title('原始灰度图像');
subplot(122);imshow(H); title('直⽅图均衡化图像');
figure;
subplot(121); imhist(I);  title('原始灰度图像直⽅图');
subplot(122);imhist(H); title('直⽅图均衡化图像直⽅图');
其运⾏效果⼊下图:
灰度图像直⽅图均衡化处理
图像直⽅图
⼆、纹理特征
图像的纹理特征描述图像景物的表⾯性质,是从图像中计算出的⼀个值,反应图像对应物品的质地,如粗糙度、颗粒度、随机性和规范性等。图像纹理常被应⽤于卫星遥感地表图像分析,图像分类、模式识别等。在此我介绍灰度差分统计,⾃相关函数、灰度共⽣矩阵三种分析⽅法。
2.1 灰度差分统计法
利⽤图像直⽅图提取诸如均值、⽅差、能量及熵等特征来描述纹理。
设()为图像中的⼀点,该点附近的点()的灰度差值为:
.差分叫法的由来!
由直⽅图可以得到取值的概率p(k),直⽅图平坦时,说明纹理较细致。相关的纹理特征有:
平均值:
对⽐度:
熵:
在上述各式中,p(k)较平坦时,熵较⼤,能量较⼩,p(k) 越分布在原点附近,则均值越⼩。基于灰度级的直⽅图并不能建⽴特征与纹理基元的⼀⼀对应关系,相同的直⽅图可能会有不同的图像纹理。因此在运⽤灰度直⽅图进⾏纹理分析和⽐较时,还需要加上其他特征。
实施例:计算两幅图像的差分统计特性,实现如下:
clc;
clear all; close all;
J=imread('ballon.png');                    %读⼊纹理图像,分别输⼊wall.jpg和stone.jpg两幅图进⾏对⽐
A=double(J);
[m,n]=size(A);                        %求A矩阵的⼤⼩,赋值给m n
B=A;
C=zeros(m,n);                        %新建全零矩阵C,以下求解归⼀化的灰度直⽅图
for i=1:m-1
for j=1:n-1
B(i,j)=A(i+1,j+1);
C(i,j)=abs(round(A(i,j)-B(i,j)));
end
end
h=imhist(mat2gray(C))/(m*n);
mean=0;con=0;ent=0;                    % 均值mean、对⽐度con和熵ent初始值赋零
for i=1:256                              %循环求解均值mean、对⽐度con和熵ent
mean=mean+(i*h(i))/256;
con=con+i*i*h(i);
if(h(i)>0)
ent=ent-h(i)*log2(h(i));
end
end
mean,con,ent