画像の色を事前定義された範囲にスケーリングしようとしています。パレットの色の範囲からの最小二乗誤差に基づいて、色が出力ピクセルに割り当てられます。
Python ループでコードを書きましたが、これを行うためのより良いベクトル化された方法はありますか?
import numpy as np
import skimage.io as io
palette = [
[180, 0 , 0],
[255, 150, 0],
[255, 200, 0],
[0, 128, 0]
]
IMG = io.imread('lena.jpg')[:,:,:3]
DIM = IMG.shape
IOUT = np.empty(DIM)
for x in range(DIM[0]):
for y in range(DIM[1]):
P = ((np.array(palette)-IMG[x,y,:])**2).sum(axis=1).argmin()
IOUT[x,y,:] = palette[P]
numpy 操作自体を使用してループを回避および解決できますか?