Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Eine vollständige Anleitung zur Python-Bildvorverarbeitung

Eine vollständige Anleitung zur Python-Bildvorverarbeitung

WBOY
WBOYnach vorne
2024-01-12 20:06:10603Durchsuche

Haben Sie bei einem maschinellen Lern- oder Computer-Vision-Projekt schon einmal Bilder von schlechter Qualität festgestellt? Bilder sind das Lebenselixier vieler KI-Systeme, aber nicht alle Bilder sind gleich. Bevor ein Modell trainiert oder ein Algorithmus ausgeführt wird, ist normalerweise eine gewisse Vorverarbeitung der Bilder erforderlich, um optimale Ergebnisse zu erzielen. Die Bildvorverarbeitung in Python wird Ihr neuer Freund werden.

Eine vollständige Anleitung zur Python-Bildvorverarbeitung

In diesem Leitfaden erfahren Sie alle Tipps und Tricks zur Vorbereitung von Bildern für die Analyse mit Python. Wir decken alles ab, von der Größenänderung und dem Zuschneiden bis hin zur Rauschunterdrückung und Normalisierung. An diesem Punkt sind Ihre Bilder für eine detaillierte Analyse bereit. Mithilfe von Bibliotheken wie OpenCV, Pillow und scikit-image können Sie Bilder im Handumdrehen verbessern. Machen Sie sich also bereit und tauchen Sie ein in diese vollständige Anleitung zu Bildvorverarbeitungstechniken in Python!

Was ist Bildvorverarbeitung und warum ist sie wichtig?

Bildvorverarbeitung ist der Prozess der Verarbeitung roher Bilddaten in ein verwendbares und aussagekräftiges Format. Es wurde entwickelt, um unnötige Verzerrungen zu vermeiden und spezifische Eigenschaften zu verbessern, die für Computer-Vision-Anwendungen erforderlich sind. Die Vorverarbeitung ist ein entscheidender erster Schritt bei der Vorbereitung von Bilddaten, bevor sie in ein Modell für maschinelles Lernen eingespeist werden.

Bei der Bildvorverarbeitung werden mehrere Techniken verwendet:

  • Größenänderung: Die Größenänderung von Bildern auf eine einheitliche Größe ist für das ordnungsgemäße Funktionieren von Algorithmen für maschinelles Lernen sehr wichtig. Wir können die Größe des Bildes mit der resize()-Methode von OpenCV ändern.
  • Graustufen: Das Konvertieren von Farbbildern in Graustufen kann Bilddaten vereinfachen und den Rechenaufwand bestimmter Algorithmen reduzieren. Mit der Methode cvtColor() kann RGB in Graustufen konvertiert werden.
  • Rauschunterdrückung: Glättungs-, Unschärfe- und Filtertechniken können angewendet werden, um unnötiges Rauschen aus Bildern zu entfernen. Zu diesem Zweck werden üblicherweise die Methoden GaussianBlur() und medianBlur() verwendet.
  • Normalisierung: Durch die Normalisierung wird der Intensitätswert eines Pixels an den gewünschten Bereich angepasst, normalerweise zwischen 0 und 1. Zu diesem Zweck kann Normalize() in scikit-image verwendet werden.
  • Binarisierung: Konvertieren Sie Graustufenbilder durch Schwellenwertverarbeitung in Schwarzweißbilder. In OpenCV wird die Methode „threshold()“ verwendet, um das Bild zu binarisieren.
  • Kontrastverbesserung: Der Kontrast des Bildes kann mithilfe des Histogrammausgleichs angepasst werden. Die Methode equalizeHist() kann den Kontrast des Bildes verbessern.

Mit der richtigen Kombination dieser Techniken können Sie Ihre Bilddaten erheblich verbessern und bessere Computer-Vision-Anwendungen erstellen. Die Bildvorverarbeitung verbessert die Bildqualität und Benutzerfreundlichkeit, indem Rohbilder in ein zur Problemlösung geeignetes Format konvertiert werden.

Bilder mit Python-Bibliotheken laden und konvertieren

Um Python für die Bildverarbeitung zu verwenden, gibt es zwei beliebte Optionen zum Laden und Konvertieren von Bildern in Formate, die die Bibliothek verarbeiten kann: OpenCV und Pillow.

Bilder mit OpenCV laden: OpenCV kann Bilder in den Formaten PNG, JPG, TIFF und BMP laden. Sie können das Bild mit dem folgenden Code laden:

import cv2image = cv2.imread('path/to/image.jpg')

Dadurch wird das Bild als NumPy-Array geladen. Da das Bild im BGR-Farbraum vorliegt, möchten Sie es möglicherweise in RGB konvertieren.

