首頁  >  文章  >  科技週邊  >  Python影像預處理的完整指南

Python影像預處理的完整指南

WBOY
WBOY轉載
2024-01-12 20:06:10603瀏覽

你是否曾在機器學習或電腦視覺專案中遇到過品質較差的影像問題?影像是許多AI系統的生命線,但並非所有影像都是相同的。在訓練模型或運行演算法之前,通常需要對影像進行一些預處理以獲得最佳結果。在Python中進行影像預處理將成為您的新夥伴。

Python影像預處理的完整指南

在本指南中,您將學到使用Python準備影像進行分析的所有技巧和訣竅。我們將涵蓋從調整大小和裁剪到減少雜訊和歸一化的所有內容。到時候,您的影像將準備就緒,可以進行詳細分析。借助諸如OpenCV、Pillow和scikit-image等庫的幫助,您很快就能增強影像。因此,請做好準備,開始深入了解Python中影像預處理技術的完整指南!

什麼是映像預處理,為什麼它很重要?

影像預處理是將原始影像資料處理為可用且有意義的格式的過程。它旨在消除不必要的失真並增強電腦視覺應用程式所需的特定特性。預處理是在輸入機器學習模型之前準備影像資料的關鍵第一步。

在影像預處理中使用了幾種技術:

  • 調整大小:將影像調整為統一大小對於機器學習演算法的正常運作非常重要。我們可以使用OpenCV的resize()方法來調整影像大小。
  • 灰階化:將彩色影像轉換為灰階影像可以簡化影像數據,並減少某些演算法的運算需求。 cvtColor()方法可用來將RGB轉換為灰階。
  • 降噪:可以應用平滑、模糊和濾波技術來去除影像中不必要的雜訊。 GaussianBlur()和medianBlur()方法通常用於此目的。
  • 歸一化:歸一化調整像素的強度值到所需範圍,通常在0到1之間。 scikit-image中的Normalize()可用於此目的。
  • 二值化:透過閾值處理將灰階影像轉換為黑白影像。在OpenCV中,使用threshold()方法對影像進行二值化。
  • 對比增強:可以使用直方圖均衡化來調整影像的對比。 equalizeHist()方法可以增強影像的對比。

透過正確組合這些技術,您可以顯著改進影像資料並建立更優質的電腦視覺應用程式。影像預處理可以將原始影像轉換為適用於解決問題的格式,從而提高影像品質和可用性。

使用Python庫載入和轉換映像

要開始使用Python進行映像處理,有兩個流行的選項可以載入和轉換映像為庫可處理的格式:OpenCV和Pillow。

使用OpenCV載入圖片:OpenCV可以載入PNG、JPG、TIFF和BMP等格式的圖片。您可以使用以下程式碼載入圖像:

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

這將把圖像載入為NumPy數組。由於影像位於BGR色彩空間,您可能想要將其轉換為RGB。

使用Pillow載入圖片:Pillow是友善的PIL(Python Image Library)分支。它支援比OpenCV更多的格式,包括PSD、ICO和WEBP。您可以使用以下程式碼載入圖像:

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

圖像將處於RGB色彩空間。

在色彩空間之間轉換:您可能需要在RGB、BGR、HSV和灰階等色彩空間之間進行轉換。這可以使用OpenCV或Pillow完成。例如,要在OpenCV中將BGR轉換為灰度,可以使用:

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

或要在Pillow中將RGB轉換為HSV,可以使用:

image = image.convert('HSV')

有了這些基礎技能,您就可以轉向更進階的技術,例如調整大小、濾波、邊緣偵測等等。可能性是無限的!您將建立什麼樣的影像處理項目?  

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

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

高斯模糊:

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

中值模糊:

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

拉普拉斯滤波器:

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

反向掩蔽:

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

雙邊濾波器:

雙邊濾波器在平滑影像的同時保留邊緣。它透過考慮像素的空間接近度和顏色相似度來實現。空間上接近且顏色相似的像素被一起平滑,而在顏色上不同的像素則不被平滑。這導致一個平滑的圖像,其邊緣保持清晰。雙邊濾波器對於在邊緣檢測之前進行雜訊降低很有用。

透過應用這些濾鏡,您將獲得高品質的增強影像,準備進行深入分析和電腦視覺任務。嘗試一下,看看它們如何改善您的影像處理結果!

使用分割偵測並移除背景

在許多電腦視覺任務中,偵測和移除影像背景是一個重要的預處理步驟。分割將前景主體與背景分離,使您得到一個只包含主體的清晰影像。在Python中使用OpenCV和scikit-image執行影像分割的幾種常見方法有:

閾值化:

閾值化將灰階影像轉換為二進位影像(黑白) ,透過選擇閾值值。比閾值值暗的像素變成黑色,比閾值值更亮的像素變成白色。這對於對比度高、光照均勻的影像效果很好。您可以使用OpenCV的threshold()方法來套用閾值化。

邊緣偵測:

邊緣偵測找到影像中物件的邊緣。透過連接邊緣,您可以孤立前景主體。 Canny邊緣偵測器是scikit-image的canny()方法中實作的一種流行的演算法。調整low_threshold和high_threshold參數以偵測邊緣。

區域生長:

