【Python/OpenCV】LUT(ルックアップテーブル)でガンマ補正・変換の高速化

Python版OpenCVのLUT(ルックアップテーブル)でガンマ補正(変換)を高速化する方法についてソースコード付きで解説します。

## 【はじめに】LUTとは

ガンマ補正は、画像のコントラストを調節し、視認しやすくするのによく使われています。

原理についてはこちら
参考 【画像処理】ガンマ補正の原理・計算式

LUT(ルックアップテーブル)とは、「画素値0~255の各入力値に対して、出力値が0~255のいずれになるかうを示す表をあらかじめ作成し、画像の濃度変換をおこなうときにいちいち数式に沿って計算せずに表の値を参照することで計算量を減らす」手法です。
例えば、画素値を半分にする場合、LUT(ルックアップテーブル)は次のようになります。

入力値 出力値
0 0
1 0
127 63
255 127

表の作成は、入力画像のサイズによらず256回の計算で済みます。

HDサイズ(1280×720)の場合、画素数は921600個なので、画像の濃度変換を普通に行うとおうとすると、計算回数は921600回となってしまい。計算量が大きくなります。
そこで、LUTを使えば、「256回の計算」と「921600回の参照」で済むためトータルの計算コストを抑えることができます
ガンマ補正など、計算式が複雑になるほど効果が大きくなります。

今回は、Python言語+OpenCV+NumPyを用いてLUTによりガンマ補正を実装してみました。

## 【サンプルコード】Python + OpenCV

サンプルプログラムのソースコードです。


■入力画像(右)、出力画像(右)

関連記事
1 PythonでOpenCV入門 サンプル集
2 【Python】画像処理プログラミング入門
3 【画像処理入門】アルゴリズム&プログラミング

コメント