对非矩形图像区域使用 skimage
Using skimage for non-rectangular image areas
假设我关注图像的一部分,我想计算非矩形的 GLCM。我该怎么办?我做了一个屏蔽程序,将我不关心的图像部分归零,我只是不知道如何在不考虑图像的归零部分的情况下拍摄这张 "masked" 图像。 .
感谢您的帮助!
如果您能够将零强度值分配给背景像素,则只需丢弃完整图像的 GLCM 的第一行和第一列,即可获得感兴趣区域的 GLCM。这实际上相当于摆脱那些涉及背景像素的共现。
演示
以下代码片段演示了如何从黑色背景上的圆形对象的 GLCM 中提取几个 Haralick 特征:
In [25]: import numpy as np
In [26]: from skimage import io
In [27]: from skimage.feature import greycomatrix, greycoprops
In [28]: img = io.imread('https://i.stack.imgur.com/6ESoP.png')
In [29]: glcm = greycomatrix(img,
...: distances=[1, 2],
...: angles=[0, np.pi/4, np.pi/2, 3*np.pi/4],
...: symmetric=True,
...: normed=False)
...:
In [30]: glcm_br = glcm[1:, 1:, :, :]
In [31]: glcm_br_norm = np.true_divide(glcm_br, glcm_br.sum(axis=(0, 1)))
In [32]: np.set_printoptions(threshold=1000, precision=4)
In [33]: props = ['energy', 'homogeneity']
In [34]: feats_br = np.hstack([greycoprops(glcm_br_norm, p).ravel() for p in props])
In [35]: feats_br
Out[35]:
array([ 0.0193, 0.0156, 0.0173, 0.0166, 0.0151, 0.0156, 0.0136,
0.0166, 0.1255, 0.0788, 0.0978, 0.0929, 0.0782, 0.0788,
0.0545, 0.0929])
请注意,在去掉全图GLCM的第一行和第一列后,必须对GLCM进行归一化。
注:后缀_br
代表背景移除。
假设我关注图像的一部分,我想计算非矩形的 GLCM。我该怎么办?我做了一个屏蔽程序,将我不关心的图像部分归零,我只是不知道如何在不考虑图像的归零部分的情况下拍摄这张 "masked" 图像。 .
感谢您的帮助!
如果您能够将零强度值分配给背景像素,则只需丢弃完整图像的 GLCM 的第一行和第一列,即可获得感兴趣区域的 GLCM。这实际上相当于摆脱那些涉及背景像素的共现。
演示
以下代码片段演示了如何从黑色背景上的圆形对象的 GLCM 中提取几个 Haralick 特征:
In [25]: import numpy as np
In [26]: from skimage import io
In [27]: from skimage.feature import greycomatrix, greycoprops
In [28]: img = io.imread('https://i.stack.imgur.com/6ESoP.png')
In [29]: glcm = greycomatrix(img,
...: distances=[1, 2],
...: angles=[0, np.pi/4, np.pi/2, 3*np.pi/4],
...: symmetric=True,
...: normed=False)
...:
In [30]: glcm_br = glcm[1:, 1:, :, :]
In [31]: glcm_br_norm = np.true_divide(glcm_br, glcm_br.sum(axis=(0, 1)))
In [32]: np.set_printoptions(threshold=1000, precision=4)
In [33]: props = ['energy', 'homogeneity']
In [34]: feats_br = np.hstack([greycoprops(glcm_br_norm, p).ravel() for p in props])
In [35]: feats_br
Out[35]:
array([ 0.0193, 0.0156, 0.0173, 0.0166, 0.0151, 0.0156, 0.0136,
0.0166, 0.1255, 0.0788, 0.0978, 0.0929, 0.0782, 0.0788,
0.0545, 0.0929])
请注意,在去掉全图GLCM的第一行和第一列后,必须对GLCM进行归一化。
注:后缀_br
代表背景移除。