【OpenCV 例程200篇】231. 特征描述之灰度共生矩阵(GLCM)

『youcans 的 OpenCV 例程200篇 - 总目录』


【youcans 的 OpenCV 例程200篇】231. 特征描述之灰度共生矩阵(GLCM)


4.2.4 灰度共生矩阵(GLCM)

灰度共生矩阵(Gray level co-occurrence matrix,GLCM)是特征检测与分析的重要方法,在纹理分析、特征分类、图像质量评价中应用广泛 。

灰度共生矩阵是一种典型的统计方法,描述空间上具有某种分布规律的灰度值组合出现的概率。

图像的像素具有不同的灰度级,灰度共生矩阵表示不同灰度组合同时出现的频率。简单地说,灰度共生矩阵反映灰度图像中某种形状的像素对在整个图像中出现的次数

灰度共生矩阵的定义是,从灰度为 iii 的像素点出发,距离 (a,b)(a,b)(a,b) 的另一像素点 (x+a,y+b)(x+a,y+b)(x+a,y+b) 的灰度为 jjj 的概率。所有的估计值表示为矩阵矩式,称为灰度共生矩阵。

灰度共生矩阵在点 (x,y) 处的值,表示了特定灰度值组合在图像中出现的频次:
P(i,j∣a,b,θ)={(x,y)∣f(x,y)=i,f(x+a,y+b)=j},x,y=0,1...L−1P(i,j|a,b,\theta) = \{ (x,y)|f(x,y)=i,f(x+a,y+b)=j \}, \quad x,y =0,1...L-1 P(i,ja,b,θ)={(x,y)f(x,y)=i,f(x+a,y+b)=j},x,y=0,1...L1
式中:

a,ba, ba,b 为距离差分值,也称相邻间隔、偏移量,要根据纹理周期分布的特性来选择,无特性参数时取 1(像素);

θ\thetaθ 为扫描方向,通常选择 0o、45o、90o、135o0^o、45^o、90^o、135^o0o45o90o135o ,对应以水平、垂直和左右对角线方向扫描像素对组合;

i,j=0,...L−1i,j=0,...L-1i,j=0,...L1 表示像素的灰度级。灰度级 L=256 时即为灰度值,也可以取其它灰度级如 L=8,16。共生矩阵有方向和步长的组合,是一个稀疏矩阵,灰度级划分常常减少到8级。显然,灰度共生矩阵的尺寸为 L*L,而与图像尺寸无关。

例如,取 a=1,b=1,θ=0oa=1, b=1, \theta=0^oa=1,b=1,θ=0o 时,P(1,1)P(1,1)P(1,1) 是水平相邻像素对的灰度级为 (1,1) 的组合数量,P(2,8)P(2,8)P(2,8) 是水平相邻像素对的灰度级为 (2,8) 的组合数量,P(i,j)P(i,j)P(i,j) 是水平相邻像素对的灰度级为 (i,j) 的组合数量。

也就是说,灰度共生矩阵中点 (i,j) 的值,就是灰度值为 i,j 的联合概率密度。因此,灰度共生矩阵能反映出图象灰度关于方向、相邻间隔、变化幅度的综合信息,是分析图象的局部模式和它们排列规则的基础。

粗纹理的区域,像素对趋于具有相同的灰度,灰度共生矩阵对角线上的数值较大;细纹理的区域,对角线上的数值相对较小,对角线两侧的值相对较大。

灰度共生矩阵的数据量很大,一般不直接用它来描述纹理特征,而是构建一些统计量作为纹理分类特征。例如,能量、熵、对比度、均匀性、相关性、方差等。

(1)能量(Energy), 是灰度共生矩阵元素值的平方和,反映图像灰度分布均匀程度和纹理粗细。ASM值大表明一种较均一和规则变化的纹理模式。
Energy=∑i,j=0N−1(Pij)2Energy = \sum ^{N-1} _{i,j=0} (P_{ij})^2 Energy=i,j=0N1(Pij)2

(2)熵(Entropy),是图像所具有的信息量的度量,反映图像中纹理的非均匀程度或复杂程度。共生矩阵中的元素分布越分散,随机性越大,熵值就越大。
Entropy=∑i,j=0N−1−ln(Pij)PijEntropy = \sum ^{N-1} _{i,j=0} -ln(P_{ij})P_{ij} Entropy=i,j=0N1ln(Pij)Pij

(3)对比度(Contrast),度量灰度共生矩阵的局部变化,反映了图像的清晰度和纹理沟纹深浅的程度。纹理的沟纹越深,对比度越大,视觉效果越清晰。
Contrast=∑i,j=0N−1Pjj(i−j)2Contrast = \sum ^{N-1} _{i,j=0} P_{jj}(i-j)^2 Contrast=i,j=0N1Pjj(ij)2

