介绍
Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。
该论文提出了一个新的运动模型MeshFlow,它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field),其运动矢量 (motion vectors) 仅在网格顶点 (mesh vertexes) 处定义,它可被视为一个下采样的dense flow。具体来说,我们在视频帧上放置一个2D网格,然后跟踪连续帧之间的图像角点 (image corners),从而在每个特征位置生成运动矢量,然后将这些运动矢量转移到其对应的附近网格顶点,以使每个顶点从其周围特征中累积几个运动。MeshFlow是一个稀疏的运动矢量2D数组,其包含所有网格顶点处的运动。
该模型具有轻量级、非参数化、空间变形体等内在特征,能够有效地实现多帧图像的去噪。具体来说,meshflow是在相邻帧之间进行估计的,这些帧用于在一个滑动时间窗口内对齐帧。一个去噪的帧是由几帧在空间和时间的方式与离群拒绝融合产生的。各种具有挑战性的例子证明了该方法的有效性和实用性。
- 项目地址:http://www.liushuaicheng.org/ICIP/2017/index.html
- 论文下载地址:https://download.csdn.net/download/yanceyxin/89273166
- git 地址:https://github.com/AlbusPeter/MeshFlow_Video_Denoising
关于Meshflow
Meshflow 算法是一种用于视频稳定和去噪的先进算法,它利用了一种新颖的运动模型来补偿相机运动。以下是关于 Meshflow 算法的一些关键点:
-
在线视频稳定:Meshflow 算法提出了一种只有一帧延迟的在线视频稳定技术。
-
运动模型:Meshflow 是一个空间平滑的稀疏运动场,其中运动向量仅定义在网格顶点上。
-
特征点跟踪:通过在连续帧之间的图像特征角点跟踪,产生运动向量,这些向量随后被转移到相应的网格顶点。
-
运动向量分配:网格顶点通过两个中值滤波器被分配唯一的运动矢量,以实现平滑效果。
-
路径平滑:Meshflow 通过平滑技术,即预测的自适应路径平滑(Predicted Adaptive Path Smoothing,简称 PAPS),来平滑轨迹。
-
实时工作:所提出的方法可以实时在线工作,适用于多种智能应用程序,如安全系统、机器人、无人机等。
-
效率和效果:Meshflow 算法在计算效率和视频稳定效果上与现有的离线方法相比具有优势。
-
视频去噪:Meshflow 还被用于视频去噪,通过利用 Meshflow 运动模型对相机运动进行补偿,产生干净的视频。
-
非参数形式:Meshflow 的非参数形式和空间变化的运动表示使其在多帧去噪中非常有效和高效。
-
资源:有开源实现和研究论文提供了 Meshflow 算法的更多细节和应用示例。
Meshflow 算法因其高效和实用性,在视频处理领域得到了广泛的关注和应用。它特别适用于需要实时视频稳定的场景,如无人机拍摄、手持摄像机录制等。同时,Meshflow 算法也可以用于视频去噪,提高视频质量。
原理
-
算法系统 pipeline
-
Meshflow运动模型
Meshflow是一种稀疏运动场。它经常被用来估计相邻帧之间的运动。Meshflow 的运动模型建立过程如下:
(1)Rich Features:检测快速图像特征,并通过KLT跟踪到相邻帧。
(2)Motion Propagation:每个匹配的特征对产生一个运动矢量。
(3)Median Filters:每个网格顶点应该只有一个唯一的运动矢量,它是由中值滤波器从每个顶点的运动候选数据中提取的。
(4)Notations:运动符号标记。
-
Motions Accumulation 运动积累
(1)运动追踪
(2)运动积累
-
Fusing 融合
就是对齐后不同帧之间像素灰度值差小于一定阈值的像素进行平均作为当前帧的灰度值,这种简单的融合在灰度变化明显的区域容易造成"坏点",会带来"鬼影"现象。
结果
- 性能
在Intel i7 4.0GHz CPU和16G RAM上运行未优化c++实现平均可以处理260ms分辨率为1920×1080的帧;具体Meshflow方法分别需要27ms、21ms、38ms、25ms和149ms来跟踪特征 、估计网格流 、累积运动 、检查一致性 和融合像素。该方法还可以通过GPU进一步加速,特别是对于具有高度并行性的融合。 - 效果
代码示例
该作者在git提供了完整的c++代码实现,具体使用可参考README.md。
bash
# MeshFlow_Video_Denoising
Source Code for MeshFlow Video Denoising <br> <br>
![showcase](https://github.com/AlbusPeter/AlbusPeter.github.io/blob/master/projects/Meshflow-video-denoising/denoise.gif)
OpenCV Version:2.4.11<br><br>
This source code may not have the same processing speed as the paper illustrated. Because I replace the original matching algorithm into a simple one. This may also influence the quality of the denoising result a little. For more project detail, including the academic paper, project abstract and test data, please visiting the project page at http://www.liushuaicheng.org/ICIP/2017/index.html. <br><br>
Usage
1. Create a new folder `build`<br>
2. Inside the folder, using the code below for cmake to build the project files:<br>
cmake DCMAKE_BUILD_TYPE=Release ..
3. Move the test video into this new folder and run this project.<br><br>
For `Visual Studio` users, when run the project file, you should change the `single startup project` option in the solution property into the correct one (not the `ALLBUILD.EXE`).<br>
For Windows users, using `Cmakelists.txt` as the cmakelist. (Remember to change the path for the OpenCV build folder.)<br>
For Linux users, using `Cmakelists_Linux.txt` as the cmakelist.<br><br>
For further questions, feel free to contact me at `albuspeter.rzh@gmail.com`.<br>
Thanks [Guo Heng](https://github.com/GH_HOME) who helped me on the Cmake lists.
Citation
If you find this useful in your research, please cite our paper "Meshflow Video Denoising" ([PDF](https://ieeexplore.ieee.org/document/8296826)):
@inproceedings{ren2017meshflow,
title={Meshflow video denoising},
author={Ren, Zhihang and Li, Jiajia and Liu, Shuaicheng and Zeng, Bing},
booktitle={2017 IEEE International Conference on Image Processing (ICIP)},
pages={2966--2970},
year={2017},
organization={IEEE}
}