假設我關注的是我想要計算非矩形GLCM圖像的一部分。我應該怎麼做呢?我做了一個遮罩程序,將圖像中我不關心的部分清零,我不知道如何在不考慮圖像的歸零部分的情況下拍攝這個「蒙版」圖像...對非矩形圖像區域使用滑動圖像
感謝您的幫助!
假設我關注的是我想要計算非矩形GLCM圖像的一部分。我應該怎麼做呢?我做了一個遮罩程序,將圖像中我不關心的部分清零,我不知道如何在不考慮圖像的歸零部分的情況下拍攝這個「蒙版」圖像...對非矩形圖像區域使用滑動圖像
感謝您的幫助!
如果您能夠將零強度值分配給背景像素,您可以通過簡單地丟棄完整圖像的GLCM的第一行和第一列來獲得感興趣區域的GLCM。這實際上等同於擺脫那些涉及背景像素的共現。
下面的代碼演示瞭如何提取一對夫婦Haralick從圓形對象在黑色背景上的GLCMs特點:
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
代表背景刪除。
謝謝!就我所知,這並不是以某種方式「規範化」矩陣?我只關心在一幅圖像中是否有比另一幅更大的蒙版區域,第一行/列會使其他圖像偏斜,並且我的測量結果不準確。這有意義嗎?對不起,如果不清楚 –
是的,絕對。我編輯了我的答案以修復代碼。感謝您發現這一點。 – Tonechas
一個可能的解決方案將包括使用mahotas庫來計算GLCM功能,如[這裏]所述(https://stackoverflow.com/questions/40703086/python-taking-the-glcm-of-a-non-rectangular-地區/ 42837786#42837786) – Tonechas