【问题标题】:How do I normalize an image?如何标准化图像?
【发布时间】:2017-05-31 18:53:07
【问题描述】:

如果我有一系列像素,范围从 -500 到 +1000,我将如何对同一渐变上的所有像素进行归一化,以使它们落在特定范围(例如 0 到 255)之间?

【问题讨论】:

    标签: math image-processing


    【解决方案1】:

    像这样的一些伪代码会将值从一个范围线性缩放到另一个范围

    oldmin=-500
    oldmax=1000
    oldrange=oldmax-oldmin;
    
    newmin=0
    newmax=255;
    newrange=newmax-newmin;
    
    foreach(oldvalue)
    {
        //where in the old scale is this value (0...1)
        scale=(oldvalue-oldmin)/oldrange;
    
        //place this scale in the new range
        newvalue=(newrange*scale)+newmin
    }
    

    【讨论】:

      【解决方案2】:

      你的问题不是很清楚,所以我假设你正在做某种图像处理,你得到的结果是 -500 到 1000 之间的值,现在你需要将颜色保存到文件中其中每个值都需要在 0 到 255 之间。

      你如何做到这一点真的非常依赖于应用程序,结果的真正含义是什么以及你想要做什么。两个主要选项是:

      • 钳位值 - 任何低于 0 的值都替换为 0,高于 255 的任何值都替换为 255。例如,如果您的图像处理是某种插值,实际上不应该达到这些值价值观
      • 线性归一化 - 可以线性地将最小值设为 0,将最大值设为 255。当然,您首先需要找到最小值和最大值。你这样做:

        v = (origv - min)/(max - min) * 255.0
        

      它的作用是首先将值映射到[0,1],然后将它们拉伸回[0,255]

      第三个选项是混合和匹配这两个选项。您的应用程序可能会要求您将负值视为不需要的值并将它们限制为 0,并将正值线性映射到 [0,255]

      【讨论】:

        【解决方案3】:

        首先让一切都变得积极。如果最小值为 -500,则将 500 添加到所有值。那么最小值为 0,最大值为 1500。

        那么它只是一个三规则,你有它:

        [value in 0,255] = 255*(Pixel/1500)
        

        【讨论】:

          【解决方案4】:

          一些伪代码可能会有所帮助:

          foreach( pixel_value in pixel_values): # between -500 and 1000
          
              position = (pixel_value + 500) / 1500 # gives you a 0 to 1 decimal
              new_value = int(postion * 255) # or instead of casting, you could round it off
          

          这是python代码。

          【讨论】:

            【解决方案5】:

            创建两个变量,MinInputValueMaxInputValue。将MinInputValue 初始化为一个非常大的正数(高于您期望看到的最大像素值),并将MaxInputValue 初始化为一个非常大的负数(低于您期望看到的最低像素值)。

            遍历图像中的每个像素。对于每个像素,如果像素值PixelValue小于MinInputValue,则将MinInputValue设置为PixelValue。如果像素值大于MaxInputValue,则将MaxInputValue设置为PixelValue

            创建一个新变量InputValueRange,并将其设置为MaxInputValue - MinInputValue

            完成后,再次遍历图像中的每个像素。对于每个像素PixelValue,将输出像素值计算为255.0 * (PixelValue - MinInputValue) / InputValueRange。您可以将这个新值赋回原来的PixelValue,也可以在相同大小的输出图像中设置相应的像素。

            【讨论】:

              猜你喜欢
              • 2020-10-09
              • 2012-11-29
              • 2013-05-17
              • 2022-01-12
              • 1970-01-01
              • 2012-12-05
              • 2017-07-05
              • 2021-05-12
              • 1970-01-01
              相关资源
              最近更新 更多