APU*_*APU 7 algorithm 3d image-processing computer-vision gray-code
我尝试构建一个结构化的光环境来进行3D扫描.
据我所知,如果我选择使用格雷码来重建3D模型,我必须实现在幂2(2 ^ x,x = 0~10)中编码的特定模式.
也就是说,模式的分辨率必须至少为1024 x 1024.
如果我的DLP投影机仅支持高达800 x 480的分辨率怎么办?当灰色代码模式分辨率变得太高时,它会投射莫尔图案(我试过).我该怎么办?
我的朋友们建议我创建1024 x 1024个图案,并将它们"裁剪"成800 x 480,
但是我认为灰色代码应该遵循特定的顺序和模式,我的朋友建议会创建几个不对称的图像.
有没有人像我一样拥有相同的经历?
---------- 2015.8.4更新问题----------
我想如果我的投影机无法完美地投射高分辨率图案,我可以让它以低分辨率投影图案,例如,从2 ^ 0到2 ^ 6?
或者格雷码严格要求从2 ^ 0到2 ^ 10的模式?否则灰色代码不可用?
你不能直接缩小到你的分辨率
因为它会扭曲图案使其变得毫无用处
相反,你可以:
将其裁剪为您的分辨率
但您也需要在扫描部分处理这个问题,因为您没有可用的完整图案
使用最接近的 2 分辨率的可用幂
使用项目符号 #2 + 放大以更好地适应您的分辨率
因此,创建图案512x256并线性缩放以800x480尽可能适合:
800/512 = 1.5625
480/256 = 1.8750
Run Code Online (Sandbox Code Playgroud)
使用较小的比例 ( 512x256 * 1.5625 -> 800x400),因此缩放图案并将1.5625其用作图案图像
这是按最近邻缩放的,以避免难以检测的子像素灰度颜色。这会浪费更少的像素,但会降低 3D 扫描的精度!
这就是我在 C++ 和 VCL 中生成模式的方式:
800/512 = 1.5625
480/256 = 1.8750
Run Code Online (Sandbox Code Playgroud)
bmp是VCL位图xs,ys是位图的分辨率p[ys][xs]是直接32位像素访问位图这与您的模式编码略有不同!
[笔记]
y不同的缩放x,因为这只是一维编码