【问题标题】:how to denormalize image in python?如何在python中对图像进行非规范化?
【发布时间】:2015-07-14 20:53:49
【问题描述】:

我正在做一个项目,我必须首先将图像标准化为 [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

代码运行良好,现在我不知道如何将其反规范化回实际范围。有人可以帮忙吗?

【问题讨论】:

  • 您是否在任何地方跟踪原始范围?如果没有,您需要这样做。
  • 您最终找到解决方案了吗?

标签: python image-processing normalization dwt


【解决方案1】:

你只需要做标准化的逆操作。因此,乘以原始范围并添加最小值。只需输入未经测试的代码:

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

显然,您需要将原始范围和最小值保留为全局变量,以便在此函数中使用它们。

【讨论】:

    【解决方案2】:

    我使用以下来映射到任何区间 [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)
    

    您也可以使用它的一列 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-14
      • 1970-01-01
      • 2018-12-12
      • 2019-10-27
      • 2023-03-29
      • 2013-03-08
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多