Ich stimme der Meinung zu, dass Sie wahrscheinlich versuchen sollten, die Qualität des Eingangsbildes zu optimieren.
Nummernschildunschärfe ist ein typisches Beispiel für Bewegungsunschärfe. Wie gut Sie deblur können, hängt davon ab, wie groß oder klein der Unschärfe-Radius ist. Generell ist die Geschwindigkeit des Fahrzeugs größer, der Unschärfe-Radius größer und daher schwieriger wiederherzustellen.
Eine einfache Lösung, die etwas funktioniert, ist das Deinterlacing von Bildern.
Beachten Sie, dass es nur wenig besser lesbar als Ihr Eingangsbild ist. Hier habe ich jede zweite Zeile fallen gelassen und in der Größe des Bildes auf die Hälfte ihrer Größe mit PIL/Kissen und das ist, was ich bekommen:
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")
Die nächste und formaler Ansatz ist Entfaltungs.
Da die Unschärfe durch die Faltung von Bildern erreicht wird, erfordert Debbluring die Umkehrung der Faltung oder Entfaltung des Bildes. Es gibt verschiedene Arten von Entfaltungsalgorithmen wie die Wiener Dekonvolution, die Richardson-Lucy-Methode, die Radon-Transformation und einige Arten der Bayes-Filterung.
Sie können Wiener Dekonvolution Algorithmus mit dieser code anwenden. Spielen Sie mit dem Winkel, Durchmesser und Signal-Rausch-Verhältnis und sehen Sie, ob es einige Verbesserungen bietet.
Das Modul skimage.restoration
bietet auch die Implementierung von unsupervised_wiener
und richardson_lucy
Dekonvolution.
Im folgenden Code habe ich beide Implementierungen gezeigt, aber Sie müssen die PSF ändern, um zu sehen, welche besser passt.
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()
die meisten dieser Entfaltungs alogirthms benötigen Sie leider die Unschärfe Kernel im Voraus wissen (auch bekannt als der Point Spread Function aka PSF).
Hier, da Sie die PSF nicht kennen, so müssen Sie blinde Dekonvolution verwenden. Blind Deconvolution versucht, das Originalbild ohne Kenntnis des Unschärfe-Kernels zu schätzen.
ich dies mit Ihrem Bild nicht versucht haben, aber hier ist eine Python-Implementierung von blinden Dekonvolutionsalgorithmus: https://github.com/alexis-mignon/pydeconv
Beachten Sie, dass ein wirksames Allzweck blinder Dekonvolutionsalgorithmen ist noch nicht gefunden worden und ist ein aktives Forschungsgebiet .
Sie können die Vorteile einer hohen Unschärfe nutzen, versuchen Sie es mit einem großen Kernel. Lassen Sie uns wissen, das Ergebnis, das Sie erhalten .. –
Was meinst du mit "versuchen' open'ing mit großen Kernel " – VICTOR
Ich meinte" öffnen "die morphologische Operation, d. H." Erodieren "gefolgt von" erweitern ". Versuche es mit einem großen Kernel und experimentiere mit verschiedenen Größen. –