视频序列中车牌的局部增强

sal*_*cia 6 opencv video-processing

我的目标是从给定的图像序列中创建一个具有更易读的车牌号的增强图像,其中驾驶汽车的车牌难以区分,如下面的序列。

在此处输入图片说明

如您所见,车牌号在大多数情况下是无法区分的。我正在研究用于增强多帧超分辨率的实现(正如我在本文中研究的那样:http : //users.soe.ucsc.edu/~milanfar/publications/journal/SRfinal.pdf)。我对 OpenCV 有一些经验,我正在寻求帮助以采取什么方向,或者超分辨率是否真的是解决此类问题的可行选择。

mig*_*lao 3

相反,图像之间的偏移大于 1 个像素并不会妨碍子像素精度,即图像可以向右移动 3.3 个像素等。

尽管如此,您仍然需要从子像素精度开始,以估计帧之间的位移,如下所示:

cornerSubPix( imgA, cornersA, Size( win_size, win_size ), Size( -1, -1 ), 
              TermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03 ) );

cornerSubPix( imgB, cornersB, Size( win_size, win_size ), Size( -1, -1 ), 
              TermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03 ) );
Run Code Online (Sandbox Code Playgroud)

[...]

calcOpticalFlowPyrLK( imgA, imgB, cornersA, cornersB, features_found, feature_errors ,
    Size( win_size, win_size ), 5,
    cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.1 ), 0 );
Run Code Online (Sandbox Code Playgroud)

您很幸运,因为您的场景中的闪电没有大的变化(因此 PyrLK 将相当准确)并且其结构没有太大变化(因为是一个短序列)。这意味着您可以通过删除异常值并对剩余值进行平均,从场景的中心部分(汽车所在的位置)获得帧与帧之间的估计运动向量。请注意,如果汽车离您越来越近,这种方法将不起作用......

这样,最简单的超分辨率算法意味着将每个帧及其各自的位移映射到更高阶的网格(例如,2x 宽度和 2x 高度),并对它们的结果求平均值。这将解决噪音问题,并且会给你一个很好的印象,让你知道你的假设有多好。为此,您应该针对模型数据库运行(因为您有一个序列数据库可供测试,对吧?)。如果方法令人满意,您可以从文献中获取一些子算法来消除点扩散函数,这些函数通常是掩模过滤