巨人の肩の上に登る

先人の積み重ねた発見に基づいて、なにかを発見しようとすることを指す。

任意の範囲に正規化

画像処理系のプログラムを書いてるときに,計算結果を表示するために良く使うのですが,毎度アルゴリズムを忘れてしまうのでメモ.

仕様
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