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

时间:2014-02-12 00:05:06

标签: opencv video-processing

我的目标是创建一个增强的图像,其中包含一系列图像中更易读的车牌号码,驾驶汽车上的牌照无法区分,例如下面的序列。

enter image description here

正如您所看到的,大多数情况下,印版数量难以区分。我正在研究增强的实现,例如多帧的超分辨率(正如我在本文中所研究的那样:http://users.soe.ucsc.edu/~milanfar/publications/journal/SRfinal.pdf)。我有一些OpenCV的经验,我正在寻找帮助的方向,或者超分辨率对于这类问题是否真的可行。

1 个答案:

答案 0 :(得分:2)

相反,在大于一个像素的图像之间进行移位不会妨碍子像素精度,即图像可以向右移动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 ) );

[...]

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 );

你很幸运,因为你的场景闪电没有大的变化(所以PyrLK会相当准确),它的结构变化不大(因为序列很短)。这意味着您可以通过移除异常值并对剩余的异常值求平均值,从场景的中心部分(汽车所在的位置)逐帧获得估计的运动矢量。请注意,如果汽车越来越靠近你,这种方法就行不通了......

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