1

カラー画像の明るさとコントラストを変更する方法を知っている人はいますか。vtkImageMapToWindowLevelについては知っているのですが、このクラスで画像のレベルやウィンドウを設定するとカラー画像がグレースケールになってしまいます。

回答ありがとうございます。

4

1 に答える 1

3

定義上、カラー画像はすでにカラーマッピングされており、分解と再構成なしに画像の明るさ/コントラストを変更することはできません。

まず、明るさとコントラストと呼ばれる数値のペアを好きなように定義します。通常、明るさを最大値、コントラストを最小値と最大値の比率とします。同様に、ウィンドウ/レベルのセマンティクスを使用する場合、「レベル」は最小のスカラー値であり、ウィンドウは最大と最小の差です。

次に、明るさとコントラストを使用して、スカラー範囲(目的の出力画像の最小値と最大値)を見つけます。明るさ/コントラストを適用する場合、スカラー範囲は次のとおりです。

  1. 最大=明るさ
  2. 最小=最大/コントラスト

たとえば、0から1の範囲で、さまざまな比例値の一連の色を使用するカラールックアップテーブル(LUT)を想定します。これで、明るさとコントラストがわかったので、より低い値(範囲0)「最小」にマッピングし、上限値(範囲1)を「最大」にマッピングします。これが行われると、vtkImageMapToColorsのような適切なクラスは、単一コンポーネントの入力を受け取り、それを3または4コンポーネントの画像にマップできます。

カラーLUTクラス(vtkScalarsToColorsおよび関連するクラス)は単一コンポーネントの画像でのみ定義されているため、これはすべて単一コンポーネントの画像でのみ発生する可能性があります。

元の1コンポーネント画像にアクセスでき、vtkImageMapToColorsまたは同様のクラスを使用している場合は、その段階で処理することをお勧めします。

そうでない場合、私が考えることができる1つの方法があります:

  1. vtkImageExtractComponentsを使用して3つのチャネルを3つの異なる画像として抽出します(それぞれ元の画像を入力として持つ3つのインスタンスが必要です)。
  2. vtkImageShiftScaleを使用して3つのチャネルを独立してスケーリングします(明るさでシフト、コントラストでスケーリング)
  3. vtkImageAppendComponentsを使用してチャネルを結合します

もう1つの可能性は、vtkImageMagnitudeを使用して、画像をグレースケールに変換し(3つのチャネルの大きさを合わせて)、ルックアップテーブルとしてvtkImageMapToColorsおよび任意のvtkScalarsToColorsクラスを使用してカラーテーブルを再適用することです。

最初の方法は、画像が実際の写真などで、色が3成分ソースからのものである場合に適しています。また、2番目の方法は、入力画像がすでに偽色を使用している場合(たとえば、IRカメラからの画像)に適しています。 、または画像マッピングされた手続き的に生成されたフラクタル)。

于 2011-06-18T15:04:53.480 に答える