Bilder mit Pillow laden: Pillow ist ein freundlicher Fork von PIL (Python Image Library). Es unterstützt mehr Formate als OpenCV, einschließlich PSD, ICO und WEBP. Sie können das Bild mit dem folgenden Code laden:

from PIL import Imageimage = Image.open('path/to/image.jpg')

Das Bild wird im RGB-Farbraum vorliegen.

Konvertieren zwischen Farbräumen: Möglicherweise müssen Sie zwischen Farbräumen wie RGB, BGR, HSV und Graustufen konvertieren. Dies kann mit OpenCV oder Pillow erfolgen. Um beispielsweise BGR in Graustufen in OpenCV zu konvertieren, können Sie Folgendes verwenden:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Oder um RGB in HSV in Pillow zu konvertieren, können Sie Folgendes verwenden:

image = image.convert('HSV')

Mit diesen Grundkenntnissen können Sie zu fortgeschritteneren Techniken übergehen, wie z Größenänderung, Filterung, Kantenerkennung usw. Die Möglichkeiten sind endlos! Welche Art von Bildverarbeitungsprojekt werden Sie erstellen?

调整大小和裁剪图像至标准尺寸

调整大小和裁剪图像是图像预处理的重要第一步。图像大小各异,但机器学习算法通常需要标准大小。您需要将图像调整大小和裁剪为方形尺寸,通常是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中加载了图像,就是时候开始增强它们了。图像滤镜用于减少噪声、增强细节,总体提高图像在分析之前的质量。以下是您需要了解的一些主要滤镜:

高斯模糊:

高斯模糊滤镜用于减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这有助于在进行边缘检测或其他处理技术之前平滑边缘和细节。

中值模糊:

中值模糊滤镜用于从图像中去除椒盐噪声。它通过用其邻近像素的中值替换每个像素来工作。这有助于平滑孤立的嘈杂像素同时保留边缘。

拉普拉斯滤波器:

拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化较快的区域来工作。输出将是突出显示边缘的图像,可用于边缘检测。这有助于识别和提取图像中的特征。

反向掩蔽:

反向掩蔽是一种用于增强图像中细节和边缘的技术。它通过从原始图像中减去模糊版本来实现。这会放大边缘和细节,使图像看起来更清晰。反向掩蔽可用于在特征提取或对象检测之前增强细节。

Bilateraler Filter:

Der bilaterale Filter bewahrt Kanten und glättet gleichzeitig das Bild. Dies geschieht durch die Berücksichtigung der räumlichen Nähe und Farbähnlichkeit von Pixeln. Pixel, die räumlich nahe beieinander liegen und eine ähnliche Farbe haben, werden gemeinsam geglättet, während Pixel unterschiedlicher Farbe nicht geglättet werden. Dadurch entsteht ein glattes Bild, dessen Kanten scharf bleiben. Bilaterale Filter sind nützlich zur Rauschunterdrückung vor der Kantenerkennung.

Durch die Anwendung dieser Filter erhalten Sie hochwertige, verbesserte Bilder, die für eingehende Analysen und Computer-Vision-Aufgaben bereit sind. Probieren Sie sie aus und sehen Sie, wie sie Ihre Bildverarbeitungsergebnisse verbessern!

Hintergründe mithilfe der Segmentierung erkennen und entfernen

Das Erkennen und Entfernen von Bildhintergrund ist ein wichtiger Vorverarbeitungsschritt bei vielen Computer-Vision-Aufgaben. Durch die Segmentierung wird das Vordergrundmotiv vom Hintergrund getrennt, sodass Sie ein klares Bild erhalten, das nur das Motiv enthält. Einige gängige Methoden zur Bildsegmentierung in Python mithilfe von OpenCV und scikit-image sind:

Thresholding:

Thresholding wandelt ein Graustufenbild in ein Binärbild (Schwarzweiß) um, indem ein Schwellenwert ausgewählt wird. Pixel, die dunkler als der Schwellenwert sind, werden schwarz und Pixel, die heller als der Schwellenwert sind, werden weiß. Dies eignet sich gut für Bilder mit hohem Kontrast und gleichmäßiger Beleuchtung. Sie können die Schwellenwertberechnung mit der Methode „threshold()“ von OpenCV anwenden.

Kantenerkennung:

Die Kantenerkennung findet die Kanten von Objekten in einem Bild. Durch das Verbinden von Kanten können Sie das Vordergrundmotiv isolieren. Der Canny-Kantendetektor ist ein beliebter Algorithmus, der in der canny()-Methode von scikit-image implementiert ist. Passen Sie die Parameter low_threshold und high_threshold an, um Kanten zu erkennen.

Regionswachstum:

