2

ベイヤーフィルターを使用して作成された画像がありますが、色が少しずれています。正しい色を得るには、各ピクセルのRGとBに特定の係数(R、G、Bごとに異なる係数)を掛ける必要があります。私はPythonイメージングライブラリを使用しており、もちろんPythonで記述しています。これを効率的に行う方法はありますか?

ありがとう!

4

6 に答える 6

9

これを行う方法は次のとおりです。

  1. まず、画像をRGBチャネルに分割します。
  2. pointチャネルを係数で乗算するために使用します(1.5例では、rチャネル上)。
  3. チャネルをマージして戻します。

コードは次のとおりです。

import Image
im = Image.open('1_tree.jpg')
im = im.convert('RGB')
r, g, b = im.split()
r = r.point(lambda i: i * 1.5)
out = Image.merge('RGB', (r, g, b))
out.show()

オリジナル:

ここに画像の説明を入力してください

1.5赤のチャネルに(少し赤みがかった..)を掛けたもの:

ここに画像の説明を入力してください

于 2012-06-04T18:47:48.170 に答える
6

convert()これは、次の関数を使用して単純な変換行列を使用するだけで、非常に効率的に実行できます。

#!/usr/bin/env python3 

from PIL import Image 

# Open image 
im = Image.open('tree.jpg') 

# Make transform matrix, to multiply R by 1.5, leaving G and B unchanged
Matrix = ( 1.5, 0,  0, 0, 
           0,   1,  0, 0, 
           0,   0,  1, 0) 

# Apply transform and save 
im = im.convert("RGB", Matrix) 
im.save('result.png') 

入力画像:

ここに画像の説明を入力してください

結果画像:

ここに画像の説明を入力してください

キーワード:Python、PIL、Pillow、カラーマトリックス、カラーマトリックス、変換、乗算チャネル、スケールチャネル、個別、個別、個別チャネル、バンド、コンポーネント、個別、分割チャネル、マージチャネル、画像、画像処理。

于 2019-05-27T09:17:49.610 に答える
2

基本的な最適化として、入力値(0-255)を出力値(0-255)にマップするために、R、G、およびBにそれぞれ1つずつ、3つのルックアップテーブルを作成すると、少し時間が節約される場合があります。配列エントリの検索は、10進数値を乗算して結果を整数に丸めるよりも、おそらく高速です。どれだけ速いかわからない。

もちろん、これは値が常に同じようにマップされることを前提としています。

于 2012-06-04T18:27:24.700 に答える
1

ドキュメントから:

from PIL import Image
Image.eval(image, function) => image

指定された画像の各ピクセルに関数(1つの引数を取る必要があります)を適用します。画像に複数のバンドがある場合、同じ機能が各バンドに適用されます。関数は可能なピクセル値ごとに1回評価されるため、ランダムコンポーネントやその他のジェネレーターを使用できないことに注意してください。

于 2012-06-04T18:19:21.047 に答える
1

astynaxによって提案されているよう.splitに、画像を3つのチャネルごとに個別の画像に分割し、それらを元に戻すために使用できます。.evalImage.merge

乗算係数のいずれかが1より大きい場合は、必ず出力を255にクランプしてください。

于 2012-06-04T18:44:17.343 に答える
0

タイプがnumpy.ndarrayの場合、img = np.uint8(img * factor)

于 2020-11-18T19:59:09.200 に答える