Maison >développement back-end >Tutoriel Python >Introduction à la vision par ordinateur avec Python (partie 1)

Introduction à la vision par ordinateur avec Python (partie 1)

PHPz
PHPzoriginal
2024-09-10 06:44:02806parcourir

Remarque : Dans cet article, nous travaillerons uniquement avec des images en niveaux de gris pour le rendre facile à suivre.

Qu'est-ce qu'une image ?

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 :

  • Binaire : Une image dans ce format est représentée par une seule matrice 2D avec des valeurs de 0 (noir) et 1 (blanc). C'est la forme la plus simple de représentation d'image.

Introduction To Computer Vision with Python (Part 1)

  • Échelle de gris : Dans ce format, une image est représentée par une seule matrice 2D avec des valeurs allant de 0 à 255 ; où 0 représente le noir et 255 représente le blanc. Les valeurs intermédiaires représentent différentes nuances de gris.

Introduction To Computer Vision with Python (Part 1)

  • Échelle RVB : Ici, une image est représentée par trois matrices 2D (une pour chaque canal de couleur : Rouge, Vert et Bleu), avec des valeurs allant de 0 à 255. Chaque matrice contient des valeurs de pixels pour une composante de couleur, et la combinaison de ces trois canaux nous donne l'image en couleur.

Introduction To Computer Vision with Python (Part 1)

Filtres

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.

Filtres moyens

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()

Introduction To Computer Vision with Python (Part 1)

Filtres médians

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()

Introduction To Computer Vision with Python (Part 1)

Filtres personnalisés

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()

Introduction To Computer Vision with Python (Part 1)

Seuil

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 :

Seuil global

Seuil simple

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()

Introduction To Computer Vision with Python (Part 1)

Otsu Thresholding

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()

Introduction To Computer Vision with Python (Part 1)

Adaptive Thresholding

Mean Adaptive Thresholding

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()

Introduction To Computer Vision with Python (Part 1)

Gaussian Adaptive Thresholding

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()

Introduction To Computer Vision with Python (Part 1)

References

  • Encord.com
  • Pyimagesearch.com
  • OpenCV Thresholding
  • OpenCV Filtering

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn