From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



为什么捕捉的图片在从16位强制转换为8位后看起来要亮或暗一些?



主要软件:
主要软件版本: 7.1
主要软件修正版本: N/A
次要软件: N/A

问题:

我用相机捕捉了一幅16位图像,并用IMAQ Cast Image VI将其转换为8位图像。图像看起来变亮或变暗了。我的相机的比特深度是10位。这是为什么呢?



解答:

如果用10位的相机捕捉原始图像,那么在将其由16位表示转换为8位表示后,有几种原因会导致图像看上去有一定变化。IMAQ Cast Image VI有一个名为# Shifts的输入。虽然它是I32长整型,但其范围被强制在0到8的整数间。当LabVIEW将16位图像转换为8位图像时,它就将数据以这个输入所规定的位数进行移位,随后只用低8位表示新的图像。

如果用比特深度为10位的相机捕捉图像,会有一个例外。保存图像的缓冲的比特深度同样将是显式的10位。当用转换函数转换为一幅8位图像时,如果# Shifts的输入是0,那么函数仍会将图像移动2位。这将使新的8位表示图像与原始图像看上去是相同的。如果# Shifts有其它非0的值,函数则会向左进行所规定位数的移位。因此,如果值为1的话,新的图像将会看上去更亮,值为0或2则会使图像看上去和原始图像一样,而当值大于2时图像则会显得比原图像更暗。

这在决定为转换函数结果使用什么目标缓存时,也有一定关系。比方说,如果你将一幅用10位相机拍摄的图像转换为8位图像,然后又转换回16位图像,那么根据你是重用同样的图像缓冲,还是创建新的缓冲,结果将会不同。如果你重用缓冲,你将会保留图像原有的10位比特深度。但在你将8位图像转换为16位图像时,转换函数不会将位数重新移回。因此,所有像素的值是不变的,但现在它们的比特深度为10而不是8。当你转换为8位图像时,首先进行移位,但当你转换回来时,它们将不会被移位回来。另一方面,如果你使用新的缓冲作为转换函数的目标,那么新的图像将会有相同的像素值,并且其比特深度仍将是8(尽管它是16位图像)。所以,它和原始图像看上去是一样的。

这里提供了一个VI范例来演示上面所描述的现象。你可以进行以下试验:改变移位的位数,或是决定是否重用缓冲(注意:为了更清楚地观察重用缓冲和使用新的缓冲的区别,将# Shift设置为0或2)。这个范例应配合一台在MAX中配置以读取10位单色图像的相机使用。



相关链接: KnowledgeBase 3X2E15AJ: Casting Float32 (Short) IMAQ Image to U8 or I16

KnowledgeBase 2AHH1KOA: Why Does My 16-bit PNG Image Appear Black in Photoshop

附件:


Bit_Depth_Example.vi - Bit_Depth_Example.vi



报告日期: 10/20/2005
最近更新: 07/23/2009
文档编号: 3QJD6R4Y