(4)相关性(Correlation),度量灰度共生矩阵在行或列方向上的相似程度, 反映了图像中局部灰度相关性 。如果图像具有水平方向的纹理,则水平方向的相关性就会显著地大于其它方向的相关性。
Correlation=∑i,j=0M−1P(i,j)(i−μ)(j−μ)σ2Correlation = \sum_{i,j=0}^{M-1} P(i,j)\frac{(i-\mu)(j-\mu)}{\sigma ^2} Correlation=i,j=0M1P(i,j)σ2(iμ)(jμ)

(5)反差分矩阵(Inverse Differential Moment, IDM),反映了纹理的清晰程度和规则程度。

(6)同质性(Homogeneity),反映了图像纹理的同质性,度量图像纹理局部变化的程度。


例程 14.11:特征描述之灰度共生矩阵(skimage)

skimage 的特征提取库 skimage.feature 提供了函数 greycomatrix 和 greycoprops,可以 计算灰度共生矩阵并提取特征统计量 。

函数说明:

skimage.feature.graycomatrix(image, distances, angles, levels=256, symmetric=False, normed=False)
skimage.feature.graycoprops(P[, prop])

参数说明:

  • image:整型单通道图像,推荐使用 uint8 灰度图像
  • distances:像素对的距离偏移量的列表,计算列表中每个偏移量的 GLCM
  • angles:像素对扫描角度(弧度)列表,计算列表中每个角度值的 GLCM
  • levels:灰度级,默认值为 256
  • symmetric:对称性选项,默认值 False 表示将像素对 (i,j) 与 (j,i) 分别计算,True 表示忽略像素对顺序,将 (i,j) 与 (j,i) 视为相同
  • normed:归一化选项,默认值 False,True 表示对矩阵归一化。
  • prop:元组,灰度共生矩阵 P 的特征统计量, 包括:对比度 ‘contrast’、相异性 ‘dissimilarity’、同质性 ‘homogeneity’、能量 ‘energy’、相关性 ‘correlation’、能量的平方 ‘ASM’}
  • 返回值是 4维数组,即不同偏移量、不同角度的 GLCM。P[i,j,d,θ]P[i,j,d,\theta]P[i,j,d,θ] 是灰度 j 在偏移量 d、角度 θ\thetaθ 处出现灰度 i 的次数。

    # 14.11 特征描述之灰度共生矩阵 (skimage)from skimage.feature import greycomatrix, greycopropsimg = cv2.imread("../images/fabric1.png", flags=1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度图像height, width = gray.shapetable16 = np.array([(i//16) for i in range(256)]).astype("uint8")  # 16 levelsgray16 = cv2.LUT(gray, table16)  # 灰度级压缩为 [0,15]# 计算灰度共生矩阵 GLCMdist = [1, 4]  # 计算 2 个距离偏移量 [1, 2]degree = [0, np.pi/4, np.pi/2, np.pi*3/4]  # 计算 4 个方向glcm = greycomatrix(gray16, dist, degree, levels=16)  # 灰度级 L=16print(glcm.shape)  # (16,16,2,4)# 由灰度共生矩阵 GLCM 计算特征统计量for prop in ['contrast', 'dissimilarity','homogeneity', 'energy', 'correlation', 'ASM']:feature= greycoprops(glcm, prop).round(4)  # (2,4)print("{}: {}".format(prop, feature))plt.figure(figsize=(9, 6))plt.suptitle("GLCM by skimage, youcans")for i in range(len(dist)):for j in range(len(degree)):plt.subplot(2,4,i*4+j+1), plt.axis('off')plt.title(r"d={},$\theta$={:.2f}".format(dist[i], degree[j]))plt.imshow(glcm[:,:,i,j], 'gray')plt.tight_layout()plt.show()

运行结果:

(16, 16, 2, 4)
contrast: [[ 4.5689 3.8755 1.7764 7.0276], [12.2668 12.6184 8.0537 13.614 ]]
dissimilarity: [[1.3346 1.3228 0.8727 1.7466], [2.3169 2.4697 1.9752 2.5845]]
homogeneity: [[0.5843 0.5477 0.6474 0.5072], [0.4539 0.4051 0.4422 0.3948]]
energy: [[0.1262 0.1186 0.1388 0.1103], [0.1003 0.0936 0.0997 0.0907]]
correlation: [[0.8558 0.8778 0.9439 0.7783], [0.6133 0.6031 0.7465 0.5717]]
ASM: [[0.0159 0.0141 0.0193 0.0122], [0.0101 0.0088 0.0099 0.0082]]


在这里插入图片描述


【本节完】

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125693533)
Copyright 2022 youcans, XUPT
Crated:2022-7-9

227. 特征描述之 LBP 纹理特征算子
229. 特征描述之 LBP 算子比较(skimage)
231. 特征描述之 灰度共生矩阵(GLCM)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle11 处理器数,11G AWR中%Total CPU与%Busy CPU指标的疑问

