我正在尝试跟踪一个玩具车的运动。我已经录制了一些视频,现在正在尝试计算旋转。
我的问题是从物体表面提取特征由于运动模糊而变得非常具有挑战性。下面的图像显示了从视频帧中裁剪出来的图像。失真发生在水平线上。在物体不移动时,不会出现这种失真。
图像展示了小车在穿过图像帧的对角线路径前进时的扭曲图像。
我尝试了基于中位数和方差的维纳滤波器,但它并没有多大改善。它只给了我一张平滑的图像,就像应用了高斯模糊。
我应该进行什么类型的增强以获得更好的图像?
视频-720 x 576帧-25fps
我正在尝试跟踪一个玩具车的运动。我已经录制了一些视频,现在正在尝试计算旋转。
我的问题是从物体表面提取特征由于运动模糊而变得非常具有挑战性。下面的图像显示了从视频帧中裁剪出来的图像。失真发生在水平线上。在物体不移动时,不会出现这种失真。
图像展示了小车在穿过图像帧的对角线路径前进时的扭曲图像。
我尝试了基于中位数和方差的维纳滤波器,但它并没有多大改善。它只给了我一张平滑的图像,就像应用了高斯模糊。
我应该进行什么类型的增强以获得更好的图像?
视频-720 x 576帧-25fps
考虑到您的摄像头输出隔行扫描视频,最好只使用视频的一个场。可以只使用图像的偶数行或奇数行。图像会被压缩,但不会混合两个图像。
是的,那张图片需要去交错。由于线性运动而导致的“畸变”纠正是另一回事,您需要根据车辆速度、相机距离和快门速度进行线性方向滤波。 您必须首先计算给定条件(上述条件表示捕获开始和结束时取同一点之间的偏差或距离)的脉冲响应,然后应用反滤波。如果使用Matlab,您可能需要使用一些过滤或图像处理工具包,这将很容易。
以下算法是一种非常简单的去交错方法:
cv::Mat input = cv::imread("img.jpg");
cv::Mat tmp(input.rows/2, input.cols*2, input.type(), input.data);
tmp = tmp.colRange(0, input.cols);
cv::Mat output;
cv::resize(tmp, output, Size(), 1, 2);