使用 SKimage 的圖像預處理
介紹
圖像是視覺對象的二維表示,例如照片、繪畫或素描。在數(shù)字成像中,圖像存儲為像素值數(shù)組,其中每個像素代表圖像亮度和顏色的樣本。每個像素的顏色可以由一個或多個通道表示,如傳統(tǒng)彩色圖像中的紅色、綠色和藍色 (RGB) 通道。在本文中,你將學習各種圖像預處理技術。
圖像可以使用計算機算法進行處理,以改變它們的外觀或提取信息。圖像處理技術包括調(diào)整大小、裁剪、旋轉(zhuǎn)、過濾和閾值化等操作。這些操作是對像素值執(zhí)行的,以修改圖像或提取有關其內(nèi)容的信息。圖像處理用于許多應用程序,包括計算機視覺、醫(yī)學成像和數(shù)字藝術。
通過使用 SKimage 學習圖像預處理,你將能夠:
了解圖像預處理在圖像分析和機器學習中的重要性。了解如何使用各種 SKimage 函數(shù)進行圖像過濾、增強、恢復和轉(zhuǎn)換。應用降噪、邊緣檢測和圖像閾值處理等圖像預處理技術來提高圖像質(zhì)量。執(zhí)行常見的圖像預處理任務,例如圖像大小調(diào)整、裁剪和旋轉(zhuǎn)。使用特征提取技術從圖像中提取有意義的信息。為圖像分析應用程序?qū)嵤⿲ο髾z測算法。目錄了解圖像數(shù)據(jù)處理圖像的步驟理解圖像中的變換如何加載圖像?如何可視化圖像?圖像預處理—調(diào)整圖像大小圖像預處理—重塑圖像圖像預處理—圖像旋轉(zhuǎn)圖像預處理—圖像裁剪圖像預處理—圖像翻轉(zhuǎn)圖像預處理—亮度處理了解圖像數(shù)據(jù)
讓我們來看一張可以分解為數(shù)字矩陣的圖像,其中每個數(shù)字代表強度。這個強度可以取 0(代表黑色)和 255(代表白色)之間。因此,單色圖像可以由單個矩陣表示。
但是當它是下面的彩色圖像時我們該怎么辦呢?
如果我們必須表示一個圖像,我們會將其分成三個不同顏色的三個圖像:紅色、綠色和藍色。我們可以將每種顏色的強度存儲在兩個單獨的矩陣中。
因此圖像將被分解為三個矩陣:一個用于紅色,一個用于綠色,一個用于藍色,這樣我們就可以用 N*M*3 矩陣表示圖像。
任何 n * m 像素寬的圖像都可以在計算機中的任何位置定義為矩陣 NM*3。
在處理圖像數(shù)據(jù)時,通常會將圖像轉(zhuǎn)換為數(shù)字表示形式,例如矩陣,以便計算機算法可以對其進行處理。圖像的數(shù)字表示稱為數(shù)字圖像,可以使用數(shù)學運算來處理數(shù)字圖像中的數(shù)據(jù)以執(zhí)行不同的圖像處理任務。
總的來說,理解圖像數(shù)據(jù)對于使用圖像處理算法和從圖像中提取信息是必要的。
處理圖像的步驟
以下是在 Python 中處理圖像所涉及的常見步驟:
導入庫:你需要導入將用于處理圖像的庫,例如 NumPy 和 OpenCV。加載圖像:你可以使用 OpenCV 中的 imread 函數(shù)加載圖像。預處理:根據(jù)圖像和所需的結果,你可能需要執(zhí)行預處理步驟,例如調(diào)整大小、灰度化或閾值化。操作像素:你可以使用 NumPy 數(shù)組操縱圖像的像素,以執(zhí)行裁剪、旋轉(zhuǎn)和進行基于顏色的選擇等操作。過濾:你可以使用不同的過濾器來平滑或銳化圖像,例如高斯或中值過濾器。邊緣檢測:可以使用 Canny 等方法執(zhí)行的邊緣檢測用于識別圖像中對象之間的邊界。理解圖像中的變換
圖像中的變換指的是應用于圖像的數(shù)學運算,以改變其外觀或從中提取有用信息?梢詰迷S多類型的變換到圖像中,包括:
幾何變換:這些變換會改變圖像中像素之間的空間關系,例如旋轉(zhuǎn)、縮放和平移。顏色變換:這些變換會改變圖像的顏色屬性,例如亮度、對比度和飽和度。過濾:過濾是指從圖像中去除噪聲或增強其特征的過程,如平滑或銳化。邊緣檢測:可以使用 Canny 等方法執(zhí)行的邊緣檢測用于識別圖像中對象之間的邊界。特征提。哼@是指使用 Harris 角點檢測或 SIFT 等算法從圖像中提取有意義的信息(如角點或關鍵點)的過程。
這些轉(zhuǎn)換是使用數(shù)學算法執(zhí)行的,可以在 Python 或 MATLAB 等軟件中實現(xiàn)。轉(zhuǎn)換對于圖像處理至關重要,并且在計算機視覺、醫(yī)學圖像分析和面部識別等應用中至關重要。
現(xiàn)在我們將開始加載圖像并使用 Scikit-Image 庫對圖像進行一些操作。
如何加載圖像?
根據(jù)所使用的編程語言和工具,有多種加載圖像的方法。下面介紹幾種常用的方法:
使用圖像處理庫:許多圖像處理庫,如 OpenCV、Pillow 和 Scikit-Image,都提供將圖像加載到內(nèi)存中的功能。例如,你可以使用 imread 函數(shù)在 OpenCV 中加載圖像。使用圖像文件閱讀器:你可以使用特定于文件格式(如 JPEG 或 PNG)的函數(shù)或類從文件中讀取圖像數(shù)據(jù)。例如,你可以使用 Python 中的 imageio 庫來讀取圖像文件。從 URL 加載:你可以從 URL 下載圖像,然后將其加載到內(nèi)存中。
將圖像上傳到內(nèi)存后,你可以使用圖像處理庫提供的函數(shù)對其進行各種操作,如調(diào)整大小、裁剪、顏色轉(zhuǎn)換和過濾。
以下是如何使用 Python 中的 scikit-image (skimage) 庫加載圖像的示例:
originating from Skimage Import IO
# Open the image
io.imread("image.jpg") = image
# Show the image
io.imshow(image)
io.show()
在此示例中,skimage 庫的 io 模塊中的 imread 函數(shù)用于將圖像文件 image.jpg 加載到內(nèi)存中。然后使用 io 模塊中的 imshow 函數(shù)顯示生成的圖像數(shù)據(jù),然后調(diào)用“io.show()”來顯示圖像。imshow 函數(shù)自動調(diào)整顯示圖像并處理顏色通道和縱橫比等問題。
如何可視化圖像?
可視化圖像涉及在屏幕或輸出設備上顯示圖像數(shù)據(jù)?梢暬瘓D像取決于所使用的編程語言和工具。下面介紹幾種常用的方法:
使用圖像處理庫:許多圖像處理庫,如 OpenCV、Pillow 和 scikit-image,都提供顯示圖像的功能。例如,你可以使用 imshow 函數(shù)在 OpenCV 中顯示圖像。使用繪圖庫:你可以使用繪圖庫(如 Python 中的 Matplotlib)來顯示圖像。例如,你可以使用 Matplotlib Pyplot 模塊中的 imshow 函數(shù)在 Python 中顯示圖像。
顯示圖像后,你可以通過放大和縮小、平移和重新調(diào)整顯示設置來與其進行交互。
以下是如何使用 Python 中的 scikit-image (skimage) 庫可視化圖像的示例:
from skimage import io
import matplotlib.pyplot as plt
# Load the image
image = io.imread("image.jpg")
# Display the image
plt.imshow(image)
plt.show()
在這個例子中,使用skimage庫的“io”模塊中的imread函數(shù)將一個名為image.jpg的圖像文件加載到內(nèi)存中。然后使用matplotlib.pyplot模塊的imshow函數(shù)顯示結果圖像數(shù)據(jù),隨后調(diào)用plt.show()函數(shù)來顯示圖像。
圖像預處理—調(diào)整圖像大小
Python 的“scikit-image”(skimage) 庫提供了幾個調(diào)整圖像大小的函數(shù)。為此,一個常用的功能是“transform”模塊中的“resize”函數(shù)。
這是使用 skimage 調(diào)整圖像大小的示例:
import skimage
from skimage import io, transform
# Load the image
image = io.imread(“example.jpg”)
resized_image = transform.resize(image, (300, 300))
# Save the resized image
io.imsave(“resized_image.jpg”, resized_image)
在這個例子中,使用 io 模塊的 imread 函數(shù)讀取原始圖像。然后,使用 resize 函數(shù)將圖像調(diào)整為大小為 (300, 300) 像素。最后,使用 imsave 函數(shù)保存調(diào)整大小后的圖像。
圖像預處理—重塑圖像
在Python中,"scikit-image"(skimage)庫提供了幾個用于重塑圖像的函數(shù)。以下是使用skimage重塑圖像的示例:
# import colour sub-module
from skimage import color
# reading the image
image = imread('index.png')
# converting image to grayscale
grayscale_image = color.rgb2gray(image)
grayscale_image.shape
import numpy as np
new_shape = (grayscale_image.shape[0]*grayscale_image.shape[1])
# reshape
image2 = np.reshape(grayscale_image, new_shape)
image2.shape
如果將 4 x 4 二維圖像轉(zhuǎn)換為一維圖像,我們將有 4×4=16 個值。
圖像預處理—圖像旋轉(zhuǎn)
圖像旋轉(zhuǎn)是指以指定角度圍繞其中心旋轉(zhuǎn)圖像。在scikit-image中,你可以使用transform模塊的rotate函數(shù)旋轉(zhuǎn)圖像。以下是Python中的一個示例:
import numpy as np
from skimage import io
from skimage.transform import rotate
# Load an image
image = io.imread("image.jpg")
# Rotate the image by 180 degrees
rotated_image = rotate(image, angle=180, resize=True)
# Save the rotated image
io.imsave("rotated_image.jpg", rotated_image)
在這個例子中,rotate函數(shù)被用來將輸入圖像旋轉(zhuǎn)180度。rotate函數(shù)的第一個參數(shù)是輸入圖像,angle參數(shù)指定了旋轉(zhuǎn)角度(以度為單位)。
圖像預處理—圖像裁剪
圖像裁剪是通過指定裁剪區(qū)域來提取圖像的一部分。在scikit-image中,可以使用切片和索引來裁剪圖像。以下是Python示例:
import numpy as np
from skimage import io
# Load an image
image = io.imread("image.jpg")
rows, cols = image.shape[:2]
cropped_image = image[rows//4:-rows//4, cols//4:-cols//4]
# Save the cropped image
io.imsave("cropped_image.jpg", cropped_image)
在這個例子中,首先使用imread函數(shù)加載輸入圖像。裁剪區(qū)域通過沿兩個維度對圖像進行切片來指定,因此刪除了行和列的前四分之一和后四分之一。
圖像預處理——圖像翻轉(zhuǎn)
可以使用 OpenCV 庫中的“cv2.flip”函數(shù)執(zhí)行 Python 中的圖像翻轉(zhuǎn)。“cv2.flip”函數(shù)有兩個參數(shù):輸入圖像和翻轉(zhuǎn)代碼。翻轉(zhuǎn)代碼指定要執(zhí)行的翻轉(zhuǎn),可以是以下值之一:
cv2.FLIP_HORIZONTAL:水平翻轉(zhuǎn)圖像cv2.FLIP_VERTICAL:垂直翻轉(zhuǎn)圖像cv2.FLIP_BOTH:水平和垂直翻轉(zhuǎn)圖像
翻轉(zhuǎn)可以認為是旋轉(zhuǎn)的延伸,允許左右和上下翻轉(zhuǎn)圖像。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# reading the image
image = imread('index.png')
image = np.array(image)
imshow(image)
plt.title('Original Image')
現(xiàn)在,如果你必須再次翻轉(zhuǎn)圖像,該怎么辦?
讓我們假設我們要進行從左到右的翻轉(zhuǎn)。我可以使用“fliplr()”函數(shù)輕松完成此操作,重新讀取圖像并進行翻轉(zhuǎn)。
# flip image left-to-right
flipLR = np.fliplr(image)
plt.imshow(flipLR)
plt.title('Left to Right Flipped')
這些是翻轉(zhuǎn)圖像的方法。
圖像預處理—亮度處理
可以使用圖像庫執(zhí)行 Python 中的亮度操作。圖片庫提供了曝光模塊,其中包含調(diào)整gamma的功能,可以用來改變圖片的亮度。
可以使用不同亮度的圖像使模型對光照條件的變化具有魯棒性;這對于在室外照明下工作的系統(tǒng)很重要,例如交通信號燈上的閉路電視攝像頭。
from skimage.exposure import adjust_gamma
# read the image
image = imread('index.png')
plt.title('Original Image')
imshow(image)
我要改變gamma值,這會改變圖像的強度。所以,這是明亮的圖像。
# brighten the image
bright = adjust_gamma(image,gamma=0.5,gain=1)
imshow(bright)
plt.title('Brightened IMage')
結論
Scikit-image 是一個流行的圖像處理 Python 庫,它提供了處理圖像的工具和函數(shù)。以下是用于圖像處理的圖像的一些關鍵特征的總結:
Image I/O:image提供了讀寫圖片到磁盤的函數(shù),包括imread讀取圖片和imsave保存圖片。圖像恢復:圖像提供了用于恢復退化圖像的算法,包括去除噪聲和校正模糊或失真的功能。圖像分析:image 提供分析圖像屬性的函數(shù),包括直方圖、梯度幅度和紋理分析。圖像可視化:圖像提供了用于可視化圖像及其屬性的函數(shù),包括繪制和顯示圖像、直方圖和圖像數(shù)據(jù)的其他可視化表示。
原文標題 : 使用 SKimage 的圖像預處理
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結構工程師 廣東省/深圳市