写在前面:
纹理特征只是一种物体表面的特性,并不能完全反映出物体的本质属性,若想获得更加精准的分类效果仅仅依靠纹理特征是远远不够的。
灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度方面的综合信息。
GLCM理论介绍
灰度共生矩阵GLCM是假定图像中每个像素之间都存在空间上的有关于纹理信息的特征,所提出的一种纹理分析方法,是目前共认比较有效的图像特征方法之一。这里不推到具体计算公式,详细数学推导都在《声呐图像处理》一书:
上图举例说明由一个灰度级L=4的灰度图像IMAGE求其灰度共生矩阵,方框中数字代表像素点的灰度值。现在设置方向只能水平向右取,间隔只能是一个像素
在图像IMAGE中水平相邻的像素对的灰度值都为1的情况只出现了1次(红色椭圆框内),所以GLCM(1,1)的值是1。同理,在图像 IMAGE中水平相邻的像素对的灰度值分别为 1和3 的情况出现了2次(黄色椭圆框内),所以GLCM(1,3)的值是2。迭代以上过程,就可以计算出GLCM的所有位置(L^2)的取值了~最后把频数GLCM(i,j)换算成频率P(i,j)即可
实际计算GLCM取得方向一般是0°、45°、90°和135°(一般是分别用每个特征值的四个方向的均值作为样本的最终纹理特征),间隔一般是取一个像素点。MATLAB中,用’Offset’,一个整数矩阵,指定了感兴趣像素对之间的距离和方向,如:
glcm0 = graycomatrix(image, 'Offset', [0,1]); % 计算image的0°且间隔1个像素点的灰度共生矩阵,matlab自带函数计算
GLCM有什么用:提供灰度特征
用MATLAB的graycomatrix()函数自己试试,再help一下就懂了,可以很快计算出四个最重要的特征量:
其实还有个特征比较重要,但MATLAB里没用能直接调用工具箱算的:
这一维特征是MATLAB自带函数还不能算出来的,
它的计算程序在这里:对图像数据做灰度共生矩阵分析,绝对能用
测试结果小结
在GLCM提供的14个纹理特征中,Ulaby等人认为仅能量、对比度、相关性、同质性这四个特征不相关。Baraldi等人则认为对比度和熵是最重要的两个特征。
我小小测试了一下,使用四张声呐图像提取特征再做了对比
对2个真、2个假目标分别提取特征,并分别用每个特征值在四个方向的均值作为样本的最终纹理特征
仅仅对比度与熵体现出肉眼可见的较好的区分性
另,
这里出现的四张声呐图像是从论文[基于卷积残差网络的水下主动目标回波图像分类方法研究_王磊]中截下来的,正目标是舰艇