使用 SKimage 的圖像預(yù)處理
介紹
圖像是視覺對象的二維表示,例如照片、繪畫或素描。在數(shù)字成像中,圖像存儲為像素值數(shù)組,其中每個(gè)像素代表圖像亮度和顏色的樣本。每個(gè)像素的顏色可以由一個(gè)或多個(gè)通道表示,如傳統(tǒng)彩色圖像中的紅色、綠色和藍(lán)色 (RGB) 通道。在本文中,你將學(xué)習(xí)各種圖像預(yù)處理技術(shù)。
圖像可以使用計(jì)算機(jī)算法進(jìn)行處理,以改變它們的外觀或提取信息。圖像處理技術(shù)包括調(diào)整大小、裁剪、旋轉(zhuǎn)、過濾和閾值化等操作。這些操作是對像素值執(zhí)行的,以修改圖像或提取有關(guān)其內(nèi)容的信息。圖像處理用于許多應(yīng)用程序,包括計(jì)算機(jī)視覺、醫(yī)學(xué)成像和數(shù)字藝術(shù)。
通過使用 SKimage 學(xué)習(xí)圖像預(yù)處理,你將能夠:
了解圖像預(yù)處理在圖像分析和機(jī)器學(xué)習(xí)中的重要性。了解如何使用各種 SKimage 函數(shù)進(jìn)行圖像過濾、增強(qiáng)、恢復(fù)和轉(zhuǎn)換。應(yīng)用降噪、邊緣檢測和圖像閾值處理等圖像預(yù)處理技術(shù)來提高圖像質(zhì)量。執(zhí)行常見的圖像預(yù)處理任務(wù),例如圖像大小調(diào)整、裁剪和旋轉(zhuǎn)。使用特征提取技術(shù)從圖像中提取有意義的信息。為圖像分析應(yīng)用程序?qū)嵤⿲ο髾z測算法。目錄了解圖像數(shù)據(jù)處理圖像的步驟理解圖像中的變換如何加載圖像?如何可視化圖像?圖像預(yù)處理—調(diào)整圖像大小圖像預(yù)處理—重塑圖像圖像預(yù)處理—圖像旋轉(zhuǎn)圖像預(yù)處理—圖像裁剪圖像預(yù)處理—圖像翻轉(zhuǎn)圖像預(yù)處理—亮度處理了解圖像數(shù)據(jù)
讓我們來看一張可以分解為數(shù)字矩陣的圖像,其中每個(gè)數(shù)字代表強(qiáng)度。這個(gè)強(qiáng)度可以取 0(代表黑色)和 255(代表白色)之間。因此,單色圖像可以由單個(gè)矩陣表示。
但是當(dāng)它是下面的彩色圖像時(shí)我們該怎么辦呢?
如果我們必須表示一個(gè)圖像,我們會將其分成三個(gè)不同顏色的三個(gè)圖像:紅色、綠色和藍(lán)色。我們可以將每種顏色的強(qiáng)度存儲在兩個(gè)單獨(dú)的矩陣中。
因此圖像將被分解為三個(gè)矩陣:一個(gè)用于紅色,一個(gè)用于綠色,一個(gè)用于藍(lán)色,這樣我們就可以用 N*M*3 矩陣表示圖像。
任何 n * m 像素寬的圖像都可以在計(jì)算機(jī)中的任何位置定義為矩陣 NM*3。
在處理圖像數(shù)據(jù)時(shí),通常會將圖像轉(zhuǎn)換為數(shù)字表示形式,例如矩陣,以便計(jì)算機(jī)算法可以對其進(jìn)行處理。圖像的數(shù)字表示稱為數(shù)字圖像,可以使用數(shù)學(xué)運(yùn)算來處理數(shù)字圖像中的數(shù)據(jù)以執(zhí)行不同的圖像處理任務(wù)。
總的來說,理解圖像數(shù)據(jù)對于使用圖像處理算法和從圖像中提取信息是必要的。
處理圖像的步驟
以下是在 Python 中處理圖像所涉及的常見步驟:
導(dǎo)入庫:你需要導(dǎo)入將用于處理圖像的庫,例如 NumPy 和 OpenCV。加載圖像:你可以使用 OpenCV 中的 imread 函數(shù)加載圖像。預(yù)處理:根據(jù)圖像和所需的結(jié)果,你可能需要執(zhí)行預(yù)處理步驟,例如調(diào)整大小、灰度化或閾值化。操作像素:你可以使用 NumPy 數(shù)組操縱圖像的像素,以執(zhí)行裁剪、旋轉(zhuǎn)和進(jìn)行基于顏色的選擇等操作。過濾:你可以使用不同的過濾器來平滑或銳化圖像,例如高斯或中值過濾器。邊緣檢測:可以使用 Canny 等方法執(zhí)行的邊緣檢測用于識別圖像中對象之間的邊界。理解圖像中的變換
圖像中的變換指的是應(yīng)用于圖像的數(shù)學(xué)運(yùn)算,以改變其外觀或從中提取有用信息?梢詰(yīng)用許多類型的變換到圖像中,包括:
幾何變換:這些變換會改變圖像中像素之間的空間關(guān)系,例如旋轉(zhuǎn)、縮放和平移。顏色變換:這些變換會改變圖像的顏色屬性,例如亮度、對比度和飽和度。過濾:過濾是指從圖像中去除噪聲或增強(qiáng)其特征的過程,如平滑或銳化。邊緣檢測:可以使用 Canny 等方法執(zhí)行的邊緣檢測用于識別圖像中對象之間的邊界。特征提。哼@是指使用 Harris 角點(diǎn)檢測或 SIFT 等算法從圖像中提取有意義的信息(如角點(diǎn)或關(guān)鍵點(diǎn))的過程。
這些轉(zhuǎn)換是使用數(shù)學(xué)算法執(zhí)行的,可以在 Python 或 MATLAB 等軟件中實(shí)現(xiàn)。轉(zhuǎn)換對于圖像處理至關(guān)重要,并且在計(jì)算機(jī)視覺、醫(yī)學(xué)圖像分析和面部識別等應(yīng)用中至關(guān)重要。
現(xiàn)在我們將開始加載圖像并使用 Scikit-Image 庫對圖像進(jìn)行一些操作。
如何加載圖像?
根據(jù)所使用的編程語言和工具,有多種加載圖像的方法。下面介紹幾種常用的方法:
使用圖像處理庫:許多圖像處理庫,如 OpenCV、Pillow 和 Scikit-Image,都提供將圖像加載到內(nèi)存中的功能。例如,你可以使用 imread 函數(shù)在 OpenCV 中加載圖像。使用圖像文件閱讀器:你可以使用特定于文件格式(如 JPEG 或 PNG)的函數(shù)或類從文件中讀取圖像數(shù)據(jù)。例如,你可以使用 Python 中的 imageio 庫來讀取圖像文件。從 URL 加載:你可以從 URL 下載圖像,然后將其加載到內(nèi)存中。
將圖像上傳到內(nèi)存后,你可以使用圖像處理庫提供的函數(shù)對其進(jìn)行各種操作,如調(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è)備上顯示圖像數(shù)據(jù)?梢暬瘓D像取決于所使用的編程語言和工具。下面介紹幾種常用的方法:
使用圖像處理庫:許多圖像處理庫,如 OpenCV、Pillow 和 scikit-image,都提供顯示圖像的功能。例如,你可以使用 imshow 函數(shù)在 OpenCV 中顯示圖像。使用繪圖庫:你可以使用繪圖庫(如 Python 中的 Matplotlib)來顯示圖像。例如,你可以使用 Matplotlib Pyplot 模塊中的 imshow 函數(shù)在 Python 中顯示圖像。
顯示圖像后,你可以通過放大和縮小、平移和重新調(diào)整顯示設(shè)置來與其進(jìn)行交互。
以下是如何使用 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()
在這個(gè)例子中,使用skimage庫的“io”模塊中的imread函數(shù)將一個(gè)名為image.jpg的圖像文件加載到內(nèi)存中。然后使用matplotlib.pyplot模塊的imshow函數(shù)顯示結(jié)果圖像數(shù)據(jù),隨后調(diào)用plt.show()函數(shù)來顯示圖像。
圖像預(yù)處理—調(diào)整圖像大小
Python 的“scikit-image”(skimage) 庫提供了幾個(gè)調(diào)整圖像大小的函數(shù)。為此,一個(gè)常用的功能是“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)
在這個(gè)例子中,使用 io 模塊的 imread 函數(shù)讀取原始圖像。然后,使用 resize 函數(shù)將圖像調(diào)整為大小為 (300, 300) 像素。最后,使用 imsave 函數(shù)保存調(diào)整大小后的圖像。
圖像預(yù)處理—重塑圖像
在Python中,"scikit-image"(skimage)庫提供了幾個(gè)用于重塑圖像的函數(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 個(gè)值。
圖像預(yù)處理—圖像旋轉(zhuǎn)
圖像旋轉(zhuǎn)是指以指定角度圍繞其中心旋轉(zhuǎn)圖像。在scikit-image中,你可以使用transform模塊的rotate函數(shù)旋轉(zhuǎn)圖像。以下是Python中的一個(gè)示例:
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)
在這個(gè)例子中,rotate函數(shù)被用來將輸入圖像旋轉(zhuǎn)180度。rotate函數(shù)的第一個(gè)參數(shù)是輸入圖像,angle參數(shù)指定了旋轉(zhuǎn)角度(以度為單位)。
圖像預(yù)處理—圖像裁剪
圖像裁剪是通過指定裁剪區(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)
在這個(gè)例子中,首先使用imread函數(shù)加載輸入圖像。裁剪區(qū)域通過沿兩個(gè)維度對圖像進(jìn)行切片來指定,因此刪除了行和列的前四分之一和后四分之一。
圖像預(yù)處理——圖像翻轉(zhuǎn)
可以使用 OpenCV 庫中的“cv2.flip”函數(shù)執(zhí)行 Python 中的圖像翻轉(zhuǎn)。“cv2.flip”函數(shù)有兩個(gè)參數(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)可以認(rè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)圖像,該怎么辦?
讓我們假設(shè)我們要進(jìn)行從左到右的翻轉(zhuǎn)。我可以使用“fliplr()”函數(shù)輕松完成此操作,重新讀取圖像并進(jìn)行翻轉(zhuǎn)。
# flip image left-to-right
flipLR = np.fliplr(image)
plt.imshow(flipLR)
plt.title('Left to Right Flipped')
這些是翻轉(zhuǎn)圖像的方法。
圖像預(yù)處理—亮度處理
可以使用圖像庫執(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值,這會改變圖像的強(qiáng)度。所以,這是明亮的圖像。
# brighten the image
bright = adjust_gamma(image,gamma=0.5,gain=1)
imshow(bright)
plt.title('Brightened IMage')
結(jié)論
Scikit-image 是一個(gè)流行的圖像處理 Python 庫,它提供了處理圖像的工具和函數(shù)。以下是用于圖像處理的圖像的一些關(guān)鍵特征的總結(jié):
Image I/O:image提供了讀寫圖片到磁盤的函數(shù),包括imread讀取圖片和imsave保存圖片。圖像恢復(fù):圖像提供了用于恢復(fù)退化圖像的算法,包括去除噪聲和校正模糊或失真的功能。圖像分析:image 提供分析圖像屬性的函數(shù),包括直方圖、梯度幅度和紋理分析。圖像可視化:圖像提供了用于可視化圖像及其屬性的函數(shù),包括繪制和顯示圖像、直方圖和圖像數(shù)據(jù)的其他可視化表示。
原文標(biāo)題 : 使用 SKimage 的圖像預(yù)處理
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動更多
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報(bào)名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報(bào)名中>> OFweek2024中國智造CIO在線峰會
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
推薦專題
- 1 【一周車話】沒有方向盤和踏板的車,你敢坐嗎?
- 2 特斯拉發(fā)布無人駕駛車,還未迎來“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 大模型“新星”開啟變現(xiàn)競速
- 6 海信給AI電視打樣,12大AI智能體全面升級大屏體驗(yàn)
- 7 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 8 馬斯克致敬“國產(chǎn)蘿卜”?
- 9 神經(jīng)網(wǎng)絡(luò),誰是盈利最強(qiáng)企業(yè)?
- 10 比蘋果偉大100倍!真正改寫人類歷史的智能產(chǎn)品降臨