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

【youcans 的 OpenCV 例程 300篇】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,j∣a,b,θ)={(x,y)∣f(x,y)=i,f(x+a,y+b)=j},x,y=0,1...L−1
式中:

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

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

i,j=0,...L−1i,j=0,...L-1i,j=0,...L−1 表示像素的灰度级。灰度级 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=0∑N−1​(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=0∑N−1​−ln(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=0∑N−1​Pjj​(i−j)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=0∑M−1​P(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)

【OpenCV 例程 300篇】231. 特征描述之灰度共生矩阵(GLCM)相关推荐

  1. 【youcans的OpenCV例程300篇】总目录

    版权声明: 转载本系列作品时必须标注以下版权内容: [youcans@qq.com, youcans的OpenCV 例程300篇, https://blog.csdn.net/youcans/cate ...

  2. 【OpenCV 例程 300篇】244. 特征检测之 BRIEF 特征描述

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]244. 特征检测之 BRIEF 特征描述 6.7.1 算法简介 二进制鲁棒独立的特 ...

  3. 【OpenCV 例程 300篇】249. 特征描述之视网膜算法(FREAK)

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]249. 特征检测之视网膜算法(FREAK) 1. FREAK 算法简介 快速视网膜 ...

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

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]241. 尺度不变特征变换(SIFT) 6.4.1 简介 尺度不变特征转换算法(Sc ...

  5. 【OpenCV 例程 300篇】226. 区域特征之紧致度/圆度/偏心率

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]226. 区域特征之紧致度/圆度/偏心率 特征通常是针对于图像中的某个目标而言的. ...

  6. 【OpenCV 例程 300篇】222. 特征提取之弗里曼链码(Freeman chain code)

    OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程 300篇]222. 特征提取之弗里曼链码(Freeman chain code) 目标特征的基本概念 通过图像分割获得多个 ...

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

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]237. 基于主成分提取的方向校正(OpenCV) 主成分分析(Principal ...

  8. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]221.加密马赛克图像处理与解密复原 9. 图像的马赛克处理 马赛克效果是广泛使用的 ...

  9. 【OpenCV 例程300篇】40. 图像分段线性灰度变换

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程300篇]40. 图像分段线性灰度变换 分段线性变换函数可以增强图像各部分的反差,增强感兴趣的灰 ...

最新文章

  1. HTTP协议中的Range和Content-Range
  2. PHP shell_exec()与exec()
  3. 使用密码记录工具keepass来保存密码
  4. Swift 十进制二进制转换 (How to convert a decimal number to binary in Swift)
  5. No transaction aspect-managed TransactionStatus in scope
  6. Windows7睡眠后自动唤醒
  7. 微服务架构工作笔记003---了解认识google Kubernetes 容器管理
  8. Ubuntu安装SublimeText3
  9. 前端开发中一些常用技巧总结
  10. latex 图片整行居中 /centering无效
  11. LINUX创建桌面运行快捷方式
  12. Atitit mysql insert perf enhance 批量插入数据库性能 目录 1.1. 案一:使用ignore关键字 1 2. 异步插入 2 2.1. 其它关键:DELAYED  做为
  13. 【学习笔记】人体姿态识别
  14. mysql64官网下教程_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)
  15. Linux系统查看设备温度,技巧分享 Linux下查看cpu温度
  16. 传统零售加速向新零售演进升级,零售数字化势在必行
  17. 最终幻想7php攻略,最终幻想7图文攻略 PS版FF7全剧情任务攻略(CD1)(6)
  18. light7ui 刷新子页面 js不能加载的问题
  19. Nexus 6p 刷入TWRP和OPENGAPPS
  20. DDL和DML的含义与区别

热门文章

  1. 什么是进销存管理系统?
  2. Web面试题汇总-自用
  3. python使用statsmodels包中的tsa.acf函数计算时间序列数据所有滞后位置个数(级别)的自相关性、tsaplots函数可视化时间序列数据所有滞后位置个数(级别)的自相关性
  4. android多边形拼图源码,【BMPinTu】一款拼图App的demo。多边形凹凸拼图
  5. 矩阵连乘问题算法思想_动态规划-矩阵连乘问题(一)
  6. 基于知识图谱的DNS Query Flood攻击检测研究
  7. Matlab 中保存运行的m文件
  8. GPO:组策略与系统配置
  9. QPBOC规范——GPO流程
  10. 学习DVB知识的疑问与自我解答