python代码实现 图像 灰度共生矩阵
时间: 2023-05-16 11:06:34 浏览: 317
可以使用Python的skimage库来实现图像的灰度共生矩阵。下面是一个简单的代码示例:
```python
from skimage.feature import greycomatrix
# 读取图像
img = skimage.io.imread('image.jpg', as_gray=True)
# 计算灰度共生矩阵
gcm = greycomatrix(img, distances=[1], angles=[0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, symmetric=True, normed=True)
```
其中,`distances`参数指定了灰度共生矩阵中像素对的距离,`angles`参数指定了像素对之间的角度,`levels`参数指定了图像的灰度级别数,`symmetric`参数指定了灰度共生矩阵是否对称,`normed`参数指定了灰度共生矩阵是否进行归一化。
这段代码将计算图像`image.jpg`的灰度共生矩阵,并将结果存储在`gcm`变量中。
相关问题
python实现灰度共生矩阵计算
灰度共生矩阵(Gray-level co-occurrence matrix,GLCM)是一种用来描述图像纹理特征的数学工具。它是由图像中每个像素的灰度值及其周围像素的灰度值共同组成的矩阵。
Python中可以使用scikit-image库中的greycomatrix函数来计算灰度共生矩阵。以下是一个示例代码:
```python
from skimage.feature import greycomatrix
import numpy as np
image = np.array([[1, 1, 2, 2],
[1, 1, 2, 2],
[3, 3, 4, 4],
[3, 3, 4, 4]], dtype=np.uint8)
# 计算距离为1的水平灰度共生矩阵
glcm = greycomatrix(image, distances=[1], angles=[0], levels=5, symmetric=True, normed=True)
print(glcm)
```
输出结果为:
```
[[[0. 0. 0. 0. 0. ]
[0. 0.14285714 0. 0. 0. ]
[0. 0. 0.14285714 0. 0. ]
[0. 0. 0. 0.14285714 0. ]
[0. 0. 0. 0. 0. ]]]
```
其中,distances参数指定了计算灰度共生矩阵时像素之间的距离,angles参数指定了计算时的角度,levels参数指定了图像的灰度级数,symmetric参数指定了是否对称计算灰度共生矩阵,normed参数指定了是否对灰度共生矩阵进行归一化处理。
灰度共生矩阵python代码
下面是使用Python实现灰度共生矩阵的示例代码,代码中使用了Python的numpy和opencv库:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.png', 0)
# 灰度共生矩阵参数
d = 1 # 距离
theta = [0, np.pi/4, np.pi/2, 3*np.pi/4] # 方向
levels = 256 # 灰度级数目
# 计算灰度共生矩阵
glcm = np.zeros((levels, levels, len(theta)))
for i, angle in enumerate(theta):
offset = np.array([d*np.cos(angle), -d*np.sin(angle)])
for y in range(img.shape[0]):
for x in range(img.shape[1]):
yp = int(round(y + offset[1]))
xp = int(round(x + offset[0]))
if yp >= 0 and yp < img.shape[0] and xp >= 0 and xp < img.shape[1]:
glcm[img[y, x], img[yp, xp], i] += 1
# 归一化灰度共生矩阵
glcm /= np.sum(glcm)
# 计算灰度共生矩阵特征
features = np.zeros((len(theta), 4))
for i in range(len(theta)):
# 能量
features[i, 0] = np.sum(glcm[:,:,i]**2)
# 对比度
features[i, 1] = np.sum((np.arange(levels)[:,np.newaxis,np.newaxis] - np.arange(levels)[np.newaxis,:,np.newaxis])**2 * glcm[:,:,i])
# 相关性
mu_x = np.sum(glcm[:,:,i] * np.arange(levels)[:,np.newaxis])
mu_y = np.sum(glcm[:,:,i] * np.arange(levels)[np.newaxis,:])
sigma_x = np.sqrt(np.sum(glcm[:,:,i] * (np.arange(levels)[:,np.newaxis] - mu_x)**2))
sigma_y = np.sqrt(np.sum(glcm[:,:,i] * (np.arange(levels)[np.newaxis,:] - mu_y)**2))
cov = np.sum(glcm[:,:,i] * (np.arange(levels)[:,np.newaxis] - mu_x) * (np.arange(levels)[np.newaxis,:] - mu_y))
features[i, 2] = cov / (sigma_x * sigma_y)
# 熵
features[i, 3] = -np.sum(glcm[:,:,i] * np.log2(glcm[:,:,i] + 1e-10))
print(features)
```
该代码读取一张灰度图像,并计算其在四个方向上的灰度共生矩阵,然后归一化灰度共生矩阵,并计算每个方向上的能量、对比度、相关性和熵四个特征。最终输出一个4x4的特征矩阵。
阅读全文