區域生長從一組種子點開始,向外擴展以檢測影像中的連續區域。您提供種子點,演算法檢查相鄰像素以確定是否將其新增至區域。這將繼續,直到無法再添加更多像素。 skimage.segmentation.region_growing()方法實作了這種技術。

分水嶺:

分水嶺演算法將影像視為地形圖,高強度像素表示山峰,而谷底表示區域之間的邊界。它從峰頂開始洪水般地流下,當不同區域相遇時創建隔離障礙。 skimage.segmentation.watershed()方法執行分水嶺分割。

透過嘗試這些技術,您可以在映像中隔離出主體。分割是一個關鍵的第一步,使您能夠將電腦視覺模型集中在影像的最重要部分——前景主體上。

使用資料增強來擴展您的資料集

資料增強是一種透過從現有影像產生新影像來人為地擴展資料集大小的技術。這有助於減少過度擬合並提高模型的泛化性能。影像資料的一些常見增強技術包括:

翻轉和旋轉:

簡單地翻轉(水平或垂直)或旋轉(90、180、270度)影像可以產生新的資料點。例如,如果您有1,000張貓的影像,對其進行水平翻轉和垂直翻轉,再旋轉90度,可以得到4,000張總影像(1,000原始 1,000水平翻轉 1,000垂直翻轉 1,000旋轉90度)。

裁切:

將影像裁切到不同的大小和比例可從相同的原始影像建立新影像。這使您的模型能夠看到相同內容的不同構圖和組合。您可以建立不同尺寸的隨機裁剪,或針對更具體的裁剪比例,例如正方形。

顏色操作:

調整亮度、對比度、色調和飽和度是創建新的增強影像的簡單方法。例如,您可以隨機調整影像的亮度和對比度,最多可達30%,以產生新的資料點。請注意不要過度扭曲圖像,否則可能會混淆您的模型。

影像疊加:

將透明影像、紋理或雜訊覆蓋現有影像上是另一種簡單的增強技術。添加浮水印、標誌、污垢/刮痕或高斯雜訊等內容可以創建原始資料的現實變化。從微妙的疊加開始,看看您的模型的反應如何。

結合技術:

為了在資料上取得最大的增加,您可以在相同的影像上組合多種增強技術。例如,您可以翻轉、旋轉、裁切和調整影像的顏色,從單一原始影像產生許多新的資料點。但要注意不要過度增強,否則可能使影像無法辨識!

使用資料增強,您可以輕鬆地將影像資料集的大小增加4倍、10倍或更多,而無需收集任何新影像。這有助於抵制過擬合,並提高模型的準確性,同時保持訓練時間和成本不變。

選擇適合您應用的預處理步驟

選擇適合您影像分析專案的預處理技術取決於您的資料和目標。一些常見的步驟包括:

調整大小:

將映像調整為一致的大小對於機器學習演算法的正常運作很重要。通常希望所有影像具有相同的高度和寬度,通常是較小的尺寸,如28x28或64x64像素。 OpenCV或Pillow庫中的resize()方法可以輕鬆地以程式設計方式執行此操作。

顏色轉換:

將影像轉換為灰階或黑白可以簡化您的分析並減少雜訊。 OpenCV的cvtColor()方法將影像從RGB轉換為灰階。對於黑白影像,使用閾值化。

降噪:

諸如高斯模糊、中值模糊和雙邊濾波等技術可以減少雜訊並平滑影像。 OpenCV的GaussianBlur()、medianBlur()和bilateralFilter()方法應用這些濾鏡。

歸一化:

將像素值歸一化到0到1或-1到1的標準範圍有助於演算法更好地工作。您可以使用scikit-image中的normalize()方法對影像進行歸一化。

對比度增強:

對於低對比影像,直方圖均衡化可以提高對比。 OpenCV的equalizeHist()方法執行此任務。

邊緣偵測:

找到影像中的邊緣或輪廓對於許多電腦視覺任務都很有用。 OpenCV的Canny()方法中的Canny邊緣偵測器是一個受歡迎的選擇。

關鍵是選擇適合您特定需求的技術。從基本步驟如調整大小開始,然後嘗試不同的方法以改進質量,並查看哪些方法優化了您的結果。透過一些實驗,您將找到理想的預處理工作流程。

映像預處理技術FAQ

現在您已經對Python中的各種影像預處理技術有了很好的了解,可能還有一些懸而未決的問題。以下是關於影像預處理最常見的問題及其答案:

Python支援哪些影像格式?

Python透過OpenCV和Pillow等函式庫支援各種影像格式。 一些主要的格式包括:

• JPEG — 常見的有損影像格式

• PNG — 無損影像格式,適用於具有透明度的圖片

• TIFF — 無損影像格式,適用於高色彩深度影像

• BMP — 無壓縮的光柵影像格式

何時應該調整影像大小?

應調整影像大小的情況包括:

• 影像太大,以至於無法有效處理。減小尺寸可以加快處理速度。

• 影像需要符合機器學習模型的輸入大小。

• 圖片需要在螢幕或網頁上以特定大小顯示。

有哪些常見的降噪技術?

一些流行的降噪技術包括:

• 高斯模糊 — 使用高斯濾波器對影像進行模糊,減少高頻雜訊。

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

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

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

以上是Python影像預處理的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除