我目前正在使用OpenCV实现立体视觉。现在我正在使用Stereo_Calib样本来消除失真以纠正图像。删除失真效果很好。
但是当我进行整改时,图像会变形。
这是纠正图像的代码。参数rmap的计算方法与Stereo_calib示例相同(参见here)
void StereoCalibration::StereoRectify(Mat &imageLeft, Mat &imageRight)
{
Mat imLeft, imRight;
remap(imageLeft, imLeft,DistLeft.rmap[0], DistLeft.rmap[1], CV_INTER_CUBIC);
remap(imageRight,imRight, DistRight.rmap[0], DistRight.rmap[1], CV_INTER_CUBIC);
imageLeft = imLeft;
imageRight = imRight;
}
答案 0 :(得分:0)
我有同样的问题,我认为问题是用于校准或混合地图的坏棋盘。
答案 1 :(得分:0)
我意识到这个问题已经有几年了,但我最近遇到了类似的问题。基于morynicz关于“坏棋盘”模式的答案来校准立体图像,我发现即使棋盘图案略有变形,例如它不平坦,也会在立体图像对中产生大的翘曲关于整改。例如,OpenCV中的算法假设呈现平坦的棋盘图案,使得该图案中的任何物理变形将错误地归因于相机光学器件中的失真(或者两个相机传感器的相对取向)。 。然后算法将非常努力地消除这种假失真,从而导致非常翘曲的图像。
为了避免这个问题,可以使用平板电脑(或其他电子屏幕)显示棋盘图案,因为它保证是平的。
此外,您应检查用于校准立体声对的图像是否清晰对焦并且没有运动模糊或图像撕裂。
如果使用OpenCV进行整改,请对stereoCalibrate函数中使用的标志进行一些实验,因为这可能会为您的特定应用程序进行更“优化”的整改。
答案 2 :(得分:0)
我最近开始从事opencv立体图像的校准和校正工作,并且得到的图像相似。尽管确实可以确保电路板是直的,并且确实确实需要在不同的x,y,z和偏斜位置在相机的角落和中间拍摄多张图像,但对我来说,诀窍是stereoCalibrate中的标志。除了INTRINSIC_GUESS之外,我都使用了opencv文档中指定的所有标志,并且该标志开始显示非常不错的未失真和经过校正的图像。