我正在处理图像处理问题。我有一台投影仪投射到屏幕上,我有一台可以拍摄照片的相机。我可以通过在屏幕上投影点并找到相机上产生的区域的质心来建立投影仪坐标子集和相机像素子集之间的1:1对应关系。因此,我有地图labview和/或openCV中图像的插值和变形
proj_x,proj_y < - > cam_x,cam_y散乱点对
我原来的计划是使用合法化在MathScript函数的GridData此地图。这将很好地工作在MATLAB,如下
[pgridx, pgridy] = meshgrid(allprojxpts, allprojypts)
fitcx = griddata (proj_x, proj_y, cam_x, pgridx, pgridy);
fitcy = griddata (proj_x, proj_y, cam_y, pgridx, pgridy);
和摄像机的反向
不幸的是投影仪的映射,此代码导致的Labview用完对meshgrid步骤存储器(相机5百万像素,这对于labview来说显然太多了)
然后我开始查看openCV,并找到了cvRemap函数。不幸的是,这个函数以一个正规化的像素像素图为起点,就像我上面想要生成的像素图。但是,这让我希望在openCV中可以使用创建这样的地图的函数。我无法在openCV 1.0 API中找到它(由于遗留原因,我坚持使用1.0),但我希望它在那里,或者有人有一个简单的窍门。
所以我的问题是下列之一
1)如何从散点在OpenCV的网格内插; (即给定z = f(x,y)散射值的x和y,如何用f填充图像(im_x,im_y)?
2)如何执行映射图像1的图像变换到图像2,因为我知道坐标系1中的点到坐标系2的分散映射。这可以在Labview或OpenCV中实现。
注:我标记这个职位德劳内,因为这是做散插值的一种方法,但更好的标签是“散插值”
您正在使用哪个版本的LV? meshgrid *的“内存不足”问题应该在LV2009中得到修复......至少,这对我们是有用的。不是说升级总是一种选择,我知道:(。 – 2010-05-25 03:56:31
8.5。我们有一个站点许可证,所以我可以在理论上升级到最新版本。实际上,2009年看起来像是一次重大升级,我不想打破现有的代码你知道内存错误是否特定于mathscript吗?插值和推断托盘上有一个vi可以做同样的事情,所以我可以只用kludge来代替。谢谢,Marc – Marc 2010-05-25 12:46:17
好的,我能够得到它通过在i&e托盘上使用vi而不是在meshgrid上工作。 – Marc 2010-05-25 14:00:00