Maison >développement back-end >Tutoriel Python >Introduction à la vision par ordinateur avec Python (partie 1)
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 couvrirons 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()
Otsu's method determines the optimal threshold value automatically based on the histogram of the image. This method minimizes intra-class variance and maximizes inter-class variance. By setting the threshold value to 0 and using cv2.THRESH_OTSU, the function automatically calculates the best threshold value to separate the foreground from the background.
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()
In Mean Adaptive Thresholding, the threshold value for each pixel is calculated based on the average of pixel values in a local neighborhood around that pixel. This method adjusts the threshold dynamically across different regions of the image. The cv2.adaptiveThreshold() function calculates the threshold for each pixel based on the mean value of the pixel values in a local 11x11 neighborhood. A constant value of 2 is subtracted from this mean to fine-tune the threshold. This method is effective for images with varying lighting conditions.
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()
Gaussian Adaptive Thresholding computes the threshold value for each pixel based on a Gaussian-weighted sum of the pixel values in a local neighborhood. This method often provides better results in cases with non-uniform illumination. In Gaussian Adaptive Thresholding, the threshold is determined by a Gaussian-weighted sum of pixel values in an 11x11 neighborhood. The constant value 2 is subtracted from this weighted mean to adjust the threshold. This method is useful for handling images with varying lighting and shadows.
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()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!