Salut, je suis Ramu. Cette fois, nous allons implémenter un filtre de mouvement, qui est un filtre qui ajoute du mouvement à 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. Surtout avec ce filtre de mouvement, un flou fluide est possible.
Ce filtre remplace le pixel d'intérêt par la moyenne diagonale des pixels périphériques. Par exemple, un filtre de mouvement 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} {3} + I (x_1, y_1) × \ frac {1} {3} + I (x_2, y_2) × \ frac { Remplacez le pixel d'intérêt par la valeur 1} {3} $. Or, la valeur moyenne des lignes diagonales 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.
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 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 filtre
ker = np.zeros((k,k), dtype=np.float)
for i in range(-1*size,k-size):
ker[i+size,i+size] = 1/k
#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 de mouvement
#Deuxième argument: taille du filtre
img = motionFilter(img,21)
#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. De plus, contrairement aux autres filtres de lissage, il s'écoule dans la direction diagonale du filtre.
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