Mathematica默认的图像的像素值是在0到1之间。如果对图像进行计算机处理之后,使得图像的某些像素值大于1,就需要对图片进行归一化处理。
工具/原料
1
电脑
2
Mathematica
方法/步骤
1
我们先来给出一幅图片。
2
对这幅图片乘以6,并求出像素最大值:b = b*3.6
3
b/Max[ImageData[b]]这就实现了归一化。
4
Mathematica有一个专门执行归一化的函数:ImageAdjust
5
但是我却发现,b/Max[ImageData[b]] 和ImageAdjust[b]并不完全相同,即使两幅图的差,看起来是黑色的。
ImageAdjust到底干什么了?
1
我们给出一个简单图片:c = Table[n*{1, 2, 3}, {n, 3}];d=c // Image[#, ImageSize -> 300] &由于每一个像素值都大于1,所以整个图看起来都是白色的。
2
看看d/Max[ImageData[d]]的效果:d/Max[c]
3
通过查看像素值,可以看出背后的算法:(d/Max[c] // ImageData)*Max[c]
4
再来看看d // ImageAdjust:
5
看看像素值:(d // ImageAdjust // ImageData)*8
6
恍然!归一化,不仅要最大值变成1,还要把最小值变为0,所以,ImageAdjust真实的算法是:c = Table[n*{1, 2, 3}, {n, 3}];e = c - Min[c];f = e/Max[e];c减去c的最小值,得到e;e除以e的最大值,得到f;f对应的图像,与c对应的图像的归一化效果一致。
注意事项
本文,我总算搞明白了ImageAdjust的真正算法了。
上一篇:数据对比流程图模板分享
下一篇:现代简约电视背景墙