将灰度图像从[30-200]映射到[0,255]需要什么线性映射函数?
我已经做了一些工作,这就是我想出来的,但我想知道它是否是正确的方法:
min : 30, want to map to 0
mid : 85, want to map to 128
max : 200, want to map to 255
if (i <= mid), M(i) = 127*(i - min)/(mid - min)
if (i > mid), M(i) = 128 + (255 - 128)*(i - mid - 1)/(max - mid - 1);
这似乎对我来说是正确的,因为:
if i = 30, it should map to 0. Plugging the information in:
M(30) = 127*(30-30)/(85 - 30) = 0
If i = 85, it should map to 127:
M(85) = 127*(85 - 30) / (85 - 30) = 127
If i = 200, it should map to 200:
M(200) = 128 + (255 - 128)*(200 - 85 - 1)/(200 - 85 - 1) = 255
谢谢。
答案 0 :(得分:1)
如果应用线性映射,第一个间隔的中间将自动映射到第二个间隔的中间(您可以将其视为Thales原则)。因此,您只需要应用一个等式:y = a.x + b
要解决这个等式,你有两个信息:a.30 + b = 0,和 a.200 + B = 255。
然后你解决这个问题,你得到:a = 1.5,b = -45。
小心,[30,200]的中间不是85而是115(= 30 + 85)。
最后,您可以检查,如果您应用1.5 * x-45 = y,您成功获得:30-> 0,200-> 255和115-> 127.5