From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



NI Vision中的16-bit位图



主要软件:
主要软件版本: N/A
主要软件修正版本: N/A
次要软件: Driver Software>>NI-IMAQ, Driver Software>>NI-IMAQ for IEEE-1394, Driver Software>>NI-IMAQ for USB Cameras

问题:
我需要用NI-Vision来分析一幅16-bit位图。数据是用无符号型数值存储的,但是Image 类型是用符号型数值存储的。


解答:
许多应用场合和相机驱动使用无符号数值来创建16-bit位图。这意味着颜色最黑的像素的值为0而最亮的像素点的值为b1111111111111111 (xFFFF or d65535)。然而,LabVIEW中NI Vision 和NI-IMAQ使用的Image数据类型是用一个符号数读取数据值的。如图1所示,当一个数值数组转换它的数据类型时会导致错译。


Figure 1: Unsigned and Signed Interpretation of Data


这种译码差异可以通过将原始数值减去一个x8000 (d32768) 的常量来解决。然而,无论是U16 还是I16数值范围都不允许这样的减法。(如果是将原始数值减去xFFFF ,将会发生下溢。)有两种标准方法来解决这个问题:

简单方法:
图 2 表示的是一个可以覆盖操作中所有可能数值的32-bit符号整形数,它可以用作一个中间状态。U16型的图像数据被转换为I32型,即而减去相应常量,得到的新数据(在一个I16型的允许范围内)然后被转换为I16型。


图 2:使用I32作为一个中间状态


图 3中的LabVIEW代码实现了这个调整并将得到的数组转换为图像数据类型。(注意:IMAQ ImagetoArray VI 是视觉开发模块的一部分并且它没有被包含在NI-IMAQ 驱动中)。这个方法对于学习编程环境和范例程序非常理想。


图 3: 将一幅U16图像转换为LabVIEW中的图像数据类型


 

架构方法:
图 4 中的LabVIEW代码利用了电脑架构的优势并且使用一个常用的XOR门和一个强制类型转换来实现和图2的代码相同的功能。在实际的应用环境中,这段代码比图2的代码更快更高效。


图 4: 使用强制类型转换和XOR 把U16转换为I16型



相关链接:

附件:


Conversion_using_LV.Jpg - Conversion_using_LV.JpgU16vsI16.jpg - U16vsI16.jpg
Cast_and_Subtract1.jpg - Cast_and_Subtract1.jpg
XOR_Solution.JPG - XOR_Solution.JPG



报告日期: 04/07/2006
最近更新: 10/08/2007
文档编号: 3W6EEVD3