ほとんどの画像分析作業にskimage
ライブラリを使用しています。
RGB画像があり、texture
、entropy
、energy
、homogeneity
などのcontrast
機能を画像から抽出するつもりです。
以下は私が実行しているステップです:
from skimage import io, color, feature
from skimage.filters import rank
rgbImg = io.imread(imgFlNm)
grayImg = color.rgb2gray(rgbImg)
print(grayImg.shape) # (667,1000), a 2 dimensional grayscale image
glcm = feature.greycomatrix(grayImg, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4])
print(glcm.shape) # (256, 256, 1, 4)
rank.entropy(glcm, disk(5)) # throws an error since entropy expects a 2-D array in its arguments
rank.entropy(grayImg, disk(5)) # given an output.
私の質問は、グレースケール画像から計算されたエントロピーは(直接)GLCMから抽出されたエントロピー機能(テクスチャ機能)と同じですか?
そうでない場合、画像からすべてのテクスチャ機能を抽出する正しい方法は何ですか?
注:私はすでに言及しました:
グレイスケール画像から計算されたエントロピーは(直接)GLCMから抽出されたエントロピー機能(テクスチャ機能)と同じですか?
いいえ、これら2つのエントロピーはかなり異なります。
skimage.filters.rank.entropy(grayImg, disk(5))
は、grayImg
と同じサイズの配列を生成します。これには、対応するピクセルを中心とし、半径5ピクセルの円形ディスクで計算された画像全体のローカルエントロピーが含まれます。 Entropy(情報理論) を見て、エントロピーの計算方法を確認してください。この配列の値は、セグメンテーションに役立ちます(エントロピーベースのオブジェクト検出の例を表示するには、 このリンク に従ってください)。画像のエントロピーを単一の(スカラー)値で記述することが目的の場合は、skimage.measure.shannon_entropy(grayImg)
を使用できます。この関数は、基本的に次の数式を画像全体に適用します。skimage.measure.shannon_entropy
に渡す必要があります。*この投稿が最後に編集された時点では、scikit-imageの最新バージョンは0.13.1です。
そうでない場合、画像からすべてのテクスチャ機能を抽出する正しい方法は何ですか?
画像のテクスチャを記述するためのさまざまな機能があります。たとえば、ローカルバイナリパターン、ガボールフィルター、ウェーブレット、ローのマスクなどです。 Haralickの [〜#〜] glcm [〜#〜] は、最も人気のあるテクスチャ記述子の1つです。 GLCM機能を使用して画像のテクスチャを記述する1つの可能なアプローチは、さまざまなオフセット(各オフセットは距離と角度によって定義されます)のGLCMを計算し、各GLCMからさまざまなプロパティを抽出することです。
たとえば、3つの距離(1、2、3ピクセル)、4つの角度(0、45、90、135度)、2つのプロパティ(エネルギーと均一性)について考えてみましょう。これは になります オフセット(したがって12のGLCM)と次元の特徴ベクトル 。これがコードです:
import numpy as np
from skimage import io, color, img_as_ubyte
from skimage.feature import greycomatrix, greycoprops
from sklearn.metrics.cluster import entropy
rgbImg = io.imread('https://i.stack.imgur.com/1xDvJ.jpg')
grayImg = img_as_ubyte(color.rgb2gray(rgbImg))
distances = [1, 2, 3]
angles = [0, np.pi/4, np.pi/2, 3*np.pi/4]
properties = ['energy', 'homogeneity']
glcm = greycomatrix(grayImg,
distances=distances,
angles=angles,
symmetric=True,
normed=True)
feats = np.hstack([greycoprops(glcm, prop).ravel() for prop in properties])
この画像を使用して得られた結果:
:
In [56]: entropy(grayImg)
Out[56]: 5.3864158185167534
In [57]: np.set_printoptions(precision=4)
In [58]: print(feats)
[ 0.026 0.0207 0.0237 0.0206 0.0201 0.0207 0.018 0.0206 0.0173
0.016 0.0157 0.016 0.3185 0.2433 0.2977 0.2389 0.2219 0.2433
0.1926 0.2389 0.1751 0.1598 0.1491 0.1565]
from skimage.feature import greycomatrix, greycoprops
dis = (greycoprops(glcm, 'dissimilarity'))
plt.hist(dis.ravel(), normed=True, bins=256, range=(0, 30),facecolor='0.5');plt.show()