Salut, je suis Ramu. Cette fois, nous allons implémenter un filtre médian qui supprime le bruit dans l'image.
Un filtre de lissage est un filtre qui lisse une image. En appliquant ce filtre, vous pouvez rendre l'image entière floue.
Ce filtre remplace le pixel d'intérêt par la valeur moyenne des pixels périphériques. Par exemple, un filtre moyen 3x3 ou 5x5 ressemble à ceci:
En supposant que le pixel d'intérêt est le centre, la somme des produits des pixels périphériques et des valeurs de filtre correspondantes doit être remplacée par le pixel d'intérêt. Pour un filtre 3 × 3, $ I (x_0, y_0) × \ frac {1} {9} + I (x_0, y_1) × \ frac {1} {9} + ... I (x_2, y_2) × Remplacez la valeur de \ frac {1} {9} $ par le pixel d'intérêt. Or, la valeur moyenne des pixels périphériques est affectée au pixel d'intérêt.
De plus, comme dans le temps précédent, le traitement de filtrage ne peut pas être effectué sur le bord de l'image, donc un traitement de remplissage à 0 utilisant 0 est effectué pour les pixels inexistants.
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 processus de remplissage
_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()
#Création de filtres
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)
#Processus de filtrage
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
#Lecture d'image
img = cv2.imread('image.jpg')
#Filtre moyen
img = meanFilter(img,9)
#Enregistrer l'image
cv2.imwrite('result.jpg', img)
#Affichage de l'image
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
L'image de gauche est l'image d'entrée et l'image de droite est l'image de sortie. L'image de sortie semble floue et vous pouvez voir qu'elle est lissée.
Si vous avez des questions, n'hésitez pas à nous contacter. [Github] de imori_imori (https://github.com/yoyoyo-yo/Gasyori100knock/blob/master/Question_01_10/answers_py/answer_6.py) a la réponse officielle, veuillez donc vérifier cela également. .. De plus, comme python est un débutant, veuillez signaler toute erreur.
Recommended Posts