Regionswachstum beginnt bei einer Reihe von Startpunkten und dehnt sich nach außen aus, um kontinuierliche Regionen im Bild zu erkennen. Sie geben einen Startpunkt an und der Algorithmus überprüft benachbarte Pixel, um zu bestimmen, ob sie der Region hinzugefügt werden sollen. Dies wird so lange fortgesetzt, bis keine Pixel mehr hinzugefügt werden können. Die Methode skimage.segmentation.region_growing() implementiert diese Technik.

Wassereinzugsgebiet:

Der Wassereinzugsgebietsalgorithmus behandelt Bilder als topografische Karten, wobei hochintensive Pixel Gipfel und Talböden Grenzen zwischen Regionen darstellen. Es strömt vom Gipfel herab und bildet isolierende Barrieren, wenn verschiedene Gebiete aufeinandertreffen. Die Methode skimage.segmentation.watershed() führt eine Wassereinzugsgebietssegmentierung durch.

Durch das Ausprobieren dieser Techniken können Sie Ihr Motiv in Ihrem Bild isolieren. Die Segmentierung ist ein wichtiger erster Schritt, der es Ihnen ermöglicht, Ihr Computer-Vision-Modell auf den wichtigsten Teil des Bildes zu fokussieren – das Vordergrundmotiv.

Erweitern Sie Ihren Datensatz mithilfe der Datenerweiterung

Datenerweiterung ist eine Technik, die die Größe eines Datensatzes künstlich vergrößert, indem aus vorhandenen Bildern neue Bilder generiert werden. Dies trägt dazu bei, eine Überanpassung zu reduzieren und die Generalisierungsleistung des Modells zu verbessern. Einige gängige Verbesserungstechniken für Bilddaten sind:

Spiegeln und Drehen:

Durch einfaches Spiegeln (horizontal oder vertikal) oder Drehen (90, 180, 270 Grad) eines Bildes können neue Datenpunkte generiert werden. Wenn Sie beispielsweise 1.000 Bilder von Katzen haben, diese horizontal spiegeln, vertikal spiegeln und um 90 Grad drehen, erhalten Sie insgesamt 4.000 Bilder (1.000 Originale + 1.000 horizontale Spiegelungen + 1.000 vertikale Spiegelungen + 1.000 um 90 Grad gedrehte Bilder).

Zuschneiden:

Bilder auf unterschiedliche Größen und Proportionen zuschneiden, um neue Bilder aus demselben Originalbild zu erstellen. Dadurch kann Ihr Modell verschiedene Kompositionen und Kombinationen desselben Inhalts sehen. Sie können zufällige Zuschnitte unterschiedlicher Größe erstellen oder ein spezifischeres Zuschnittverhältnis anstreben, beispielsweise ein Quadrat.

Farbmanipulation:

Das Anpassen von Helligkeit, Kontrast, Farbton und Sättigung ist eine einfache Möglichkeit, neue, verbesserte Bilder zu erstellen. Sie können beispielsweise die Helligkeit und den Kontrast eines Bildes zufällig um bis zu 30 % anpassen, um neue Datenpunkte zu generieren. Achten Sie darauf, das Bild nicht zu stark zu verzerren, da dies Ihr Modell sonst verwirren könnte.

Bildüberlagerung:

Das Überlagern eines transparenten Bildes, einer Textur oder eines Rauschens mit einem vorhandenen Bild ist eine weitere einfache Verbesserungstechnik. Durch das Hinzufügen von Dingen wie Wasserzeichen, Logos, Schmutz/Kratzern oder Gauß'schem Rauschen können realistische Variationen der Originaldaten erzeugt werden. Beginnen Sie mit subtilen Überlagerungen und sehen Sie, wie Ihr Modell reagiert.

Kombinieren Sie Techniken:

Um eine maximale Datenvergrößerung zu erzielen, können Sie mehrere Verbesserungstechniken für dasselbe Bild kombinieren. Sie können beispielsweise ein Bild spiegeln, drehen, zuschneiden und die Farbe anpassen, um viele neue Datenpunkte aus einem einzigen Originalbild zu generieren. Aber achten Sie darauf, nicht zu stark zu verstärken, sonst kann das Bild unkenntlich werden!

Mithilfe der Datenerweiterung können Sie die Größe Ihres Bilddatensatzes ganz einfach um das Vierfache, das Zehnfache oder mehr erhöhen, ohne neue Bilder zu sammeln. Dies trägt dazu bei, einer Überanpassung vorzubeugen und die Modellgenauigkeit zu verbessern, während Trainingszeit und -kosten konstant bleiben.

Wählen Sie den richtigen Vorverarbeitungsschritt für Ihre Anwendung.

