如何對錶示影像的 NumPy 陣列進行重取樣?
對錶示影像的 NumPy 陣列進行重取樣,是指在保持影像質量的同時改變陣列大小的過程。我們可以使用 Python 中的插值、抽取和上取樣技術來對陣列進行重取樣。我們可以使用 Python 中 Scipy 庫的 **ndimage.zoom()** 函式對錶示影像的 NumPy 陣列進行重取樣。在本文中,我們將瞭解如何使用 Python 中的 Scipy 模組對錶示影像的 NumPy 陣列進行重取樣。
插值
插值是一種用於估計現有資料點之間值的技巧。在 NumPy 中,我們有幾種插值方法,例如線性插值、三次插值和最近鄰插值。當新陣列的解析度高於原始陣列時,會使用插值技術。
抽取
抽取是一種用於透過丟棄一些已存在的資料點來減小陣列大小的技術。當新陣列的解析度低於原始陣列時,會使用抽取技術。
上取樣
上取樣是一種透過在現有資料點之間插入新的資料點來增大陣列大小的技術。當新陣列的解析度高於原始陣列時,會使用此技術。
使用 scipy 模組對錶示影像的 NumPy 陣列進行重取樣
為了對 NumPy 陣列進行重取樣,我們將使用 scipy 庫及其中的 ndimage.zoom() 函式來縮放影像並增大其大小,而不會影響影像質量。您可以按照以下步驟對錶示影像的 NumPy 陣列進行重取樣。
演算法
可以使用 scipy 庫按照以下演算法對錶示影像的 NumPy 陣列進行重取樣:
匯入所需的庫:**NumPy、Scipy** 和 **Matplotlib。**
使用 Scipy 庫中的 **imread()** 函式將影像載入為 NumPy 陣列。
使用 Matplotlib 庫中的 **imshow()** 函式顯示原始影像。
計算重取樣影像的縮放因子。縮放因子是新影像大小與原始影像大小的比率。
使用 Scipy 庫中的 **ndimage.zoom()** 函式對影像進行重取樣。將影像陣列和縮放因子作為引數傳遞給該函式。
使用 Matplotlib 庫中的 **imshow()** 函式顯示重取樣影像。
使用 **set_title()** 函式設定原始影像和重取樣影像的標題。
使用 Matplotlib 庫中的 **show()** 函式顯示圖形。
執行程式碼並觀察輸出,以檢查重取樣是否成功。
根據需要調整縮放因子以增加或減少影像的解析度。
我們可以使用 Scipy 庫和 **ndimage.zoom()** 函式輕鬆地對錶示影像的 NumPy 陣列進行重取樣。
語法
scipy.ndimage.zoom(input, zoom, output=None, order=3, mode='reflect', cval=0.0, prefilter=True)
此處,ndimage.zoom() 函式中使用的引數為:
**input** - 這是需要重取樣的輸入陣列。它應該是一個 NumPy 陣列。
**zoom** - 此引數是要用於重取樣影像的縮放因子。它可以是標量或標量序列,指定輸入陣列沿每個維度的縮放因子。
**output** - 此引數是一個可選的輸出陣列,用於放置重取樣的結果。它應該是一個與所需輸出形狀相同的 NumPy 陣列。
**order** - 此引數是要使用的樣條插值階數。它應該是一個整數,其預設值為 3。
**mode** - 此引數是在處理輸入邊界之外的點時要使用的模式。它應該以下列字串之一:'reflect'、'constant'、'nearest'、'mirror' 或 'wrap'。預設值為 'reflect'。
**cval** - 當 mode='constant' 時,此引數是用於輸入邊界之外的點的值。其預設值為 0.0。
**prefilter** - 此引數是一個布林標誌,指示是否在重取樣之前對輸入資料應用預濾波器。其預設值為 True。
步驟 1:匯入必要的庫
我們將匯入 numpy 用於陣列操作,匯入 scipy 用於 ndimage.zoom() 函式,匯入 matplotlib 用於影像視覺化。
import numpy as np from scipy import ndimage import matplotlib.pyplot as plt
步驟 2:載入影像
我們將以 NumPy 陣列的形式建立一個簡單的 3*3 影像,並在下一步中縮放此影像。
image = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
步驟 3:對影像進行重取樣
為了縮放影像,我們將使用 ndimage.zoom() 函式。ndimage.zoom() 函式有兩個引數 - 要縮放的輸入陣列和縮放因子。縮放因子是一個元組,用於指示輸入陣列每個維度的縮放比例。我們將使用 (2,2) 的縮放因子將影像在兩個維度上的大小加倍。
zoom_factor = (2, 2) resampled_image = ndimage.zoom(image, zoom_factor)
步驟 4:視覺化原始影像和重取樣影像
我們可以使用 matplotlib 的 **plt.show()** 函式來視覺化原始影像和重取樣影像。我們建立兩個子圖,在第一個子圖中顯示原始影像,在第二個子圖中顯示重取樣影像。
# Create a figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2)
# Display the original image in the first subplot
ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')
# Display the resampled image in the second subplot
ax2.imshow(resampled_image, cmap='gray')
ax2.set_title('Resampled Image')
# Show the figure
plt.show()
示例
對影像進行重取樣的完整程式碼如下所示:
import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt
# Load the image as a NumPy array
image = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Define the zoom factor
zoom_factor = (2, 2)
# Resample the image using the ndimage.zoom() function
resampled_image = ndimage.zoom(image, zoom_factor)
# Create a figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2)
# Display the original image in the first subplot
ax1.imshow(image, cmap='gray')
ax1.set_title('Original Image')
# Display the resampled image in the second subplot
ax2.imshow(resampled_image, cmap='gray')
ax2.set_title('Resampled Image')
# show the figure
plt.show()
輸出

結論
在本文中,我們討論了對錶示影像的 NumPy 陣列進行重取樣的方法。插值、抽取和上取樣技術用於對影像進行重取樣。Python 的 Scipy 庫用於使用其 ndimage.zoom() 函式對影像進行重取樣。透過更改縮放因子,我們可以根據需要增加或減少影像的解析度。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP