2017-06-08 15 views
1

画像の一部で、矩形ではないGLCMを計算したいと考えています。これについてどうすればいいですか?私は気にしないイメージの部分をゼロにするマスキング手順を作成しました。イメージのゼロ部分を考慮せずにこの「マスクされた」イメージをどのように取るかわかりません。非矩形の画像領域にスキマージを使用する

ご協力いただきありがとうございます。

+0

可能な解決策の1つは、mahotasライブラリを使用して[ここに記載されている] GLCM機能を計算することです(https://stackoverflow.com/questions/40703086/python-taking-the-glcm-of-a-non-rectangular-地域/ 42837786#42837786) – Tonechas

答えて

1

輝度値をバックグラウンドピクセルに割り当てることができる場合は、フルイメージのGLCMの最初の行と最初の列を単に破棄するだけで、関心領域のGLCMを取得できます。これは、実際に背景ピクセルを含む共起を取り除くことと同じです。

circular object

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は、のバックグラウンドを削除したものです。です。

+0

ありがとう!ちょうど私は明らかです、これは何らかの方法で行列を「正規化」しませんか?ある画像にマスクされた領域が他の画像より大きくなっていると、最初の行/列が他の画像を歪ませてしまい、測定値が悪くなります。これは理にかなっていますか?申し訳ありませんがわからない場合 –

+0

はい、絶対に。私はコードを修正するために私の答えを編集しました。これを見つけていただきありがとうございます。 – Tonechas

関連する問題