Remarque : Dans cet article, nous travaillerons uniquement avec des images en niveaux de gris pour le rendre facile à suivre.
Une image peut être considérée comme une matrice de valeurs, où chaque valeur représente l'intensité d'un pixel. Il existe trois principaux types de formats d'image :
Les filtres sont des outils utilisés pour modifier les images en appliquant certaines opérations. Un filtre est une matrice (également appelée noyau) qui se déplace sur l'image et effectue des calculs sur les valeurs des pixels dans sa fenêtre. Nous aborderons deux types courants de filtres : les filtres moyens et les filtres médians.
Un filtre moyen est utilisé pour réduire le bruit en faisant la moyenne des valeurs de pixels dans une fenêtre. Il remplace le pixel central de la fenêtre par la moyenne de toutes les valeurs de pixels de cette fenêtre. La fonction cv2.blur() applique un filtre moyen avec une taille de noyau de 3x3, ce qui signifie qu'elle considère une fenêtre 3x3 de pixels autour de chaque pixel pour calculer la moyenne. Cela aide à lisser l'image.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Mean Filter of size 3 x 3 blurred_image = cv2.blur(image, (3, 3)) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Mean Filtered Image') plt.axis("off") plt.show()
Un filtre médian est utilisé pour réduire le bruit en remplaçant la valeur de chaque pixel par la valeur médiane de tous les pixels d'une fenêtre. Il est particulièrement efficace pour éliminer le bruit poivre et sel. La fonction cv2.medianBlur() applique un filtre médian avec une taille de noyau de 3. Cette méthode remplace chaque pixel par la valeur médiane des valeurs de pixel de son voisinage, ce qui aide à préserver les bords tout en supprimant le bruit. Ici, plus la taille du noyau est grande, plus l'image devient floue.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Median Filter with a kernel size of 3 blurred_image = cv2.medianBlur(image, 3) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Median Filtered Image') plt.axis("off") plt.show()
Vous pouvez créer des filtres personnalisés pour appliquer des opérations spécifiques sur vos images. La fonction cv2.filter2D() vous permet d'appliquer n'importe quel noyau personnalisé à une image. La fonction cv2.filter2D() applique un noyau personnalisé (filtre) à l'image. Le noyau est une matrice qui définit l'opération à effectuer sur les valeurs des pixels. Dans cet exemple, le noyau améliore certaines fonctionnalités de l'image en fonction des valeurs spécifiées.
import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Define a custom filter kernel kernel = np.array([[2, -1, 5], [-5, 5, -1], [0, -1, 0]]) filtered_image = cv2.filter2D(image, -1, kernel) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(filtered_image, cmap='gray') plt.title('Filtered Image') plt.axis('off') plt.show()
Remarque : Dans les extraits de code, vous verrez _ , image lors de l'attribution de l'image seuillée. En effet, la fonction cv2.threshold renvoie deux valeurs : la valeur seuil utilisée et l'image seuillée. Puisque nous n’avons besoin que de l’image seuillée, nous utilisons _ pour ignorer la valeur seuil.
Le seuil convertit une image en image binaire en définissant les valeurs de pixels en fonction d'une condition. Il existe plusieurs types de techniques de seuillage :
Cette méthode définit une valeur seuil fixe pour l'ensemble de l'image. Les pixels avec des valeurs supérieures au seuil sont définis sur la valeur maximale (255) et ceux en dessous sont définis sur 0. La fonction cv2.threshold() est utilisée pour un seuillage simple. Les pixels d'intensité supérieure à 127 sont définis sur blanc (255) et ceux dont l'intensité est inférieure ou égale à 127 sont définis sur noir (0), produisant une image binaire.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(thresholded_image, cmap='gray') plt.title('Thresholded Image') plt.axis("off") plt.show()
La méthode d'Otsu détermine automatiquement la valeur seuil optimale en fonction de l'histogramme de l'image. Cette méthode minimise la variance intra-classe et maximise la variance inter-classe. En définissant la valeur seuil sur 0 et en utilisant cv2.THRESH_OTSU, la fonction calcule automatiquement la meilleure valeur seuil pour séparer le premier plan de l'arrière-plan.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, otsu_thresholded_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(otsu_thresholded_image, cmap='gray') plt.title("Otsu's Thresholded Image") plt.axis("off") plt.show()
Dans le seuil adaptatif moyen, la valeur seuil de chaque pixel est calculée en fonction de la moyenne des valeurs de pixel dans un quartier local autour de ce pixel. Cette méthode ajuste le seuil de manière dynamique sur différentes régions de l'image. La fonction cv2.adaptiveThreshold() calcule le seuil pour chaque pixel en fonction de la valeur moyenne des valeurs de pixel dans un quartier local 11x11. Une valeur constante de 2 est soustraite à cette moyenne pour affiner le seuil. Cette méthode est efficace pour les images présentant des conditions d'éclairage variables.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) mean_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(mean_adaptive_thresholded_image, cmap='gray') plt.title('Mean Adaptive Thresholded Image') plt.axis("off") plt.show()
Le seuil adaptatif gaussien calcule la valeur de seuil pour chaque pixel sur la base d'une somme pondérée gaussienne des valeurs de pixels dans un quartier local. Cette méthode donne souvent de meilleurs résultats dans les cas d’éclairage non uniforme. Dans le seuil adaptatif gaussien, le seuil est déterminé par une somme pondérée gaussienne des valeurs de pixels dans un voisinage 11x11. La valeur constante 2 est soustraite de cette moyenne pondérée pour ajuster le seuil. Cette méthode est utile pour gérer des images avec des éclairages et des ombres variables.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) gaussian_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(gaussian_adaptive_thresholded_image, cmap='gray') plt.title('Gaussian Adaptive Thresholded Image') plt.axis("off") plt.show()
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3