Hallo, ich bin Ramu. Dieses Mal werden wir einen Bewegungsfilter implementieren, der dem Bild Bewegung hinzufügt.
Ein Glättungsfilter ist ein Filter, der ein Bild glättet. Durch Anwenden dieses Filters können Sie das gesamte Bild verschwommen erscheinen lassen. Insbesondere mit diesem Bewegungsfilter ist eine Flüssigkeitsunschärfe möglich.
Dieser Filter ersetzt das interessierende Pixel durch den diagonalen Durchschnitt der peripheren Pixel. Ein 3x3- oder 5x5-Bewegungsfilter sieht beispielsweise folgendermaßen aus:
Unter der Annahme, dass das interessierende Pixel das Zentrum ist, sollte das interessierende Pixel durch die Summe der Produkte der peripheren Pixel und der entsprechenden Filterwerte ersetzt werden. Für einen 3 × 3-Filter ist $ I (x_0, y_0) × \ frac {1} {3} + I (x_1, y_1) × \ frac {1} {3} + I (x_2, y_2) × \ frac { Ersetzen Sie das interessierende Pixel durch den Wert 1} {3} $. Der Durchschnittswert der diagonalen Linien der peripheren Pixel wird nun dem interessierenden Pixel zugewiesen.
Wie in der vorherigen Zeit kann die Filterverarbeitung nicht am Bildrand ausgeführt werden, sodass für nicht vorhandene Pixel eine 0-Auffüllverarbeitung mit 0 durchgeführt wird.
motionFilter.py
import numpy as np
import cv2
import matplotlib.pyplot as plt
def motionFilter(img,k):
w,h,c = img.shape
size = k // 2
#0 Auffüllvorgang
_img = np.zeros((w+2*size,h+2*size,c), dtype=np.uint8)
_img[size:size+w,size:size+h] = img.copy().astype(np.uint8)
dst = _img.copy()
#Filtererstellung
ker = np.zeros((k,k), dtype=np.float)
for i in range(-1*size,k-size):
ker[i+size,i+size] = 1/k
#Filterprozess
for x in range(w):
for y in range(h):
for z in range(c):
dst[x+size,y+size,z] = np.sum(ker*_img[x:x+k,y:y+k,z])
dst = dst[size:size+w,size:size+h].astype(np.uint8)
return dst
#Bild lesen
img = cv2.imread('image.jpg')
#Bewegungsfilter
#Zweites Argument: Filtergröße
img = motionFilter(img,21)
#Bild speichern
cv2.imwrite('result.jpg', img)
#Bildschirm
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
Das Bild links ist das Eingabebild und das Bild rechts ist das Ausgabebild. Das Ausgabebild sieht verschwommen aus und Sie können sehen, dass es geglättet ist. Im Gegensatz zu anderen Glättungsfiltern fließt es auch in diagonaler Richtung des Filters.
Wenn Sie Fragen haben, können Sie sich gerne an uns wenden. imori_imoris Github hat die offizielle Antwort. Bitte überprüfen Sie dies ebenfalls. .. Da Python ein Anfänger ist, weisen Sie bitte auf Fehler hin.
Recommended Posts