"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Introduction à la vision par ordinateur avec Python (partie 1)

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

Publié le 2024-11-05
Parcourir:258

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 une 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 aborderons 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)

Seuil Otsu

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

Introduction To Computer Vision with Python (Part 1)

Seuil adaptatif

Seuil adaptatif moyen

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

Introduction To Computer Vision with Python (Part 1)

Seuil adaptatif gaussien

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

Introduction To Computer Vision with Python (Part 1)

Références

  • Encord.com
  • Pyimagesearch.com
  • Seuil OpenCV
  • Filtrage OpenCV
Déclaration de sortie Cet article est reproduit sur : https://dev.to/thecspandz/introduction-to-computer-vision-with-python-part-1-2kd?1 En cas de violation, veuillez contacter [email protected] pour supprimer il
Dernier tutoriel Plus>

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