ルックアップテーブル(Lookup Table【略LUT】)は、ある値の答えが必ず1つの値となる場合、あらかじめ答えを計算しておき、配列に格納しておくことで、毎回の計算をすることなく、 配列(テーブル)を参照することで効率的に処理を行う手法です。
画像処理では、コントラスト調整やガンマ補正などによく用いられます。
例えば、ガンマ補正の場合、ガンマ補正値をγ、補正前の輝度値をsrc、
補正後の輝度値をdstとすると、補正式は
となりますが、この計算を全ての画素に対して処理を行うのは非常に非効率です。
そこで、例えばLUTという配列に、ガンマ補正の計算結果を以下のように格納しておきます。
src | 0 | 1 | 2 | 3 | ・・・ | 252 | 253 | 254 | 255 |
dst | 0 | 16 | 23 | 28 | ・・・ | 253 | 254 | 254 | 255 |
あとは、各画素に対して、
dst = LUT[src]
という変換をすればよいだけなので、高速に処理を行うことができます。
こうする事でルックアップテーブルを用いない場合は、画素数分のガンマ補正計算をしないといけないのが、ルックアップテールを用いる事で、この例の場合では、たかだか256回の計算だけで済みます。
ガンマ補正例
- ガンマ補正前
- ルックアップテーブル
- ガンマ補正後
他にも二値化処理や、輝度値を0~255の範囲内に収めるための if 文の代わりなどにも応用できる場合があるので、処理を高速にしたい場合は、このルックアップテーブルが使えるかどうか?検討してみるのも良いと思います。
コメント
[…] 4/25 ガンマ補正(ルックアップテーブルの例) […]
[…] 4/25 ガンマ補正(ルックアップテーブルの例) […]