多语言展示
当前在线:1249今日阅读:167今日分享:27

怎么用Mathematica对图像进行归一化操作?

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的真正算法了。

推荐信息