Nic*_*ton 9 math image-processing
如果我有一系列像素,范围从-500到+1000,我如何规范化相同渐变上的所有像素,使它们落在特定范围(比如0到255)之间?
Pau*_*xon 27
像这样的一些伪代码会将值从一个范围线性地缩放到另一个范围
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
}
Run Code Online (Sandbox Code Playgroud)
你的问题不是很清楚,所以我假设你正在进行某种图像处理,你得到的结果是从-500到1000的值,现在你需要将颜色保存到每个值的文件中需要在0到255之间.
你如何做到这一点真的非常依赖于应用程序,结果的真正含义是什么以及你想要做什么.两个主要选项是:
线性归一化 - 线性地将您的最小值设置为0,将最大值线性化为255.当然,您首先需要找到最小值和最大值.你做:
v = (origv - min)/(max - min) * 255.0
Run Code Online (Sandbox Code Playgroud)这样做首先将值映射到[0,1]然后将它们拉回到[0,255].
第三种选择是在这两个选项之间进行混合和匹配.您的应用程序可能要求您将负值视为不需要的值,并将它们钳制为0,将正值钳位到线性映射到[0,255].