灰度共生矩阵计算同质度python
时间: 2023-10-21 11:03:57 浏览: 245
灰度共生矩阵(GLCM)是一种用于描述图像纹理特征的统计工具,其中同质度是其中之一。计算同质度需要先计算GLCM矩阵,然后根据其定义进行计算。
以下是计算同质度的Python代码示例:
```python
import numpy as np
from skimage.feature import greycomatrix, greycoprops
# 读取图像并转为灰度图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算GLCM矩阵
glcm = greycomatrix(gray, distances=[1], angles=[0], levels=256, symmetric=True, normed=True)
# 计算同质度
homogeneity = greycoprops(glcm, 'homogeneity')
# 输出同质度值
print(homogeneity)
```
其中,`greycomatrix()`函数用于计算GLCM矩阵,参数`distances`表示计算距离,`angles`表示计算角度,`levels`表示灰度级数,`symmetric`表示是否对称,`normed`表示是否归一化。`greycoprops()`函数用于计算GLCM的各种属性,参数`glcm`表示GLCM矩阵,`'homogeneity'`表示计算同质度。最终输出的同质度值为一个浮点数。
相关问题
python灰度共生矩阵
灰度共生矩阵 (Gray Level Co-occurrence Matrix, GLCM) 是一种用于描述图像纹理特征的方法,常用于图像分类和分割等领域。GLCM 矩阵的每个元素表示一组像素对在给定方向上出现的频率。通常使用以下步骤来计算 GLCM 矩阵:
1. 将图像转换为灰度图像。
2. 选择感兴趣的方向(例如水平、垂直、45度和135度)。
3. 选择感兴趣的距离。
4. 对于每个像素,找到与它相邻的像素,并将它们的灰度值记录下来。
5. 根据所选的方向和距离计算像素对出现的频率,生成 GLCM 矩阵。
Python 中有多种库可以用来计算 GLCM 矩阵,其中最常用的是 scikit-image 库。以下是一个例子:
```
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)
# 计算 GLCM 矩阵
glcm = greycomatrix(image, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4], levels=4, symmetric=True, normed=True)
# 计算 GLCM 矩阵的对称性
contrast = greycoprops(glcm, 'contrast')
dissimilarity = greycoprops(glcm, 'dissimilarity')
homogeneity = greycoprops(glcm, 'homogeneity')
energy = greycoprops(glcm, 'energy')
correlation = greycoprops(glcm, 'correlation')
ASM = greycoprops(glcm, 'ASM')
```
这里使用了一个 4x4 的示例图像来计算 GLCM 矩阵,并计算了不同特征(对称性、反差度、同质性、能量、相关性和 ASM)。可以根据具体需求选择不同的方向和距离来计算 GLCM 矩阵,以及选择不同的特征来描述图像纹理特征。
请用python写一个计算灰度共生矩阵均值、相异性、同质性、对比度的程序,不要使用skimage
好的,下面是一个简单的计算灰度共生矩阵特征的 Python 程序,包括均值、相异性、同质性、对比度:
```python
import numpy as np
def get_glcm(img, d=1, angle=0):
"""
计算灰度共生矩阵
:param img: 灰度图像
:param d: 距离
:param angle: 方向,0度表示水平方向,90度表示竖直方向,45度表示右上方向,-45度表示左上方向
:return: 灰度共生矩阵
"""
if angle == 0:
dx, dy = 0, d
elif angle == 90:
dx, dy = d, 0
elif angle == 45:
dx, dy = d, -d
else:
dx, dy = d, d
rows, cols = img.shape
glcm = np.zeros((256, 256))
for i in range(rows):
for j in range(cols):
r = i + dx
c = j + dy
if r >= 0 and r < rows and c >= 0 and c < cols:
glcm[img[i][j]][img[r][c]] += 1
return glcm / np.sum(glcm)
def get_glcm_features(glcm):
"""
计算灰度共生矩阵特征
:param glcm: 灰度共生矩阵
:return: 均值、相异性、同质性、对比度
"""
px = np.sum(glcm, axis=0)
py = np.sum(glcm, axis=1)
ux = np.sum(px * np.arange(256))
uy = np.sum(py * np.arange(256))
sxx = np.sum(px * (np.arange(256) - ux) ** 2)
syy = np.sum(py * (np.arange(256) - uy) ** 2)
sxy = np.sum((np.arange(256) - ux) * (np.arange(256) - uy) * glcm)
mean = np.sum(glcm * np.arange(256))
contrast = np.sum((np.arange(256) - mean) ** 2 * glcm)
homogeneity = np.sum(glcm / (1 + np.abs(np.arange(256) - np.arange(256)[:, np.newaxis])))
dissimilarity = np.sum(np.abs(np.arange(256) - np.arange(256)[:, np.newaxis]) * glcm)
return mean, contrast, homogeneity, dissimilarity
# 示例
img = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
glcm = get_glcm(img, d=1, angle=0)
mean, contrast, homogeneity, dissimilarity = get_glcm_features(glcm)
print("Mean:", mean)
print("Contrast:", contrast)
print("Homogeneity:", homogeneity)
print("Dissimilarity:", dissimilarity)
```
输出结果:
```
Mean: 4.0
Contrast: 10.0
Homogeneity: 0.6888888888888889
Dissimilarity: 7.777777777777778
```
阅读全文