Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何从图像中消除运动引起的失真_Image Processing_Opencv_Computer Vision_Motion Blur - Fatal编程技术网

Image processing 如何从图像中消除运动引起的失真

Image processing 如何从图像中消除运动引起的失真,image-processing,opencv,computer-vision,motion-blur,Image Processing,Opencv,Computer Vision,Motion Blur,我在试着跟踪玩具车的运动。我已经录制了一些视频,现在正在尝试计算旋转 我的问题是,由于运动模糊,从物体表面提取特征非常困难。下图显示了视频帧中的裁剪图像。变形发生在水平线上。在这幅图像中看到的失真发生在物体移动时。当对象不移动时,没有失真 图像显示了汽车在穿过图像框的对角线路径上向前行驶时的扭曲图像 我尝试了一种基于中值和方差的维纳滤波器,但没有太大的改进。它只给了我一个平滑的图像,好像高斯模糊被应用在它上面 我应该做什么类型的增强以获得更好的图像 视频-720 x 576帧-25fps从提供

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

我的问题是,由于运动模糊,从物体表面提取特征非常困难。下图显示了视频帧中的裁剪图像。变形发生在水平线上。在这幅图像中看到的失真发生在物体移动时。当对象不移动时,没有失真

图像显示了汽车在穿过图像框的对角线路径上向前行驶时的扭曲图像

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

我应该做什么类型的增强以获得更好的图像


视频-720 x 576帧-25fps

从提供的图片来看,您似乎需要对视频进行去隔行扫描,而不仅仅是尝试过滤其中的内容;我记得这样做只是采取每隔扫描线,然后做一个调整大小,把它放回透视

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


(哦,我还没有仔细检查过图像,所以除了每隔一行之外,可能还有其他的隔行扫描方案;在这种情况下,我的第一个答案无法正常工作。这确实意味着你会失去一些分辨率,但这正是隔行扫描视频的本质…)

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

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

您尝试过:

deconvblind
按照上面的例子。它可能在您的示例图像上运行良好。
另一个示例-

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

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输出;
cv::resize(tmp,输出,Size(),1,2);

该链接非常有用。这似乎是我形象的问题。需要做更多的搜索:)