13

我正在尝试跟踪玩具车的运动。我录制了一些视频,现在尝试计算旋转。

我的问题是从物体表面提取特征由于运动模糊而变得具有挑战性。下图显示了从视频帧中裁剪的图像。失真发生在水平线上。此图像中看到的失真发生在物体移动时。当物体不移动时,没有失真。

图像显示当汽车沿对角线路径向前穿过图像框时,汽车的扭曲图像。

在此处输入图像描述

我尝试了一个基于中值和方差的维纳滤波器,但它并没有做太大的改进。它只给了我一个平滑的图像,就好像在它上面应用了高斯模糊一样。

我应该做哪些类型的增强以获得更好的图像?

视频 - 720 x 576 帧 - 25fps

4

5 回答 5

10

从提供的图片看来,您需要对视频进行去隔行扫描,而不仅仅是尝试过滤那里的内容;我记得这样做是通过获取其他所有扫描线然后调整大小以使其重新透视。

我发现了一个非常酷的网站,它讨论了去隔行,以防你想看看你是否还有其他可能性:

http://www.100fps.com/

(哦,我没有仔细检查图像,所以可能有一些其他的隔行扫描方案,而不是每隔一行;在这种情况下,我的第一个答案将无法正常工作。它确实意味着你会输一些分辨率,但这只是隔行扫描视频的本质......)

于 2011-08-07T09:13:56.297 回答
2

鉴于您的相机输出隔行扫描视频,您最好使用视频的一个字段。要么只使用图像的偶数行,要么只使用奇数行。图像将被压扁,但您不会将两个图像混合在一起。

于 2011-08-07T10:10:10.020 回答
1

是的,该图像需要去隔行扫描。校正由于线性运动引起的“失真”是另一回事,您需要根据车辆的速度、到相机的距离和封闭速度进行线性方向过滤。您必须首先计算给定条件集的脉冲响应(上述条件表示在捕获开始和结束时所取的​​同一点之间的偏差或距离),然后应用逆滤波。您可能需要使用一些过滤或图像处理工具包,如果使用 Matlab 会很容易。

于 2011-08-07T11:58:12.700 回答
0

你试过了吗:

deconvblind

按照deconvblind mathworks上的示例进行操作。它可能适用于您的示例图像。另一个例子 -图像恢复

于 2014-09-12T20:52:09.020 回答
0

以下算法是一种非常简单的去隔行方法:

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);
于 2019-11-03T12:16:54.753 回答