Python OpenCV3でポスタリゼーション(階調の変換)

画像の階調を変換する処理のことをポスタリゼーションという。

[amazonjs asin="4061538225″ locale="JP" title="OpenCVによる画像処理入門 (KS情報科学専門書)"]

 

前提

ディレクトリ構成などはこことかこことか。

&nbsp

元画像

ガンマ変換などと比較しやすいために、同じこの画像(sora2.jpg)を使う。
以前の例だとsource/imageディレクトリ配下に設置する。

sora

 

ルックアップテーブル

ルックアップテーブルは以下の階段のようなグラフを使う。

 

スクリーンショット 2015-06-23 9.57.23

 

ポスタリゼーション

sourceディレクトリ配下にposterization.pyを作成する。
これまでと同様に事前にルックアップテーブルを作成し、OpenCV3のLUTメソッドの引数でルックアップテーブルを指定し、ポスタリゼーションを行う。

[python title="posterization.pyの内容"]
# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__’:

# ルックアップテーブルを作成するため変数の定義
solarization_const = 2 * np.pi / 255

# ルックアップテーブルの生成
"""
array([[0],
[0],
[0],
[0],
[0],
[0],
[0],
・・・・・・・・
[0], dtype=’uint8′)
のようなリストが生成される。
"""
look_up_table = np.ones((256, 1), dtype = 'uint8’ ) * 0

for i in range(256):

if i < 64:

look_up_table[i][0] = 0

elif i < 128:

look_up_table[i][0] = 100

elif i < 192:

look_up_table[i][0] = 200

else:

look_up_table[i][0] = 300

# 画像の読み込み
img_src = cv2.imread("./image/sora2.jpg", 1)

# ポスタリゼーション後の出力
img_post = cv2.LUT(img_src, look_up_table)

# 表示
cv2.imshow("Show POSTERIZATION Image", img_post)
cv2.waitKey(0)
cv2.destroyAllWindows()

[/python]

実行してみる。

[shell]
python posterization.py
[/shell]

スクリーンショット 2015-06-23 9.32.30

ペンキをぶちまけた現代芸術のような色。