3

最初に画像を[0,1]に正規化し、処理後に画像に対してdwtとidwtを実行する必要があるプロジェクトに取り組んでいます。最初に画像を配列に変換してから、このコードで正規化します

def normalization (array):    
    maxs = max([max(l) for l in array])
    mins = min([min(l) for l in array])
    range = max - mins
    A = []
    for x in array:
        m = [(float(xi) - mins)/range for xi in x]
        A.append(m)    
    return A

コードはうまく機能しますが、実際の範囲に非正規化する方法がわかりません。誰でも助けることができますか?

4

2 に答える 2

6

以下を使用して、任意の間隔 [a, b] --> [c, d] との間でマッピングします。

import numpy as np

def interval_mapping(image, from_min, from_max, to_min, to_max):
    # map values from [from_min, from_max] to [to_min, to_max]
    # image: input array
    from_range = from_max - from_min
    to_range = to_max - to_min
    scaled = np.array((image - from_min) / float(from_range), dtype=float)
    return to_min + (scaled * to_range)

例:

image = np.random.randint(0, 255, (3, 3))
image

戻り値:

array([[186, 158, 187],
       [172, 176, 232],
       [124, 167, 155]])

これを [0, 255] から [0, 1] にマップします。

norm_image = interval_mapping(image, 0, 255, 0.0, 1.0)
norm_image

戻り値:

array([[ 0.72941176,  0.61960784,  0.73333333],
       [ 0.6745098 ,  0.69019608,  0.90980392],
       [ 0.48627451,  0.65490196,  0.60784314]])

[0, 1] から [0, 255] に戻る:

orig_image =interval_mapping(norm_image, 0.0, 1.0, 0, 255).astype('uint8')
orig_image

戻り値:

array([[186, 158, 187],
       [172, 176, 232],
       [124, 167, 155]], dtype=uint8)

また、単一の列の 1 つを使用しimageて [-1.0, 1.0] にマップすることもできます。

col = image[:, 1]
print col
interval_mapping(col, 0, 255, -1.0, 1.0)

戻り値:

[158 176 167]
array([ 0.23921569,  0.38039216,  0.30980392])

またはスカラー:

interval_mapping(1.0, 0, 255, -1.0, 1.0)

戻り値:

-0.99215686274509807
于 2015-05-05T18:40:17.367 に答える