2015-05-05 9 views
1

Я работаю над проектом, где я должен сначала нормализовать изображение до [0,1], а затем выполнить dwt и idwt на изображении после обработки. поэтому сначала я преобразовать изображение в массив, то я нормализовать его с этим кодомкак денормализовать изображение в python?

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 

код работает хорошо, и теперь я понятия не имею, как я могу Денормализовать его обратно к реальному диапазону. может кто-нибудь помочь?

+1

ли вы следить за первоначального диапазона в любом месте? Если нет, вам нужно это сделать. – user2357112

+0

Вы нашли решение? – Scott

ответ

0

Вам просто нужно сделать обратную нормализацию. Итак, умножьте исходный диапазон и добавьте минимум. Просто набрав непроверенный код:

def denormalization (array, mins, range):  
    A = [] 
    for x in array: 
     m = [(float(xi) * range) + mins for xi in x] 
     A.append(m)  
    return A 

Очевидно, что вы должны были бы сохранить исходный диапазон и минимум, как глобал для того, чтобы использовать их в этой функции.

0

Я использую следующие для сопоставления и из любого отрезка [а, Ь] -> [с, 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) 

Вы можете также использовать его один один столбец 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 
Смежные вопросы