将双打列表标准化为 -1 到 1 或 0 - 255

Elg*_*oog 4 c++ normalization

我有一个范围介于-1.396655to之间的双打列表,1.74707甚至可能更高或更低,无论哪种方式,我都会在规范化之前知道MinandMax值是什么。我的问题是我怎么能正常化之间的这些值-11甚至更好的是从双值转换他们的char值0255

任何帮助,将不胜感激。

double range = (double)(max - min);
value = 255 * (value - min)/range
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 5

您需要表单的映射y = mx + c,并且需要找到 anm和 a c。你有两个固定的数据点,即:

 1 = m * max + c
-1 = m * min + c
Run Code Online (Sandbox Code Playgroud)

从那里,它是简单的代数


hap*_*ave 5

最简单的方法是首先通过从每个数字中减去 Min 来移动所有值,使 min 为 0。然后乘以 255/(Max-Min),这样移位后的 Max 将映射到 255,其他所有内容都将线性缩放。所以我相信你的等式应该是这样的:

newval = (unsigned char) ((oldval - Min)*(255/(Max-Min)))

在转换为 char 之前,您可能需要更仔细地舍入。