c++读出像素矩阵_灰度共生矩阵

说到灰度共生矩阵,大家首先想到的问题应该是,灰度共生矩阵是什么,以下主要是从什么是灰度共生矩阵,灰度共生矩阵主要是干嘛的,以及如何利用Python进行编程实现 这三个方面进行讲解.


1.灰度共生矩阵

① 定义:从灰度为 i 的像素点出发,距离(dx,dy)的另一像素点灰度为 j 的的概率.

(可能有点懵...)

② 数学表达式:

式中,

:用像素数量表示的相对距离;

: 一般考虑四个方向,分别为
;

;

为图像中的像素坐标,
为图像灰度级的数目.

可以简单理解:灰度图像中某种形状的像素对,在全图中出现的次数.

84bb875f9fe1c88c65efb2c05d77ea05.png
图1 几何表达

如图1所示:x方向是图像的列,y方向是图像的行,f(x, y) = i,为坐标(x, y)处的像素值,我们需要统计的是距离(dx, dy)处 f(x + dx, y + dy) = j 的次数(归一化:概率),由于(dx, dy)的选择不同,则会导致角度的不同,一般我们会选择 0°,45°, 90°, 135°.

注:方向是双向的,比如0°,包括180°,45°包括225°等,如图1右图所示.

③ 创建灰度共生矩阵

为了便于理解,我们举个例子吧.

342db6d9e85ffde595307bd204ccd73f.png
图2 灰度共生矩阵

如图2所示:图像的灰度级别共有4个等级.

★ 首先创建一个大小为4x4的灰度共生矩阵;

★ 假设d = 1,θ = 0° (注:双向)

★ 然后,就可以往灰度共生矩阵里填写值啦,比如,第一个值,代表的是:图像中,灰度对(0, 0)出现的次数(d = 1, θ = 0°);

★ 把所有的值填完,灰度共生矩阵也就完成啦;

可能有人对双向不太理解.

如图3所示:对图像进行遍历,把满足要求的灰度对记录下来,比如当遍历图像第一个元素时,第一个灰度为0,第二个灰度为0,满足要求. 当遍历到第二个灰度时,它的右边是1,左边却是0,同样是满足要求的,因为我们说的方向是具有方向性的.

094ab7bae26ea779f66eea12de8f79ef.png
图3 像素对

大家现在差不多应该理解了吧,虽然灰度共生矩阵原理挺简单,但它的计算量可不少.

在实际应用中,一幅灰度影像的灰度级一般为256级,在计算由灰度共生矩阵推导出的纹理特征时,要求影像的灰度级远小于256,主要是因为影像共生矩阵的计算量由影像的灰度等级和影像的大小来确定。例如: 假定影像G有L个灰度级,其大小为R行C列,则运算量大约是L² * R * C,按一般情况L=256, R=512, C=512来计算,其基本运算至少要1.7 * 10十次方次。以现行微机的运算速度每秒100万次为例(其实我们的计算机现在远远不止这个速度,对于遥感图像,灰度共生矩阵的求解一般是针对每一个像素而言的,求每一个像素的邻域的灰度共生矩阵,运算量真的很大),对上述一幅影像计算其灰度共生矩阵至少需要1.7 x10³秒以上,约30分钟。由此可见,这样长的时间用来进行影像的识别是不太切合实际的。解决的办法是: 在尽量保持影像原形的情况下大量削减影像灰度级的取值个数和影像分辨率。因此在计算空间灰度共生矩阵时,在不影响纹理特征的前提下往往先将原影像的灰度级压缩到较小的范围,一般取8级或16级,以便减小共生矩阵的尺寸。

其实上面这么一大堆话,其实就是为了引出一个问题:怎么压缩图像的灰度呢?(根据需要判断是否要压缩.)

在讲之前,先看一个函数:np.digizetize(),如图4所示:

95ab22d3744ba70a0dbc40f7658153f2.png
图4 np.digitize()函数

通过 np.digitize()函数可以对图像进行压缩,代码如下:

import 

bceab5833481890b8052c66a1b7eb03e.png
图5 图像压缩
注:左原图像,右压缩后图像

现在我们可以对一个图像进行压缩,然后求它的灰度共生矩阵啦.

可能有人,求出来有啥用呢?

主要的用途可以进行纹理特征的提取,然后对目标进行识别与分类.


2. 应用

灰度共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征.

灰度共生矩阵主要用于纹理特征的提取,但是,我们一般不直接采用灰度共生矩阵来进行对图像的识别,而是基于灰度共生矩阵构建的统计量作为纹理分类特征.

注:直接采用灰度共生矩阵作为图像的特征,其实也是可以的,不过数据量太大了,比较麻烦而已.
一般是不会这样做的.

那这些基于共生矩阵的统计量又有哪些呢?

灰度共生矩阵(GLCM)的统计方法是20世纪70年代初由R.Haralick等人提出的,Haralick提出了14种基于灰度共生矩阵计算出来的统计量:即:能量对比度均匀性相关性方差和平均和方差和熵差方差差平均差熵相关信息测度以及最大相关系数 .

下面主要说一下具有代表性且常用的四个统计量.

① 角二阶矩(Angular Second Moment, ASM)

角二阶矩又称能量,是图像灰度分布均匀程度纹理粗细的一个度量.

当图像纹理均一规则时,能量值较大;反之灰度共生矩阵的元素相近(当图像的像素随机性比较大,共生矩阵的元素就比较接近),能量值较小.

注:当纹理比较规则时,共生矩阵的元素主要是集中对角线附近.其它元素主要为零.

(Entropy, ENT)

熵度量了图像包含的随机性,表现了图像的复杂程度。当共生矩阵所有值均相等或像素值表现出最大的随机性时,熵最大.

对比度(Contrast)

对比度反应了图像的清晰度和纹理的沟纹深浅. 纹理越清晰反差越大,对比度也就越大.

反差分矩阵(Inverse Differential Moment, IDM)

反差分矩阵又称逆方差,反映了纹理的清晰程度规则程度,纹理清晰、规律性较强、易于描述的,值较大.

大家看到这里,应该都可以清楚的认识到,我们选择的尺度不同,灰度共生矩阵也是不同的,为达到最佳的效果,需要通过实验验证,为了减少角度的影响,我们一般取四个角度( 0°,45°, 90°, 135°), 然后取平均值

3.程序实现

import 

程序运行结果,如图6所示:

bbd37a0983370568b2ec7f8f979159e4.png
图6 运行结果

看到我们所得的这个灰度共生矩阵是四维的,前面256,256是灰度共生矩阵的灰度级别,当然也可根据需要设置,后面(4, 4),代表的是位置(2, 4, 8, 16)与方向( 0°,45°, 90°, 135°)

得到的结果中,行:代表位置,列:代表角度. 为了减少角度的影响,可以求取角度的平均值.

参考:

灰度共生矩阵(GLCM)特征的ENVI与Python提取_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值