Numpy 如何表示非整数图像?

Numpy 如何表示非整数图像?,numpy,matplotlib,precision,Numpy,Matplotlib,Precision,简介 对于计算机来说,数字灰度图像表示为整数矩阵,其中最大数(取决于整数精度)表示黑色,0表示白色 这是一个图像的表示,它表示整数,当转换为浮点时 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.,

简介

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

这是一个图像的表示,它表示整数,当转换为浮点时

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
可以很好地打印它

当灰度图像值浮动时,“亮度到值”映射如何工作

根据

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

imshow(I,[低-高])将I显示为灰度强度图像, 指定I的数据范围。值低(以及任何小于 大于低)显示为黑色,值为高(以及任何大于该值的值 大于高)显示为白色,介于两者之间的值显示为 灰色的中间色调。imshow使用默认的灰度值 水平。如果对[low high]使用空矩阵([]),imshow将使用 [最小(I(:))最大(I(:)];I中的最小值显示为黑色,并且 最大值显示为白色

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


因此,这取决于调用imshow()的方式,以及它如何解释要显示的图像。如果使用[low,high]的空矩阵调用它,它将只使用数组中的最大值和最小值。

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

你能不能通过创建一个混合了黑/白/一些中间灰色的图像来轻松确定这一点?@Vicky不,不太可能。我已经根据你的评论更新了这个问题。为什么表示形式没有不同,最小亮度阶跃不应该改变吗?看起来这就是imshow()的工作原理,我稍后会给出答案。感谢您的重播。但是,我使用的是python绘图库
matplotlib
的版本。但这回答了我的问题。基本上,它总是被离散化,一旦图像处理完成,使用浮点数就会成为开销。