如何表示非整数图像?

时间:2013-05-03 08:47:52

标签: numpy matplotlib precision

简介

对于计算机,数字灰度图像表示为整数矩阵,其中最大值(取决于整数精度)表示黑色,0表示白色。

enter image description here

这是一个图像的表示,对于整数,以及当转换为浮点数时。

enter image description here

int
array([[6, 1, 1, 0, 6, 4],
       [0, 1, 2, 7, 5, 2],
       [0, 4, 6, 6, 3, 4],
       [1, 1, 2, 6, 7, 0],
       [3, 6, 6, 5, 5, 3]])

float
array([[ 6.,  1.,  1.,  0.,  6.,  4.],
       [ 0.,  1.,  2.,  7.,  5.,  2.],
       [ 0.,  4.,  6.,  6.,  3.,  4.],
       [ 1.,  1.,  2.,  6.,  7.,  0.],
       [ 3.,  6.,  6.,  5.,  5.,  3.]])

问题

我一直在使用svd,结果得到一个图像,其矩阵表示由浮点数组成。使用matplotlib中的imshow打印得很好。

当灰度图像值浮动时,'亮度值'映射如何工作?

2 个答案:

答案 0 :(得分:1)

根据http://www.weizmann.ac.il/matlab/toolbox/images/imshow.html

  

imshow(I,n)显示具有n个离散水平的强度图像I.   灰色。如果省略n,则imshow在24位显示器上使用256个灰度级,   或其他系统上的64个灰度级。

     

imshow(我,[低高])将I显示为灰度强度图像,   指定I的数据范围。值低(和任何值减去   低于)显示为黑色,值高(和任何值更大   比高)显示为白色,值显示为   中间色调的灰色。 imshow使用默认的灰色数   水平。如果对[low high]使用空矩阵([]),imshow使用   [min(I(:))max(I(:))]; I中的最小值显示为黑色,和   最大值显示为白色。

     

imshow(BW)显示二进制图像BW。值0显示为黑色,   和值1显示为白色。

所以这取决于你如何调用imshow()来解释图像的显示方式。如果你用[低,高]的空矩阵调用它,它将只使用数组中的最大值和最小值。

答案 1 :(得分:1)

matplotlib使用colormap (doc)类(及其子类)和Normalize (doc)类(以及它的子类)将值映射到颜色类)。基本思想是normalize将您提供的输入转换为[0, 1]范围内的浮点数。有多种线性和非线性方法可以做到这一点(例如,实现伽马校正)然后colormap类会转换范围[0, 1] - >范围内的标量。 rgb值,可以通过您想要的任何映射(gallery)

来实现