Avez-vous déjà rencontré des images de mauvaise qualité dans un projet d'apprentissage automatique ou de vision par ordinateur ? Les images sont l’élément vital de nombreux systèmes d’IA, mais toutes les images ne sont pas égales. Avant de former un modèle ou d'exécuter un algorithme, un prétraitement des images est généralement nécessaire pour obtenir des résultats optimaux. Le prétraitement d'images en Python deviendra votre nouvel ami.
Dans ce guide, vous apprendrez tous les trucs et astuces pour préparer des images pour l'analyse à l'aide de Python. Nous couvrirons tout, du redimensionnement et du recadrage à la réduction du bruit et à la normalisation. À ce stade, vos images seront prêtes pour une analyse détaillée. Avec l'aide de bibliothèques telles que OpenCV, Pillow et scikit-image, vous pourrez améliorer les images en un rien de temps. Alors préparez-vous et plongez dans ce guide complet des techniques de prétraitement d'images en Python !
Le prétraitement d'image est le processus de traitement des données d'image brutes dans un format utilisable et significatif. Il est conçu pour éliminer les distorsions inutiles et améliorer les caractéristiques spécifiques requises pour les applications de vision par ordinateur. Le prétraitement est une première étape essentielle dans la préparation des données d’image avant de les introduire dans un modèle d’apprentissage automatique.
Plusieurs techniques sont utilisées dans le prétraitement des images :
Avec la bonne combinaison de ces techniques, vous pouvez améliorer considérablement vos données d'image et créer de meilleures applications de vision par ordinateur. Le prétraitement des images améliore la qualité et la convivialité des images en convertissant les images brutes dans un format adapté à la résolution de problèmes.
Pour commencer à utiliser Python pour le traitement d'images, il existe deux options populaires pour charger et convertir des images dans des formats que la bibliothèque peut gérer : OpenCV et Pillow.
Charger des images à l'aide d'OpenCV : OpenCV peut charger des images aux formats PNG, JPG, TIFF et BMP. Vous pouvez charger l'image en utilisant le code suivant :
import cv2image = cv2.imread('path/to/image.jpg')
Cela chargera l'image sous forme de tableau NumPy. Étant donné que l'image est dans l'espace colorimétrique BGR, vous souhaiterez peut-être la convertir en RVB.
Charger des images à l'aide de Pillow : Pillow est un fork convivial de PIL (Python Image Library). Il prend en charge plus de formats qu'OpenCV, notamment PSD, ICO et WEBP. Vous pouvez charger l'image en utilisant le code suivant :
from PIL import Imageimage = Image.open('path/to/image.jpg')
L'image sera dans l'espace colorimétrique RVB.
Convertir entre les espaces colorimétriques : Vous devrez peut-être effectuer une conversion entre des espaces colorimétriques tels que RVB, BGR, HSV et niveaux de gris. Cela peut être fait en utilisant OpenCV ou Pillow. Par exemple, pour convertir BGR en niveaux de gris dans OpenCV, vous pouvez utiliser :
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Ou pour convertir RVB en HSV dans Pillow, vous pouvez utiliser :
image = image.convert('HSV')
Avec ces compétences de base, vous pouvez passer à des techniques plus avancées, telles que redimensionnement, filtrage, détection des contours, etc. Les possibilités sont infinies! Quel type de projet de traitement d’image allez-vous construire ?
调整大小和裁剪图像是图像预处理的重要第一步。图像大小各异,但机器学习算法通常需要标准大小。您需要将图像调整大小和裁剪为方形尺寸,通常是224x224或256x256像素。在Python中,您可以使用OpenCV或Pillow库进行调整大小和裁剪。使用OpenCV,可以使用resize()函数。例如:
import cv2img = cv2.imread('original.jpg')resized = cv2.resize(img, (224, 224))
这将将图像调整为224x224像素。要将图像裁剪为正方形,可以计算中心正方形裁剪大小并使用OpenCV的crop()与中心坐标。例如:
height, width, _ = img.shapesize = min(height, width)x = (width size) // 2y = (height size) // 2cropped = img[y:y+size, x:x+size]
使用Pillow,您可以使用Image.open()和resize()函数。例如:
from PIL import Imageimg = Image.open('original.jpg')resized = img.resize((224, 224))
裁剪图像时,使用img.crop()。例如:
width, height = img.sizesize = min(width, height)left = (width size) / 2top = (height size) / 2right = (width + size) / 2bottom = (height + size) / 2cropped = img.crop((left, top, right, bottom))
调整大小和裁剪图像至标准尺寸是一个至关重要的第一步。这将使您的机器学习模型能够有效地处理图像,并提高结果的准确性。花时间仔细调整大小和裁剪图像,您的模型将感激不尽!
在处理图像数据时,将像素值归一化以保持一致的亮度并提高对比度是很重要的。这使图像更适合进行分析,并使机器学习模型能够独立于光照条件学习模式。
像素值重新缩放:最常见的归一化技术是将像素值重新缩放到0到1的范围内。这是通过将所有像素除以最大像素值(RGB图像通常为255)来实现的。例如:
import cv2img = cv2.imread('image.jpg')normalized = img / 255.0
这将使所有像素在0到1之间缩放,其中0为黑色,1为白色。
直方图均衡化:另一种有用的技术是直方图均衡化。这将像素强度均匀分布到整个范围以提高对比度。可以使用OpenCV的equalizeHist()方法应用它:
eq_img = cv2.equalizeHist(img)
这对于像素值集中在一个狭窄范围内的低对比度图像效果很好。对于一些算法,将像素值归一化为零均值和单位方差是有用的。这可以通过减去均值并缩放到单位方差来实现:
mean, std = cv2.meanStdDev(img)std_img = (img mean) / std
这将使图像以零为中心,标准差为1。还有一些其他更复杂的归一化技术,但这三种方法——重新缩放为0-1范围、直方图均衡化和标准化——涵盖了基础知识,将为大多数机器学习应用准备好图像数据。确保对训练和测试数据都应用相同的归一化以获得最佳结果。
一旦您在Python中加载了图像,就是时候开始增强它们了。图像滤镜用于减少噪声、增强细节,总体提高图像在分析之前的质量。以下是您需要了解的一些主要滤镜:
高斯模糊滤镜用于减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这有助于在进行边缘检测或其他处理技术之前平滑边缘和细节。
中值模糊滤镜用于从图像中去除椒盐噪声。它通过用其邻近像素的中值替换每个像素来工作。这有助于平滑孤立的嘈杂像素同时保留边缘。
拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化较快的区域来工作。输出将是突出显示边缘的图像,可用于边缘检测。这有助于识别和提取图像中的特征。
反向掩蔽是一种用于增强图像中细节和边缘的技术。它通过从原始图像中减去模糊版本来实现。这会放大边缘和细节,使图像看起来更清晰。反向掩蔽可用于在特征提取或对象检测之前增强细节。
Le filtre bilatéral préserve les bords tout en lissant l'image. Pour ce faire, il prend en compte la proximité spatiale et la similitude des couleurs des pixels. Les pixels spatialement proches et de couleur similaire sont lissés ensemble, tandis que les pixels de couleur différente ne sont pas lissés. Il en résulte une image lisse dont les bords restent nets. Les filtres bilatéraux sont utiles pour la réduction du bruit avant la détection des contours.
En appliquant ces filtres, vous obtiendrez des images améliorées de haute qualité, prêtes pour des tâches d'analyse approfondie et de vision par ordinateur. Essayez-les et voyez comment ils améliorent vos résultats de traitement d'image !
La détection et la suppression de l'arrière-plan de l'image sont une étape de pré-traitement importante dans de nombreuses tâches de vision par ordinateur. La segmentation sépare le sujet du premier plan de l'arrière-plan, vous donnant une image claire contenant uniquement le sujet. Voici quelques façons courantes d'effectuer une segmentation d'image en Python à l'aide d'OpenCV et scikit-image :
Seuil : Le seuil convertit une image en niveaux de gris en une image binaire (noir et blanc), en choisissant une valeur de seuil. Les pixels plus sombres que la valeur seuil deviennent noirs et les pixels plus clairs que la valeur seuil deviennent blancs. Cela fonctionne bien pour les images avec un contraste élevé et un éclairage uniforme. Vous pouvez appliquer un seuil à l'aide de la méthode seuil() d'OpenCV. Détection des bords : La détection des bords trouve les bords des objets dans une image. En reliant les bords, vous pouvez isoler le sujet au premier plan. Le détecteur de bord Canny est un algorithme populaire implémenté dans la méthode canny() de scikit-image. Ajustez les paramètres low_threshold et high_threshold pour détecter les bords. Croissance de la région : La croissance de la région commence à partir d'un ensemble de points de départ et s'étend vers l'extérieur pour détecter des régions continues dans l'image. Vous fournissez un point de départ et l'algorithme vérifie les pixels voisins pour déterminer s'il convient de les ajouter à la région. Cela continuera jusqu'à ce que plus aucun pixel ne puisse être ajouté. La méthode skimage.segmentation.region_growing() implémente cette technique. Watershed : L'algorithme de bassin versant traite les images comme des cartes topographiques, avec des pixels de haute intensité représentant les sommets et les fonds de vallée représentant les limites entre les régions. Il descend du sommet, créant des barrières isolantes lorsque différentes zones se rencontrent. La méthode skimage.segmentation.watershed() effectue une segmentation des bassins versants. En essayant ces techniques, vous pouvez isoler votre sujet à votre image. La segmentation est une première étape essentielle qui vous permet de concentrer votre modèle de vision par ordinateur sur la partie la plus importante de l'image : le sujet au premier plan.Pour obtenir une augmentation maximale des données, vous pouvez combiner plusieurs techniques d'amélioration sur la même image. Par exemple, vous pouvez retourner, faire pivoter, recadrer et ajuster la couleur d'une image pour générer de nombreux nouveaux points de données à partir d'une seule image originale. Mais attention à ne pas trop mettre en valeur, sinon l'image risque de devenir méconnaissable !
Grâce à l'augmentation des données, vous pouvez facilement augmenter la taille de votre ensemble de données d'images de 4x, 10x ou plus sans collecter de nouvelles images. Cela permet de résister au surajustement et d'améliorer la précision du modèle tout en maintenant le temps et le coût de formation constants.
Le choix de la bonne technique de prétraitement pour votre projet d'analyse d'image dépend de vos données et de vos objectifs. Certaines étapes courantes incluent :
Le redimensionnement des images à une taille cohérente est important pour le bon fonctionnement des algorithmes d'apprentissage automatique. Vous souhaitez généralement que toutes les images aient la même hauteur et la même largeur, généralement une taille plus petite comme 28 x 28 ou 64 x 64 pixels. La méthode resize() dans OpenCV ou la bibliothèque Pillow facilite cette opération par programme.
Convertissez les images en niveaux de gris ou en noir et blanc pour simplifier votre analyse et réduire le bruit. La méthode cvtColor() d'OpenCV convertit une image RVB en niveaux de gris. Pour les images en noir et blanc, utilisez le seuillage.
Des techniques telles que le flou gaussien, le flou médian et le filtrage bilatéral peuvent réduire le bruit et adoucir les images. Les méthodes GaussianBlur(), medianBlur() et bilatéraleFilter() d'OpenCV appliquent ces filtres.
La normalisation des valeurs de pixels dans une plage standard de 0 à 1 ou de -1 à 1 aide l'algorithme à mieux fonctionner. Vous pouvez normaliser l'image à l'aide de la méthode normalize() dans scikit-image.
Pour les images à faible contraste, l'égalisation de l'histogramme peut améliorer le contraste. La méthode égalizeHist() d'OpenCV effectue cette tâche.
La recherche de bords ou de contours dans les images est utile pour de nombreuses tâches de vision par ordinateur. Le détecteur de bord Canny dans la méthode Canny() d'OpenCV est un choix populaire.
La clé est de choisir la technologie qui répond à vos besoins spécifiques. Commencez par des étapes de base comme le redimensionnement, puis essayez différentes méthodes pour améliorer la qualité et voyez lesquelles optimisent vos résultats. Avec quelques expérimentations, vous trouverez votre flux de travail de prétraitement idéal.
Maintenant que vous avez une bonne compréhension des différentes techniques de prétraitement d'images en Python, vous avez probablement encore des questions sans réponse. Voici les questions les plus fréquemment posées sur le prétraitement des images et leurs réponses :
Python prend en charge divers formats d'image via des bibliothèques telles que OpenCV et Pillow. Certains des principaux formats incluent :
• JPEG — Format d'image avec perte courant
• PNG — Format d'image sans perte, adapté aux images avec transparence
• TIFF — Format d'image sans perte, adapté aux images à haute profondeur de couleur
• BMP — Format d'image raster non compressé
Les situations dans lesquelles les images doivent être redimensionnées incluent :
• L'image est trop grande pour être traitée efficacement. Réduire la taille peut accélérer le traitement.
• L'image doit correspondre à la taille d'entrée du modèle d'apprentissage automatique.
• L'image doit être affichée à une taille spécifique sur l'écran ou la page Web.
Certaines techniques de réduction du bruit populaires incluent :
• Flou gaussien — Utilisez un filtre gaussien pour flouter les images et réduire le bruit haute fréquence.
• 中值模糊 — 用邻近像素的中值替换每个像素。对于去除椒盐噪声非常有效。
• 双边滤波器 — 在平滑图像的同时保留边缘。它可以去除噪声同时保持清晰的边缘。
OpenCV支持RGB、HSV、LAB和灰度颜色空间。您可以使用cvtColor函数在这些颜色空间之间进行转换。例如:
将RGB转换为灰度:
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
将RGB转换为HSV:
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
将RGB转换为LAB:
lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)
将图像转换为不同的颜色空间对于某些计算机视觉任务(如阈值处理、边缘检测和目标跟踪)非常有用。
这就是您所需要的,一个在Python中准备图像进行分析的完整指南。借助OpenCV和其他库的强大功能,您现在拥有调整大小、增强、过滤和转换图像的所有工具。随意尝试不同的技术,调整参数,找到最适合您特定数据集和计算机视觉任务的方法。图像预处理可能不是构建AI系统中最引人注目的部分,但它绝对是至关重要的。
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!