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

【OpenCV】ルックアップテーブルを用いた階調変換【Python】

この記事では、ルックアップテーブルを用いた画像処理をいくつか紹介していきます。

見習い

楽しみだなぁ。

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

例えば、ネガポジ転換で使う

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

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

(LUTの配列番号→値)

x255x
0255
1254
2253

2541
2550

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

そしてOpenCVでは、この作業を「LUT」関数で行います。

引数にはソース画像とLUT(ルックアップテーブル)です。

 

他にも様々な式があるので、カスタマイズしてみると面白いです。

今回はその様々な式の中の、有名どころを紹介していきたいと思います。

 

その際に使用する画像はこちらです。

有名な写真ですね。

今回はこの写真を使用していきます。

見習い

この人なんて名前なんだろう。

管理人

レナさんだそうです。

ネガポジ転換

プログラム

(main.py)

結果

 

解説

ネガポジ転換は、暗部と明部を取り替えるので、「0〜255」の数字をすべて逆にします。

よって式は以下のようになります。

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

見習い

反転という名前でよく見かけるかなぁ。

管理人

そうですね。ネガポジ転換は明暗を逆にするだけの処理ですので、すごく一般的に使われますね。

ガンマ変換

プログラム

(main.py)

結果

解説

ガンマ変換は、明るさを変えるために用いられます。

ちなみにガンマ変換の式は以下のようになります。

γ = ガンマ値
\(f(x) = \displaystyle \frac{x}{255}^\frac{1}{γ} \times 255\)

今回はガンマを「2.2」に設定しました。

この値を変えることで明るさを調整することができます。

見習い

これが明るさ調節、初めて知った〜!

管理人

ちなみに明るさはガンマ値というのを操作して調節を行うよ。

ソラリゼーション

プログラム

(main.py)

結果

解説

ソラリゼーション とは、画像の明るさを多くして白黒写真を反転させる場合に用います。

式は以下のようになります。

\(solarization = 2 \times \displaystyle \frac{π}{255}\)
\(f(x) = |sin(x \times solarisation) \times 100|\)

見習い

あっ、こういうのなんか見たことあるかも!

管理人

これも結構有名な画像処理だからね。

実験的な階調変換の例

以上の3つの例から、様々な関数の式を定めることで様々な階調変換を行うことができると言えます。

そこで、ある意味実験的な、階調変換の例をいくつか示していきます。

例1

関数

\(f(x) = \log_{10}x \times 100\)

画像

見習い

ベタ塗りしたみたいな印象を受けますね。

例2

関数

\(f(x) = \displaystyle \frac{x}{\log_{2}x} \times \sin \displaystyle \frac{x\pi}{256} \times 12\)

画像

見習い

ソラリゼーションの時みたいに「メタリック」な感じがしますね。

テカテカしていてかっこいいです!

管理人

「メタリック感」は、もしかしたら「sinカーブ」を使用した時の特徴かもしれませんね。

コメント