我有一个系统,我投影一组图像,然后使用相机读取投影的内容。当有人站在投影前面时,我需要知道他们站在投影的哪一部分。我可以很容易地检测到这个人,我只需要找到一种方法,将在相机中检测到的点映射回正在发送到投影仪的图像。
我尝试使用findhomogry(使用显示图像和投影图像的角),但所得到的矩阵没有给出准确的结果。有其他的想法(或技巧让findHomography工作)?
我猜从相机捕获的图像是相当模糊,嘈杂和扭曲的,我猜你以某种方式检测/跟踪投影图像的角落。
一个重要的事情要做的是校准你的相机,以消除径向镜头畸变,如果你还没有这样做:http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
投影仪可能也有径向畸变,这也可以用你新校准的相机校准。我不知道你是否有运气找到现成的解决方案。你可能不得不涉及一些严重的优化问题域,类似于相机校准问题。
以上都解决了,你还有问题…,因为你捕获的图像是模糊和嘈杂的,你会在角落跟踪错误。这意味着只有4个点,这些错误在产生的视角扭曲中严重表现出来。点对应提取的误差具有一定的概率分布。如果你假设它是正态的,大多数情况下,除了离群值,它是正态的,那么这仅仅意味着你的误差的标准差太大。现在,大数定律向你保证,如果你增加样本数量,你将接近均值,在这种情况下,是正确的投影。
我想说的是,你需要更多的点对应来对抗噪声,或者更精确地检测少数点。如果你总是/通常在投影图像中有一些好的特征,并且你愿意花费计算能力,你可以使用特征匹配:http://docs.opencv.org/doc/tutorials/features2d/feature_description/feature_description.html