訂閱
糾錯
加入自媒體

使用 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 的圖像預處理

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

發(fā)表評論

0條評論,0人參與

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

請輸入評論/評論長度6~500個字

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

暫無評論

暫無評論

    人工智能 獵頭職位 更多
    掃碼關注公眾號
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯
    x
    *文字標題:
    *糾錯內(nèi)容:
    聯(lián)系郵箱:
    *驗 證 碼:

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