Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

ルックアップテーブルによる画像の減色

画素値0~255のそれぞれに対する係数をあらかじめ決めておき、画像を処理する手法があります。この係数のリストをルックアップテーブルと言い、ルックアップテーブルを用意することでOpenCVのcv2.LUT()メソッドにより画像処理が可能です。
元画像はBGRそれぞれ256諧調ですが、階段状のルックアップテーブルを用意して変換することで、これをRGBそれぞれ8諧調とします。

減色前 256 * 256 * 256 = 16,777,216‬色
減色後 8 * 8 * 8 = 512色

関連記事

K-Meansクラスタリングによる画像の減色
ルックアップテーブルによる画像コントラストの補正

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、ファイル名'ramen.jpg'で、jupyter notebookファイル(***.ipynb)と同じディレクトリに保存しました。
f:id:T_A_T:20190609211927j:plain
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()     
実行結果

ルックアップテーブルが表示されます。
f:id:T_A_T:20190616104230p:plain

減色した画像が保存されます。
f:id:T_A_T:20190616104257j:plain

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村