如何规范化图像?
image-processing
5
0

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

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

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

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
}
收藏
评论

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

那么这只是三个规则,您就有了:

[value in 0,255] = 255*(Pixel/1500)
收藏
评论

您的问题不是很清楚,所以我假设您正在进行某种图像处理,并且得到的结果是-500到1000之间的值,现在您需要将颜色保存到文件中,每个值必须介于0到255之间。

如何执行此操作实际上取决于应用程序,结果的真正含义是什么以及您真正想做什么。两个主要选项是:

  • 钳制值-小于0的任何内容都被0替换,大于255的任何内容都由255替换。例如,如果图像处理是某种插值,但实际上不应达到这些值,则需要这样做
  • 线性归一化-线性地将最小值设为0,将最大值设为255。当然,首先需要找到最小值和最大值。你做:

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

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

第三种选择是在这两种选择之间混合和匹配。您的应用程序可能要求将负值视为不需要的值,并将其钳位为0,将正值钳位为线性映射到[0,255]

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号