Die Auswahl der richtigen Vorverarbeitungstechnik für Ihr Bildanalyseprojekt hängt von Ihren Daten und Zielen ab. Zu den üblichen Schritten gehören:

Größenänderung:

Die Größenänderung von Bildern auf eine einheitliche Größe ist wichtig, damit Algorithmen für maschinelles Lernen ordnungsgemäß funktionieren. Normalerweise möchten Sie, dass alle Bilder die gleiche Höhe und Breite haben, normalerweise eine kleinere Größe wie 28 x 28 oder 64 x 64 Pixel. Die resize()-Methode in OpenCV oder der Pillow-Bibliothek macht es einfach, dies programmgesteuert zu tun.

Farbkonvertierung:

Konvertieren Sie Bilder in Graustufen oder Schwarzweiß, um Ihre Analyse zu vereinfachen und Rauschen zu reduzieren. Die cvtColor()-Methode von OpenCV konvertiert ein Bild von RGB in Graustufen. Verwenden Sie für Schwarzweißbilder die Schwellenwertermittlung.

Rauschunterdrückung:

Techniken wie Gaußscher Weichzeichner, mittlerer Weichzeichner und bilaterale Filterung können Rauschen reduzieren und Bilder glätten. Die Methoden GaussianBlur(), medianBlur() und bilateralFilter() von OpenCV wenden diese Filter an.

Normalisierung:

Die Normalisierung der Pixelwerte auf einen Standardbereich von 0 bis 1 oder -1 bis 1 trägt dazu bei, dass der Algorithmus besser funktioniert. Sie können das Bild mit der normalize()-Methode in scikit-image normalisieren.

Kontrastverbesserung:

Bei Bildern mit geringem Kontrast kann der Histogrammausgleich den Kontrast verbessern. Die equalizeHist()-Methode von OpenCV führt diese Aufgabe aus.

Kantenerkennung:

Das Finden von Kanten oder Konturen in Bildern ist für viele Computer-Vision-Aufgaben nützlich. Der Canny-Kantendetektor in der Canny()-Methode von OpenCV ist eine beliebte Wahl.

Der Schlüssel liegt darin, die Technologie auszuwählen, die Ihren spezifischen Anforderungen entspricht. Beginnen Sie mit grundlegenden Schritten wie der Größenänderung, probieren Sie dann verschiedene Methoden zur Verbesserung der Qualität aus und finden Sie heraus, welche Ihre Ergebnisse optimieren. Mit etwas Experimentieren finden Sie Ihren idealen Vorverarbeitungs-Workflow.

FAQ zu Bildvorverarbeitungstechniken

Da Sie nun die verschiedenen Bildvorverarbeitungstechniken in Python gut verstanden haben, haben Sie wahrscheinlich noch einige unbeantwortete Fragen. Hier sind die am häufigsten gestellten Fragen zur Bildvorverarbeitung und ihre Antworten:

Welche Bildformate unterstützt Python?

Python unterstützt verschiedene Bildformate durch Bibliotheken wie OpenCV und Pillow. Einige der wichtigsten Formate sind:

• JPEG – Häufiges verlustbehaftetes Bildformat

• PNG – Verlustfreies Bildformat, geeignet für Bilder mit Transparenz

• TIFF – Verlustfreies Bildformat, geeignet für Bilder mit hoher Farbtiefe

• BMP – Unkomprimiertes Rasterbildformat

Wann sollten Sie die Größe von Bildern ändern?

Situationen, in denen die Größe von Bildern geändert werden sollte, sind unter anderem:

• Das Bild ist zu groß, um effizient verarbeitet zu werden. Eine Reduzierung der Größe kann die Verarbeitung beschleunigen.

• Das Bild muss mit der Eingabegröße des maschinellen Lernmodells übereinstimmen.

• Das Bild muss in einer bestimmten Größe auf dem Bildschirm oder der Webseite angezeigt werden.

Was sind die gängigen Technologien zur Geräuschreduzierung?

Einige beliebte Techniken zur Rauschunterdrückung sind:

• Gaußscher Weichzeichner – Verwenden Sie einen Gaußschen Filter, um Bilder zu verwischen und hochfrequentes Rauschen zu reduzieren.

• 中值模糊 — 用邻近像素的中值替换每个像素。对于去除椒盐噪声非常有效。

• 双边滤波器 — 在平滑图像的同时保留边缘。它可以去除噪声同时保持清晰的边缘。

OpenCV支持哪些颜色空间,如何在它们之间进行转换?

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系统中最引人注目的部分,但它绝对是至关重要的。

Das obige ist der detaillierte Inhalt vonEine vollständige Anleitung zur Python-Bildvorverarbeitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen