スポンサーリンク
スポンサーリンク

【OpenCV】疑似カラー処理のやり方を解説【Python】


疑似カラー処理とは、白黒画像やその他の色のない画像に疑似的に色をつける処理を指します。

例えばサーモグラフィカメラがそうです。

サーモグラフィでは赤外線の波長を読み込むため、疑似的な色をつけています。

 

画像を読み込む

 

今回しようする画像はこちらです。

こちらはフリーの画像ですので、ご自由にダウンロードしてください。

針ノ木岳山頂の大パノラマ(新緑期) | 無料の写真素材はフリー素材のぱくたそ
「針ノ木岳山頂の大パノラマ(新緑期)」のフリー素材

 

使用する画像はカラー画像ですが、プログラム中で白黒化(グレースケール化)にするので、ダウンロードした画像を白黒に加工する必要はありません。

 

(main.py)

 

画像の読み込みはこれだけなので非常に簡単です。

 

画像をグレースケール化

 

それでは読み込んだ画像をグレースケール化します。

 

(main.py)

 

グレースケール化は「cvtColor」関数を用いて行います。

 

ルックアップテーブルを作成

 

ルックアップテーブルとは

まず、ルックアップテーブル(LUT)についてです。

例えば

\(f(x) = 255 – x\)

この式をルックアップテーブルにセットする場合、以下のようになります。

(LUTの配列番号→値)

x255x
0255
1254
2253

2541
2550

「LUTの配列番号」と一致する「元の画像の画素値」は、その配列番号に格納されている値に変換されます。

 

作成するルックアップテーブル

 

今回は「RGB成分」別々にルックアップテーブルを作成します。

つまり、「R成分」用のLUT、「G成分」用のLUT、「B成分」用のLUTの、3つのルックアップテーブル(LUT)を作成します。

その内容を簡単なグラフで説明します。

 

「X座標(LUTの配列番号)」に対応する出力値をグラフに表したものです。

このグラフの形になるように条件分岐を使って出力値を計算し、LUTにセットしていきます。

 

プログラム

(main.py)

 

各「if」文に書かれている内容はグラフの形を再現するためのものなので、特に難しくはありません。

 

ルックアップテーブルの内容を反映させる

 

次に、作成したLUT(ルックアップテーブル)の内容を「dst」に反映させます。

 

(main.py)

 

「LUTの配列番号」と「元の画像の画素値」が一致する場所に格納されている値を「dst」の画素に代入することで、LUTの値を反映させています。

変換した画像を表示する

 

最後に変換した画像「dst」を表示し、成功しているかを確認してみます。

 

(main.py)

結果

 

 

無事に疑似カラー処理が成功しました。

「RGB成分」ごとのグラフは自分でオリジナルのものが作れますので、ご自身で違うグラフを作成して、是非疑似カラー処理を試してみてください。

コメント