任意の範囲に正規化
画像処理系のプログラムを書いてるときに,計算結果を表示するために良く使うのですが,毎度アルゴリズムを忘れてしまうのでメモ.
仕様
1)begin ~ end の範囲に2次元配列を正規化
2)値が一様なときは,(begin + end) / 2 の値を持つ一様な2次元配列を返す.
メインのロジックはこんな感じです.
(src[y][x] - amin) * (end - begin) / (amax - amin) + begin
以下に関数を示します.
normalize_range
import itertools import numpy as np def normalize_range(src, begin=0., end=255.): amin, amax = np.amin(src), np.amax(src) for y, x in itertools.product(xrange(len(src)), xrange(len(src[0]))): if amin != amax: src[y][x] = (src[y][x] - amin) * (end - begin) / (amax - amin) + begin else: src[y][x] = (end + begin) / 2. return src