【问题标题】:Scale values in uniform way?以统一的方式缩放值?
【发布时间】:2019-12-06 06:19:38
【问题描述】:

我有一个数字数组,可以转换为百分比([0 .. 1] 范围内的值)。然后我将其转换为灰色。

例子:

 percentage = nums/float(nums.max())

问题是大多数值都是带有几个大数字的小数字。这导致大部分 % 在 0.01 左右。 结果是这转化为~~白色,在绘图时变得不可见。 顺便说一句,我必须保留所有的价值观。

我试图缩小异常值,但即使这样也无济于事;(

 colors[abs(colors - np.mean(colors)) > 2 * np.std(colors)] = colors.mean() + 2 * np.std(colors)
 c = colors/float(colors.max()) #convert to percentage

这样做的目的是将异常值缩小到平均值的 2std。

我认为我需要的是某种“逐步”函数,它将值分组以使它们均匀缩放 在 0 .. 1 范围内,以便每个点都接收可见颜色,但仍保持一定的对比度,以便区分值。

PS> 范围可能是 0.1 到 1 !

=====

到目前为止,这是某种解决方案:

 c += 0.15 * (1-c) 

【问题讨论】:

  • 也许你应该阅读一下Histogram Equalization
  • 如果它工作正常,您能接受答案并关闭这个问题吗?如果您找到了另一个更适合您需求的解决方案,如果您愿意在单独的答案中分享它,我们也将不胜感激。谢谢。

标签: python numpy scale uniform


【解决方案1】:

考虑到通常的照片编辑,是否可以解决某些值?然后,通常的排序可能会有所帮助,例如

highlights=np.sort(nums)[-xyz:]

只需将这些值设置为下一个较小的值即可设置为白色。

当然,这可能是对数据的严重处理,但这就是您在调整颜色曲线时通常在 GIMP 或类似的照片处理软件中所做的事情。因此,如果这些异常值就像不稳定的像素,而您实际上对中间的灰度值感兴趣,这可能会有所帮助。

我希望,我得到了你的兴趣, 雷帕克

【讨论】:

    【解决方案2】:

    到目前为止,这是最好的解决方案:

    c += 0.15 * (1-c)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2011-03-26
      • 2015-08-13
      • 1970-01-01
      相关资源
      最近更新 更多