ODM FINDING:FROM http://www.os2ora.com/how-to-analyze-awr-report-1/ 推荐 kaya 的这篇文章引用如下:如果关注数据库的性能,那么当拿到一份AWR报告的时候,最想知道的第一件事情可能就是系统资源的利用情况了,而首当其冲的&am…

【OpenCV 例程200篇】237. 基于主成分提取的方向校正(OpenCV)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】237. 基于主成分提取的方向校正(OpenCV) 主成分分析(Principal Components Analysis,PCA)是一种基于统计的数据降维方法,又称主…

swoole 捕捉php错误,swoole怎么处理错误

在协程编程中可直接使用try/catch处理异常。但必须在协程内捕获,不得跨协程捕获异常。不仅是应用层throw的Exception,底层的一些错误也是可以被捕获的,如function、class、method不存在下面的代码中,try/catch和throw在不同的协程…

【OpenCV 例程200篇】235. 特征提取之主成分分析(sklearn)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】235. 特征提取之主成分分析(sklearn) 特征提取是指从原始特征中通过数学变换得到一组新的特征,以降低特征维数,消除相关性,减少无用信息…

Linux 进程资源分配,linux 进程管理和内存分配

1、进程相关概念进程:正在运行中的程序内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等Process:运行中的程序的一个副本,是被载入内存的一个指令集合进程 ID(Process ID,PID)号码被用来标记各…

【OpenCV 例程300篇】234. 特征提取之主成分分析(PCA)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程300篇】234. 特征提取之主成分分析(PCA) 5.1 特征提取的方法 初步获取的图像特征维数通常很大,而且往往包含一定的无关或冗余特征。特征提取是指从原始特征中通过数学变…

Java并发编程基础

线程的简介 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 为什么要使用多线…

【OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV) 文章目录【youcans 的 OpenCV 例程200篇】236. 特征提取之主成分分析(OpenCV)5.2 主成分分析的数学方法5.4 OpenC…

linux 访问共享内存,Linux下的共享内存(03)---通过指针访问共享内存中的数据...

环境:Vmware Workstation;CentOS-6.4-x86_64说明:1、将共享内存挂载至进程:void *shmat(int shmid, const void *shmaddr,int shmflg);参数shmid是要附加的共享内存区标示符。总是把参数shmaddr设为0。参数shmflg可以为SHM_RDON…

Java中锁的使用和实现

首先,我们要了解一个概念,JAVA中的锁到底是什么呢? 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 Lock接口 在Java SE 5之后,并发包中新增了Lock接口&am…

【OpenCV 例程200篇】225. 特征提取之傅里叶描述子

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】225. 特征提取之傅里叶描述子 目标特征的基本概念 通过图像分割获得多个区域,得到区域内的像素集合或区域边界像素集合。我们把感兴趣的人或物称为目标,目标所处的区域就是目…

【OpenCV 例程300篇】238. OpenCV 中的 Harris 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】238. OpenCV 中的 Harris 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测&…

基础线性规划实现(matlab,lingo)

目录 一、本次所需解的问题 二、matlab解题 1)语法 2)数学思维 3)matlab解题 运行结果: 三、lingo解题 lingo解题如下: 运行结果: 最后: 一、本次所需解的问题 需解出下面该线性规划问…

cwntos linux kde桌面,Centos如何安装KDE的桌面

其实KDE其实在初次安装系统的时候就可以选择,我下面是进入系统后的安装方法:第一步:检查KDE首先查看自己是否安装了KDE# yum grouplist在grouplist的输出结果中的“Installed Groups:”部分中,如果你能找到“X Window System”和“…

【OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix) 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界…

基础线性规划实现---python

目录 一、问题 何为线性规划问题: 二、python进行求解 1.通过观察matlab解线性规划步骤进行求解 2.python求解步骤 1)求解用到的模块(scipy 和 numpy): 2)对 max z2x13x2-5x3 该问题确定c如下&…

【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测…

多元统计分析1

第一章 多元正态分布 文章目录 1.1 多元分布的基本概念 1.1.1 随机向量 1.1.2 分布函数与密度函数 联合分布函数: 联合密度函数: 条件密度函数: 分量的独立性: 1.1.3 随机向量的数字特征 1.随机向量的均值 2、随机…

Java并发容器和框架

ConcurrentHashMap 我们为什么要使用 ConcurrentHashMap呢? 原因有三: 并发编程中HashMap会导致死循环;HashTable效率又非常低;ConcurrentHashMap的锁分段技术可有效提升并发访问率。在并发编程使用HashMap会导致死循环。 在多线…

【OpenCV 例程 300篇】241. 尺度不变特征变换(SIFT)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】241. 尺度不变特征变换(SIFT) 6.4.1 简介 尺度不变特征转换算法(Scale-invariant feature transform,SIFT)是图像处理中经典的局部特征描…