訂閱
糾錯(cuò)
加入自媒體

使用 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ù)處理

聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號