我有一个关键线激光系统LJ 8000,我用它来扫描不同物体的表面。
控制器将高度信息保存为位图,每个像素表示一个高度值。经过大量修改后,我发现Keyence并不是使用实际的颜色,而不是使用24位RGB三重奏作为某种形式的二进制存储。然而,这些字节的组合似乎不适合我。对于24位整数有任何常见的存储方法吗?
发布于 2022-06-22 11:27:33
为了解码这些值,我做了一次扫描,覆盖了扫描仪的整个测量范围,包括在开始和结束时的一些超出范围的值。如果你看看每个彩色平面的值的分布,你可以看到,第一个和第三个平面实际上只使用8/16的值,这意味着只有3/4位。这也是可见的图像本身,因为它主要显示绿色。
我的结论是Keyence使用绿色平面的完整字节、第一个平面的3位和最后一个平面的4位来存储高度信息。Keyence似乎选择了一些奇怪的15位整数格式来存储他们的数据。
只要稍微移动一下,并且知道扫描仪的有效范围为-2.2,2.2,我就可以构建以下简单的小脚本(Matlab-)来计算每个像素的高度信息:
HeightValBin = bitshift(scanIm(:,:,2),7, 'uint16') ...
+ bitshift(scanIm(:,:,1),4, 'uint16')...
+ bitshift(scanIm(:,:,3),0, 'uint16');
scanBinValScaled = interp1([0,2^15], [-2.2, 2.2], double(scanBinVal));Keyence提供了一个软件,可以将这些.bmp转换为..csv文件,但不需要API来实现过程的自动化。因为我需要处理很多这些文件,所以我需要自动化这个过程。
rgb三重奏的计算值实际上比导出的csv更精确,因为csv只显示小数点之后的4位数字。


https://stackoverflow.com/questions/72714668
复制相似问题