ルックアップテーブルによる画像の減色
画素値0~255のそれぞれに対する係数をあらかじめ決めておき、画像を処理する手法があります。この係数のリストをルックアップテーブルと言い、ルックアップテーブルを用意することでOpenCVのcv2.LUT()メソッドにより画像処理が可能です。
元画像はBGRそれぞれ256諧調ですが、階段状のルックアップテーブルを用意して変換することで、これをRGBそれぞれ8諧調とします。
減色前 256 * 256 * 256 = 16,777,216色
減色後 8 * 8 * 8 = 512色
関連記事
K-Meansクラスタリングによる画像の減色
ルックアップテーブルによる画像コントラストの補正
環境
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名'ramen.jpg'で、jupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。
ramen.jpg
コード
%matplotlib inline import cv2 import numpy as np import math import matplotlib.pyplot as plt # 画像の読み出し img = cv2.imread('ramen.jpg') # ルックアップテーブルの生成 LUT =[] k = 8 width = 256/k center = 256/k/2 for i in range(k): ave_list =[] ave_list = [center+width*i]*int(width) LUT=LUT+ave_list LUTN = np.array(LUT,dtype=np.uint8) # 変換後の画像生成、保存 img_lut = cv2.LUT(img, LUTN) cv2.imwrite('ramenLUT.jpg',img_lut) # ルックアップテーブルのプロット plt_x = np.arange(256) plt_y = LUT[0:256] plt.plot(plt_x,plt_y) plt.xlabel('RGB') plt.ylabel('RGB_LTU') plt.show()
実行結果
ルックアップテーブルが表示されます。
減色した画像が保存されます。