画像の一部で、矩形ではないGLCMを計算したいと考えています。これについてどうすればいいですか?私は気にしないイメージの部分をゼロにするマスキング手順を作成しました。イメージのゼロ部分を考慮せずにこの「マスクされた」イメージをどのように取るかわかりません。非矩形の画像領域にスキマージを使用する
ご協力いただきありがとうございます。
画像の一部で、矩形ではないGLCMを計算したいと考えています。これについてどうすればいいですか?私は気にしないイメージの部分をゼロにするマスキング手順を作成しました。イメージのゼロ部分を考慮せずにこの「マスクされた」イメージをどのように取るかわかりません。非矩形の画像領域にスキマージを使用する
ご協力いただきありがとうございます。
輝度値をバックグラウンドピクセルに割り当てることができる場合は、フルイメージのGLCMの最初の行と最初の列を単に破棄するだけで、関心領域のGLCMを取得できます。これは、実際に背景ピクセルを含む共起を取り除くことと同じです。
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])
ことに注意してください:
次のスニペットは、Haralickのカップルは、黒の背景に円形のオブジェクトのGLCMsから特徴を抽出する方法を示していますGLCMは、フルイメージのGLCMの第1行および第1列を取り除いた後に正規化されなければならない。
注:接尾辞_br
は、のバックグラウンドを削除したものです。です。
ありがとう!ちょうど私は明らかです、これは何らかの方法で行列を「正規化」しませんか?ある画像にマスクされた領域が他の画像より大きくなっていると、最初の行/列が他の画像を歪ませてしまい、測定値が悪くなります。これは理にかなっていますか?申し訳ありませんがわからない場合 –
はい、絶対に。私はコードを修正するために私の答えを編集しました。これを見つけていただきありがとうございます。 – Tonechas
可能な解決策の1つは、mahotasライブラリを使用して[ここに記載されている] GLCM機能を計算することです(https://stackoverflow.com/questions/40703086/python-taking-the-glcm-of-a-non-rectangular-地域/ 42837786#42837786) – Tonechas