我正在做一个车牌识别。我已经把盘子剪出来了,但是它是非常模糊的。因此,我无法拆分数字/字符并识别它。
这是我的形象:

我尝试通过使用scikit图像函数来去除 it。
首先,导入库:
import cv2
from skimage import restoration
from skimage.filters import threshold_otsu, rank
from skimage.morphology import closing, square, disk然后,我读取图像并将其转换为灰度。
image = cv2.imread("plate.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)我试着用消除噪音
denoise = restoration.denoise_tv_chambolle(image , weight=0.1)
thresh = threshold_otsu(denoise)
bw = closing(denoise > thresh, square(2))我得到的是:

如您所见,所有的数字都是混合在一起的。因此,我无法分离并逐个识别字符。
我所期望的是这样的东西(我画的):

我正在寻找帮助,我如何更好地过滤图像?谢谢。
===================================================================== 更新
在使用skimage.morphology.erosion之后,我得到了:

发布于 2016-08-17 03:40:07

带有图像增强的二进制内核的ChanVeseBinarize给了我这个结果。这有助于突出显示4,8,1和2。我想你需要对每个字符进行单独的卷积,如果卷积的峰值高于阈值,我们可以假设字母在峰值的位置出现。为了处理失真,您需要使用给定字符的几种不同类型的字体进行卷积。

另一个潜在的改进使用导数滤波器和一点点高斯平滑。K&X不像以前的解那样扭曲。
发布于 2016-08-15 16:49:36
首先,这个图像似乎更容易被模糊所玷污,而不是被noize所玷污,所以没有充分的理由去淡化它,而是尝试去模糊化。
最简单的是逆滤波,甚至是Wiener滤波。然后,您将需要通过亮度级别将图像的背景和字母分开,例如,使用分水岭算法。然后,您将得到单独的字母,您需要通过一个分类器,例如,基于神经网络(即使是简单的前馈网络也可以)。
然后你最终会得到文本表示。这就是人们通常如何认识到的。有好的冈萨雷斯和伍兹的书,尝试寻找详细的解释那里。
发布于 2016-08-16 09:27:06
我同意这样的观点:您可能应该尝试优化输入图像的质量。
车牌模糊是运动模糊的一个典型例子。你的模糊度取决于模糊半径有多大或多小。一般情况下,车速越大,模糊半径越大,因此很难恢复。
一个简单的解决方案,多少有些工作是去交错的图像。

请注意,它只比输入图像的可读性略高。在这里,我删除了每一条备用行,并使用PIL/Pillow将图像调整到一半大小,这就是我得到的结果:
from PIL import Image
img=Image.open("license.jpeg")
size=list(img.size)
size[0] /= 2
size[1] /= 2
smaller_image=img.resize(size, Image.NEAREST)
smaller_image.save("smaller_image.png")下一个也是更正式的方法是deconvolution.。
由于模糊是利用图像的卷积来实现的,因此去模糊需要对图像进行反卷积或反褶积。现有的反褶积算法有Wiener反褶积算法、Richardson-Lucy方法、Radon变换和几种贝叶斯滤波算法。
您可以使用此代码应用Wiener反褶积算法。播放角度,直径和信噪比,看看它是否提供了一些改进。
skimage.restoration模块还提供了unsupervised_wiener和richardson_lucy反褶积的实现。
在下面的代码中,我展示了这两种实现,但是您必须修改psf,看看哪一种更适合。
import numpy as np
import matplotlib.pyplot as plt
import cv2
from skimage import color, data, restoration
from scipy.signal import convolve2d as conv2
img = cv2.imread('license.jpg')
licence_grey_scale = color.rgb2gray(img)
psf = np.ones((5, 5)) / 25
# comment/uncomment next two lines one by one to see unsupervised_wiener and richardson_lucy deconvolution
deconvolved, _ = restoration.unsupervised_wiener(licence_grey_scale, psf)
deconvolved = restoration.richardson_lucy(licence_grey_scale, psf)
fig, ax = plt.subplots()
plt.gray()
ax.imshow(deconvolved)
ax.axis('off')
plt.show()不幸的是,大多数反褶积要求你提前知道模糊核(也就是点扩展函数,也就是PSF)。
在这里,由于你不知道PSF,所以你必须使用盲反褶积。盲反褶积试图在不了解模糊核的情况下对原始图像进行估计。
我还没有尝试过这一点,但是这里有一个盲反褶积算法的Python实现:https://github.com/alexis-mignon/pydeconv
值得注意的是,一个有效的通用盲反褶积算法尚未被发现,是一个活跃的研究领域。
https://stackoverflow.com/questions/38820743
复制相似问题