python调用skimage计算灰度共生矩阵并提取GLCM的纹理属性

python调⽤skimage计算灰度共⽣矩阵并提取GLCM的纹理属性
郑和宝船
图像处理库scikits-image已经⽀持计算灰度共⽣矩阵和提取GLCM的纹理属性contrast、dissimilarity、homogeneity、ASM、energy、correlation
灰度共⽣矩阵,指的是⼀种通过研究灰度的空间相关特性来描述纹理的常⽤⽅法。1973年Haralick等⼈提出了⽤灰度共⽣矩阵来描述纹理特征。
由于纹理是由灰度分布在空间位置上反复出现⽽形成的,因⽽在图像空间中相隔某距离的两像素之间会存在⼀定的灰度关系,即图像中灰度的空间相关特性。
取图像(N×N)中任意⼀点 (x,y)及偏离它的另⼀点 (x+a,y+b),设该点对的灰度值为 (g1,g2)。令点(x,y) 在整个画⾯上移动,则会得到各种 (g1,g2)值,设灰度值的级数为 k,则(g1,g2) 的组合共有 k 的平⽅种。对于整个画⾯,统计出每⼀种
(g1,g2)值出现的次数,然后排列成⼀个⽅阵,再⽤(g1,g2) 出现的总次数将它们归⼀化为出现的概率P(g1,g2) ,这样的⽅阵称为灰度共⽣矩阵。距离差分值(a,b) 取不同的数值组合,可以得到不同情况下的联合概率矩阵。(a,b) 取值要根据纹理周期分布的特性来选择,对于较细的纹理,选取(1,0)、(1,1)、(2,0)等⼩的差分值。
当 a=1,b=0时,像素对是⽔平的,即0度扫描;当a=0,b=1 时,像素对是垂直的,即90度扫描;当 a=1,b=1时,像素对是右对⾓线的,即45度扫描;当 a=-1,b=1时,像素对是左对⾓线,即135度扫描。
这样,两个象素灰度级同时发⽣的概率,就将 (x,y)的空间坐标转化为“灰度对” (g1,g2)的描述,形成了灰度共⽣矩阵。
灰度共⽣矩阵的特征
对⽐度(contrast)
直接反映了某个像素值及其领域像素值的亮度的对⽐情况。如果偏离对⾓线的元素有较⼤值,即图像亮度值变化很快,则CON会有较⼤取值,这也符合对⽐度的定义。其中 。反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对⽐度越⼤,视觉效果越清晰;反之,对⽐度⼩,则沟纹浅,效果模糊。灰度差即对⽐度⼤的象素对越多,这个值越⼤。灰度公⽣矩阵中远离对⾓线的元素值越⼤,CON越⼤。
ASM 能量(angular second moment)
也即每个矩阵元素的平⽅和。
如果灰度共⽣矩阵中的值集中在某⼀块(⽐如对连续灰度值图像,值集中在对⾓线;对结构化的图像,值集中在偏离对⾓线的位置),则ASM有较⼤值,若G中的值分布较均匀(如噪声严重的图像),则ASM有较⼩的值。
能量是灰度共⽣矩阵元素值的平⽅和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。如果共⽣矩阵的所有值均相等,则ASM值⼩;相反,如果其中⼀些值⼤⽽其它值⼩,则ASM值⼤。当共⽣矩阵中元素集中分布时,此时ASM值⼤。ASM值⼤表明⼀种较均⼀和规则变化的纹理模式。
⾃相关(correlation)
其中
⾃相关反应了图像纹理的⼀致性。如果图像中有⽔平⽅向纹理,则⽔平⽅向矩阵的COR⼤于其余矩阵的COR值。它度量空间灰度共⽣矩阵元素在⾏或列⽅向上的相似程度,因此,相关值⼤⼩反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就⼤;相反,如果矩阵像元值相差很⼤则相关值⼩。
相异性(Dissimilarity)
这⾥的P对应上⾯的G,levels对应k
计算对⽐度时,权重随矩阵元素与对⾓线的距离以指数⽅式增长,如果改为线性增长,则得到相异性。
同质性/逆差距(Homogeneity)
测量图像的局部均匀性,⾮均匀图像的值较低,均匀图像的值较⾼。与对⽐度或相异性相反,同质性的权重随着元素值与对⾓线的距离⽽减⼩,其减⼩⽅式是指数形式的。
能量(Energy)
是灰度共⽣矩阵各元素值的平⽅和,是对图像纹理的灰度变化稳定程度的度量,反应了图像灰度分布均匀程度和纹理粗细度。能量值⼤表明当前纹理是⼀种规则变化较为稳定的纹理。。
好了,下⾯开始开始实现上⾯的内容。通过skimage计算灰度共⽣矩阵并提取上述的六个纹理特征。
scikits-image库提供了两个模块,matrix(image, …[, …])计算灰度共⽣矩
阵,props(P[, prop])计算GLCM的纹理特征。
matrix(image, distances, angles, levels=256, symmetric=False, normed=False)
参数:
image:array_like of uint8
整数型输⼊图像。该图像将强制转换为uint8,因此最⼤值必须⼩于256。
distances:array_like
像素对距离偏移量列表。
angles:array_like
弧度的像素对⾓度列表。
级别:整数,可选
输⼊图像应在[0,levels-1]中包含整数,其中level表⽰所计数的灰度级数(对于8位图像,通常为256)。最⼤值为256。
对称:布尔型,可选
如果为True,则输出矩阵P [:,:,d,theta]是对称的。这是通过忽略值对的顺序来实现的,因此在给定偏移量遇到(i,j)时,将同时累积(i,j)和(j,i)。默认值为False。
标准化(归⼀化):bool,可选
如果为True,则通过除以给定偏移量的累积共现总数,将每个矩阵P [:,:,d,theta]归⼀化。结果
矩阵的元素总和为1。默认值为False。
举个例⼦演⽰⼀下
from skimage.feature import greycomatrix, greycoprops
import numpy as np
image = np.array([[0, 0, 1, 1],
[0, 0, 1, 1],
[0, 2, 2, 2],
博伊斯艺术家[2, 2, 3, 3]], dtype=np.uint8)
#构建了⼀个44的数组
result = greycomatrix(image, [1], [0, np.pi/2], levels=4)#调⽤函数
#第⼀个参数是图像,第⼆个为距离1,第三个是扫描⽅向,这⾥加⼊了两个⽅向,0为向右扫描,np.pi/2,90°扫描即垂直扫描;最后⼀个levels=4即灰度级数。
运⾏这⾏代码,会返回⼀个四维的result结果。即灰度共⽣直⽅图,表⽰形式为p[i,j,d,theta],是灰度级j与灰度级i之间距离为d,⾓度为θ的情况下出现灰度级j的次数。
⽣成的result是⼀个4x4x1x2的数组,因为原始输⼊的image是⼀个44的数组,距离d这⾥只计算了⼀个,⾓度计算了两个,所以是
4x4x1x2
读取⼀下result数组
result[:, :, 0, 0] #距离d为1时,扫描⾓度为0时的result
array([[2, 2, 1, 0],
[0, 2, 0, 0],
[0, 0, 3, 1],
[0, 0, 0, 1]], dtype=uint32)
result[:, :, 0, 1] #距离d为1时,扫描⾓度为90°时的result
array([[3, 0, 2, 0],
[0, 2, 2, 0],
[0, 0, 1, 2],
[0, 0, 0, 0]], dtype=uint32)
这样⼀看难以理解,画了个图以便⼤家理解
图中右边展⽰的是0°向右扫描,下边展⽰的是90°垂直扫描。⽣成的灰度共⽣矩阵⾥⾯的数是出现次数的统计。
尝试距离为2时的结果
result1 = greycomatrix(image,[2],[0, np.pi/2],levels=4)
result1[:, :, 0, 0]
array([[0, 4, 1, 0],
三辊轧管机[0, 0, 0, 0],
[0, 0, 1, 2],
[0, 0, 0, 0]], dtype=uint32)
result1[:, :, 0, 1]
array([[1, 0, 3, 0],
[0, 0, 2, 2],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=uint32)
就画了下0°扫描的(0,1),垂直扫描的⽰意图就不画了,图已经有点乱了。
result2 = greycomatrix(image,[1,2,3,4],[0, np.pi/2,np.pi/4,np.pi*3/4],levels=4)# 距离为1,2,3,4,扫描⽅向为0°⽔平扫
描,90°垂直扫描,45°右对⾓线扫描,135°左对⾓线扫描。
#读取距离4,左对⾓线扫描的结果卖木雕的少年教学设计
result2[:, :, 3, 3]
array([[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=uint32)
计算6个纹理特征
props(P[, prop])
Parameters :
P : ndarraygct 考试
Input array. P is the grey-level co-occurrence histogram for which to compute the specified property. The value P[i,j,d,theta] is the number of times that grey-level j occurs at a distance d and at an angle theta from grey-level i.
prop : {‘contrast’, ‘dissimilarity’, ‘homogeneity’, ‘energy’, ‘correlation’, ‘ASM’}, optional
The property of the GLCM to compute. The default is ‘contrast’.
Returns :
results : 2-D ndarray
2-dimensional array. results[d, a] is the property ‘prop’ for the d’th distance and the a’th angle.
参数:
P:ndarray
输⼊数组。P是⽤于计算指定属性的灰度共⽣直⽅图。值 P [i,j,d,θ]是灰度级j在距灰度级i的距离为d且⾓度为θ的⾓度出现的次数。prop:{“对⽐度”,“相异性”,“同质性”,“能量”,“相关性”,“ ASM”},可选
要计算的GLCM的属性。默认值为“对⽐度”。
返回值:
结果:2-D ndarray
⼆维数组。result [d,a]是第d个距离和第a个⾓度的属性’prop’。
image = np.array([[0, 0, 1, 1],
[0, 0, 1, 1],
[0, 2, 2, 2],
[2, 2, 3, 3]], dtype=np.uint8)
g = greycomatrix(image, [1, 2], [0, np.pi/2], levels=4,
normed=True, symmetric=True)#这⾥计算灰度共⽣矩阵,输出的矩阵P [:,:,d,theta]是对称的,并对结果进⾏了归⼀化contrast = greycoprops(g, ‘contrast’)
contrast
array([[0.58333333, 1. ],
[1.25 , 2.75 ]])
dissimilarity = greycoprops(g, ‘dissimilarity’)
重芳烃
dissimilarity
array([[0.41666667, 0.66666667],
[1. , 1.5 ]])
#greycoprops()不能同时计算这六个特征,只能挨个计算。
这两天因为任务刚接触这个,做了个整理,不⾜之处还请谅解。有错误之处还请指正,谢谢。

本文发布于:2024-09-24 17:15:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/104950.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:灰度   矩阵   图像   纹理   空间   计算   距离   像素
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议