Hallo, ich bin Ramu. Dieses Mal werden wir einen Medianfilter implementieren, der Rauschen im Bild entfernt.
Ein Glättungsfilter ist ein Filter, der ein Bild glättet. Durch Anwenden dieses Filters können Sie das gesamte Bild verschwommen erscheinen lassen.
Dieser Filter ersetzt das interessierende Pixel durch den Durchschnittswert der peripheren Pixel. Ein 3x3- oder 5x5-Durchschnittsfilter 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} {9} + I (x_0, y_1) × \ frac {1} {9} + ... I (x_2, y_2) × Ersetzen Sie das interessierende Pixel durch den Wert von \ frac {1} {9} $. Der Durchschnittswert 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.
meanFilter.py
import numpy as np
import cv2
import matplotlib.pyplot as plt
def meanFilter(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 x in range(-1*size,k-size):
for y in range(-1*size,k-size):
ker[x+size,y+size] = (1/k**2)
#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')
#Durchschnittlicher Filter
img = meanFilter(img,9)
#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.
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