62.去运动模糊滤波器-OpenCV从零开始到图像识别

本文作者:小嗷

微信公众号:aoxiaoji

链接:

https://f600lt.github.io/2018/08/06/xiaoaoderichang/

在本篇中,您将学习:

小嗷相信你们在前几篇和以前的文章中,比较彻底认知到傅里叶变换的实际用途(不懂找我吧)。

有个小伙伴问小嗷图像处理和识别的极限到底能去到哪里?(有啥用)

按理来说,PS来做的,程序都能做。人的识别其实从某种意义来说,就是特征值的识别。大家接触久的,或许就感觉没什么高大上。(反正小嗷就是这样)

本文你会找到以下问题的答案:

什么是运动模糊图像的PSF

如何恢复运动模糊图像

2.1 什么是运动模糊图像的PSF ?

线性运动模糊畸变的点扩散函数为线段。这种PSF由两个参数指定:LEN 是模糊的长度,THETA是运动的角度

点扩散函数的一个线性运动模糊失真

因为大部分函数都在以前写过解释。所以,小嗷就不写了。

什么是振铃效应,小嗷在10几20篇写过,不懂就自己查或者找小嗷

本篇文章的代码如下所示。

您可以在示例/cpp/tutorialcode/ImgProc/motiondeblur_filter/motiondeblurfilter中找到源代码。

下面你可以看到真实世界的图像与运动模糊失真。这两辆车的车牌都看不清。红色的标记显示了汽车的车牌位置。

2.png

如上图运动模糊图像,车牌是看不清

下面你可以看到黑色汽车牌照的恢复结果。计算结果是LEN = 125, THETA = 0, SNR = 700。

3.png

修复后的黑色汽车牌照图像(这个是用辣鸡摄像头拍的。所以,无法做到每秒N张,将就用用就好)

下面你可以看到白色车牌的恢复结果。结果是LEN = 78, THETA = 15, SNR = 300。

4.png

恢复的白色汽车牌照的图像

人工选择SNR、LEN和THETA的值,以获得最好的视觉效果。THETA参数与汽车的运动方向一致,LEN LEN参数取决于汽车的运动速度。结果并不完美,但至少它给了我们图像内容的暗示。经过一些努力,汽车牌照现在可以读了。

还有一种方法就通过机器学习 + 流光 + 算法,自动调节参数,识别到车牌号为止。

解释一下:

一种运动模糊图像恢复算法由PSF生成、维纳滤波生成和频域滤波三部分组成:

一个函数calcPSF()根据输入参数LEN和THETA (in degrees)形成一个PSF:

一个函数edgetaper()使输入图像的边缘逐渐变细,以减少图像恢复时的振铃效果:

calcWnrFilter()、fftshift()、filter2DFreq()等功能在频域中通过指定的PSF实现图像过滤。这些函数是从第60篇中复制过来的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181024G0B2ZV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券