web-dev-qa-db-ja.com

Scikit-Imageライブラリを使用してPythonでRGB画像から緑のチャネルを抽出する方法は?

私は画像処理用のPythonのscikit-image(skimage)ライブラリに非常に新しいです(数分前に開始されました!)。imreadを使用してnumpy.ndarray内の画像ファイル。配列は3次元で、3番目の次元のサイズは3です(つまり、画像の赤、緑、青の各コンポーネントに対して1つ)。

rgb_image = imread("input_rgb_image.jpg")
rgb_image.shape # gives (1411L, 1411L, 3L)

私は緑のチャネルを次のように抽出しようとしました:

green_image = rgb_image[:,:,1]

しかし、この画像マトリックスを次のように出力ファイルに書き込むと、

imsave("green_output_image.jpg",green_image)

本当に緑色に見えない画像が表示されます。

10
exAres

抽出しているのは単一のチャネルであり、これは各ピクセルの緑色の量を示しています。これは最終的にグレースケール画像として視覚化され、暗いピクセルはそれらのポイントに「緑」があまりないことを示し、明るいピクセルはそれらのポイントに「緑」が多いことを示します。

私があなたが言っていることを正しく解釈しているなら、あなたは各色の「緑」を視覚化したいと思うでしょう。その場合は、赤と青の両方のチャネルをゼロに設定し、緑のチャネルはそのままにしておきます。

そう:

green_image = rgb_image.copy() # Make a copy
green_image[:,:,0] = 0
green_image[:,:,2] = 0

元の画像のコピーを作成し、必要に応じて元の画像を変更するのではなく、チャンネルを変更したことに注意してください。ただし、上記で説明したように、緑のチャネルを抽出してこれをグレースケール画像として視覚化したい場合は、green_image変数で十分です。

19
rayryeng