skimage.transform#

幾何和其他轉換,例如旋轉、拉東轉換。

  • 幾何轉換:這些轉換會改變影像的形狀或位置。它們對於諸如影像配準、對齊和幾何校正等任務很有用。範例:AffineTransformProjectiveTransformEuclideanTransform

  • 影像大小調整和縮放:這些轉換會改變影像的大小或解析度。它們對於諸如下採樣影像以縮小其大小或上採樣影像以增加其解析度等任務很有用。範例:resize()rescale()

  • 特徵偵測和提取:這些轉換會識別和提取影像中的特定特徵或模式。它們對於諸如物件偵測、影像分割和特徵匹配等任務很有用。範例:hough_circle()pyramid_expand()radon()

  • 影像轉換:這些轉換會在不改變其內容的情況下改變影像的外觀。它們對於諸如建立影像鑲嵌、應用藝術效果和視覺化影像資料等任務很有用。範例:warp()iradon()

downscale_local_mean

通過局部平均值對 N 維影像進行降採樣。

estimate_transform

估計 2D 幾何轉換參數。

frt2

計算輸入陣列的二維有限拉東轉換 (FRT)。

hough_circle

執行圓形霍夫轉換。

hough_circle_peaks

傳回圓形霍夫轉換中的峰值。

hough_ellipse

執行橢圓霍夫轉換。

hough_line

執行直線霍夫轉換。

hough_line_peaks

傳回直線霍夫轉換中的峰值。

ifrt2

計算輸入陣列的二維反有限拉東轉換 (iFRT)。

integral_image

積分影像/總和區域表。

integrate

使用積分影像在給定視窗上進行積分。

iradon

反拉東轉換。

iradon_sart

反拉東轉換。

matrix_transform

應用 2D 矩陣轉換。

order_angles_golden_ratio

排序角度以減少後續投影中相關資訊的數量。

probabilistic_hough_line

從漸進式機率直線霍夫轉換中傳回線條。

pyramid_expand

上採樣然後平滑影像。

pyramid_gaussian

產生由輸入影像形成的 Gaussian 金字塔的影像。

pyramid_laplacian

產生由輸入影像形成的 Laplacian 金字塔的影像。

pyramid_reduce

平滑然後降採樣影像。

radon

計算給定指定投影角度的影像的拉東轉換。

rescale

將影像縮放特定因數。

resize

調整影像大小以符合特定大小。

resize_local_mean

使用局部平均值/雙線性縮放調整陣列大小。

rotate

繞其中心將影像旋轉特定角度。

swirl

執行漩渦轉換。

warp

根據給定的座標轉換扭曲影像。

warp_coords

為 2-D 影像扭曲的輸出建立來源座標。

warp_polar

將影像重新對應到極座標或對數極座標空間。

AffineTransform

仿射轉換。

EssentialMatrixTransform

基本矩陣轉換。

EuclideanTransform

歐幾里得轉換,也稱為剛性轉換。

FundamentalMatrixTransform

基本矩陣轉換。

PiecewiseAffineTransform

分段仿射轉換。

PolynomialTransform

2D 多項式轉換。

ProjectiveTransform

射影轉換。

SimilarityTransform

相似轉換。

ThinPlateSplineTransform

薄板樣條轉換。


skimage.transform.downscale_local_mean(image, factors, cval=0, clip=True)[原始碼]#

通過局部平均值對 N 維影像進行降採樣。

如果影像不能被整數因數完全整除,則會使用 cval 填充影像。

skimage.transform.resizeskimage.transform.rescale 中的插值相反,此函式計算輸入影像中大小為 factors 的每個區塊中元素的局部平均值。

參數:
image(M[, …]) ndarray

輸入影像。

factorsarray_like

包含沿每個軸的降採樣整數因數的陣列。

cvalfloat,可選

如果影像不能被整數因數完全整除,則為常數填充值。

clipbool,可選

未使用,但為了與此模組中的其他轉換保持 API 一致性而保留在此處。(局部平均值永遠不會超出輸入影像中值的範圍,假設提供的 cval 也在此範圍內。)

傳回值:
imagendarray

降採樣影像,具有與輸入影像相同的維度數。對於整數輸入,輸出 dtype 將為 float64。有關詳細資訊,請參閱 numpy.mean()

範例

>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> downscale_local_mean(a, (2, 3))
array([[3.5, 4. ],
       [5.5, 4.5]])

縮放、調整大小和降採樣

縮放、調整大小和降採樣

skimage.transform.estimate_transform(ttype, src, dst, *args, **kwargs)[原始碼]#

估計 2D 幾何轉換參數。

您可以使用總最小平方方法確定過度確定、良好確定和欠定參數。

來源和目的地座標的數量必須相符。

參數:
ttype{‘euclidean’、‘similarity’、‘affine’、‘piecewise-affine’、‘projective’、‘polynomial’}

轉換類型。

kwargsarray_like 或 int

函式參數 (src、dst、n、angle)

NAME / TTYPE        FUNCTION PARAMETERS
'euclidean'         `src, `dst`
'similarity'        `src, `dst`
'affine'            `src, `dst`
'piecewise-affine'  `src, `dst`
'projective'        `src, `dst`
'polynomial'        `src, `dst`, `order` (polynomial order,
                                          default order is 2)

另請參閱以下範例。

傳回值:
tform_GeometricTransform

轉換物件,包含轉換參數並提供對正向和反向轉換函式的存取權限。

範例

>>> import numpy as np
>>> import skimage as ski
>>> # estimate transformation parameters
>>> src = np.array([0, 0, 10, 10]).reshape((2, 2))
>>> dst = np.array([12, 14, 1, -20]).reshape((2, 2))
>>> tform = ski.transform.estimate_transform('similarity', src, dst)
>>> np.allclose(tform.inverse(tform(src)), src)
True
>>> # warp image using the estimated transformation
>>> image = ski.data.camera()
>>> ski.transform.warp(image, inverse_map=tform.inverse) 
>>> # create transformation with explicit parameters
>>> tform2 = ski.transform.SimilarityTransform(scale=1.1, rotation=1,
...     translation=(10, 20))
>>> # unite transformations, applied in order from left to right
>>> tform3 = tform + tform2
>>> np.allclose(tform3(src), tform2(tform(src)))
True

skimage.transform.frt2(a)[原始碼]#

計算輸入陣列的二維有限拉東轉換 (FRT)。

參數:
a整數 ndarray,形狀為 (M, M)

輸入陣列。

傳回值:
FRT整數 ndarray,形狀為 (M+1, M)

有限拉東轉換係數陣列。

另請參閱

ifrt2

二維反 FRT。

注意

當且僅當 M 為質數時,FRT 才具有唯一反函數。[FRT] 此演算法的想法來自 Vlad Negnevitski。

參考文獻

[FRT]

A. Kingston 和 I. Svalbe,「週期性離散影像陣列上的射影轉換」,載於 P. Hawkes (Ed),《影像和電子物理學的進展》,139 (2006)

範例

產生測試影像:使用質數作為陣列維度

>>> SIZE = 59
>>> img = np.tri(SIZE, dtype=np.int32)

應用有限拉東轉換

>>> f = frt2(img)

skimage.transform.hough_circle(image, radius, normalize=True, full_output=False)[原始碼]#

執行圓形霍夫轉換。

參數:
imagendarray,形狀 (M, N)

輸入影像,非零值代表邊緣。

radius純量或純量序列

計算霍夫轉換的半徑。浮點數會轉換為整數。

normalize布林值,選用

使用繪製半徑所用的像素數量來正規化累加器。

full_output布林值,選用

將輸出大小延伸為最大半徑的兩倍,以便偵測輸入圖片以外的中心。

傳回值:
Hndarray,形狀 (半徑索引, M + 2R, N + 2R)

每個半徑的霍夫轉換累加器。如果 full_output 為 True,則 R 表示較大的半徑。否則,R = 0。

範例

>>> from skimage.transform import hough_circle
>>> from skimage.draw import circle_perimeter
>>> img = np.zeros((100, 100), dtype=bool)
>>> rr, cc = circle_perimeter(25, 35, 23)
>>> img[rr, cc] = 1
>>> try_radii = np.arange(5, 50)
>>> res = hough_circle(img, try_radii)
>>> ridx, r, c = np.unravel_index(np.argmax(res), res.shape)
>>> r, c, try_radii[ridx]
(25, 35, 23)

圓形和橢圓形霍夫轉換

圓形和橢圓形霍夫轉換

skimage.transform.hough_circle_peaks(hspaces, radii, min_xdistance=1, min_ydistance=1, threshold=None, num_peaks=inf, total_num_peaks=inf, normalize=False)[原始碼]#

傳回圓形霍夫轉換中的峰值。

識別給定霍夫空間中,以特定距離分隔的最突出圓形。在霍夫空間的第一和第二維度中,分別應用不同大小的非最大值抑制,以識別峰值。對於半徑不同但距離接近的圓形,只會保留峰值最高的圓形。

參數:
hspaces(M, N, P) 陣列

hough_circle 函數傳回的霍夫空間。

radii(M,) 陣列

對應於霍夫空間的半徑。

min_xdistance整數,選用

在 x 維度中,分隔中心的最小距離。

min_ydistance整數,選用

在 y 維度中,分隔中心的最小距離。

threshold浮點數,選用

每個霍夫空間中峰值的最小強度。預設值為 0.5 * max(hspace)

num_peaks整數,選用

每個霍夫空間中的最大峰值數。當峰值數超過 num_peaks 時,只會針對相應的半徑,考慮基於峰值強度的 num_peaks 個座標。

total_num_peaks整數,選用

最大峰值數。當峰值數超過 num_peaks 時,會傳回基於峰值強度的 num_peaks 個座標。

normalize布林值,選用

如果為 True,則將累加器除以半徑以對顯著峰值進行排序。

傳回值:
accum, cx, cy, rad陣列元組

霍夫空間中的峰值、x 和 y 中心座標以及半徑。

注意

半徑較大的圓形在霍夫空間中具有較高的峰值。如果偏好較大的圓形而不是較小的圓形,則 normalize 應該為 False。否則,將按照投票數遞減的順序傳回圓形。

範例

>>> from skimage import transform, draw
>>> img = np.zeros((120, 100), dtype=int)
>>> radius, x_0, y_0 = (20, 99, 50)
>>> y, x = draw.circle_perimeter(y_0, x_0, radius)
>>> img[x, y] = 1
>>> hspaces = transform.hough_circle(img, radius)
>>> accum, cx, cy, rad = hough_circle_peaks(hspaces, [radius,])

圓形和橢圓形霍夫轉換

圓形和橢圓形霍夫轉換

skimage.transform.hough_ellipse(image, threshold=4, accuracy=1, min_size=4, max_size=None)[原始碼]#

執行橢圓霍夫轉換。

參數:
image(M, N) ndarray

輸入影像,非零值代表邊緣。

threshold整數,選用

累加器臨界值。較低的值會傳回更多橢圓。

accuracy雙精度浮點數,選用

累加器中使用的短軸上的 bin 大小。較高的值會傳回更多橢圓,但會導致短軸長度的估計不太精確。

min_size整數,選用

最小長軸長度。

max_size整數,選用

最大短軸長度。如果為 None,則將值設定為較小影像維度的一半。

傳回值:
result具有欄位的 ndarray [(累加器, yc, xc, a, b, 角度)]。

其中 (yc, xc) 是中心,(a, b) 分別是長軸和短軸。orientation 值遵循 skimage.draw.ellipse_perimeter 慣例。

注意

影像中潛在的橢圓會由其長軸和短軸長度來表示。對於影像中任何一對至少相隔 min_size 一半的非零像素,累加器會追蹤由所有其他非零像素形成的潛在橢圓的短軸長度。如果這些累加的短軸長度直方圖中的任何 bin(其中 bin_size = accuracy * accuracy)高於 threshold,則會將相應的橢圓加入結果中。

因此,較高的 accuracy 會導致在影像中找到更多橢圓,但代價是短軸長度的估計不太精確。

參考文獻

[1]

Xie, Yonghong, 和 Qiang Ji。「一種新的高效橢圓偵測方法。」Pattern Recognition, 2002. Proceedings. 16th International Conference on. Vol. 2. IEEE, 2002

範例

>>> from skimage.transform import hough_ellipse
>>> from skimage.draw import ellipse_perimeter
>>> img = np.zeros((25, 25), dtype=np.uint8)
>>> rr, cc = ellipse_perimeter(10, 10, 6, 8)
>>> img[cc, rr] = 1
>>> result = hough_ellipse(img, threshold=8)
>>> result.tolist()
[(10, 10.0, 10.0, 8.0, 6.0, 0.0)]

圓形和橢圓形霍夫轉換

圓形和橢圓形霍夫轉換

skimage.transform.hough_line(image, theta=None)[原始碼]#

執行直線霍夫轉換。

參數:
image(M, N) ndarray

輸入影像,非零值代表邊緣。

theta雙精度浮點數的 ndarray,形狀 (K,),選用

計算轉換的角度,以弧度表示。預設值為在 [-pi/2, pi/2) 範圍內均勻間隔的 180 個角度向量。

傳回值:
hspaceuint64 的 ndarray,形狀 (P, Q)

霍夫轉換累加器。

anglesndarray

計算轉換的角度,以弧度表示。

distancesndarray

距離值。

注意

原點是原始影像的左上角。X 和 Y 軸分別是水平邊緣和垂直邊緣。距離是從原點到偵測到的線的最小代數距離。藉由減小 theta 陣列中的步長大小,可以提高角度精確度。

範例

產生測試影像

>>> img = np.zeros((100, 150), dtype=bool)
>>> img[30, :] = 1
>>> img[:, 65] = 1
>>> img[35:45, 35:50] = 1
>>> for i in range(90):
...     img[i, i] = 1
>>> rng = np.random.default_rng()
>>> img += rng.random(img.shape) > 0.95

套用霍夫轉換

>>> out, angles, d = hough_line(img)

直線霍夫轉換

直線霍夫轉換

skimage.transform.hough_line_peaks(hspace, angles, dists, min_distance=9, min_angle=10, threshold=None, num_peaks=inf)[原始碼]#

傳回直線霍夫轉換中的峰值。

識別霍夫轉換中,以特定角度和距離分隔的最突出線條。在霍夫空間的第一 (距離) 和第二 (角度) 維度中,分別應用不同大小的非最大值抑制,以識別峰值。

參數:
hspacendarray,形狀 (M, N)

hough_line 函數傳回的霍夫空間。

angles陣列,形狀 (N,)

hough_line 函數傳回的角度。假設為連續的。(angles[-1] - angles[0] == PI)。

dists陣列,形狀 (M,)

hough_line 函數傳回的距離。

min_distance整數,選用

分隔線的最小距離(霍夫空間第一維度的最大濾波器大小)。

min_angle整數,選用

分隔線的最小角度(霍夫空間第二維度的最大濾波器大小)。

threshold浮點數,選用

峰值的最小強度。預設值為 0.5 * max(hspace)

num_peaks整數,選用

最大峰值數。當峰值數超過 num_peaks 時,會傳回基於峰值強度的 num_peaks 個座標。

傳回值:
accum, angles, dists陣列的元組

Hough 空間中的峰值、角度和距離。

範例

>>> from skimage.transform import hough_line, hough_line_peaks
>>> from skimage.draw import line
>>> img = np.zeros((15, 15), dtype=bool)
>>> rr, cc = line(0, 0, 14, 14)
>>> img[rr, cc] = 1
>>> rr, cc = line(0, 14, 14, 0)
>>> img[cc, rr] = 1
>>> hspace, angles, dists = hough_line(img)
>>> hspace, angles, dists = hough_line_peaks(hspace, angles, dists)
>>> len(angles)
2

直線霍夫轉換

直線霍夫轉換

skimage.transform.ifrt2(a)[原始碼]#

計算輸入陣列的二維反有限拉東轉換 (iFRT)。

參數:
a整數的 ndarray,形狀為 (M+1, M)

輸入陣列。

傳回值:
iFRT整數的 ndarray,形狀為 (M, M)

反有限拉東變換係數。

另請參閱

frt2

二維 FRT

注意

FRT 具有唯一的反函數,若且唯若 M 為質數。請參閱 [1] 以獲得概述。此演算法的想法歸功於 Vlad Negnevitski。

參考文獻

[1]

A. Kingston 和 I. Svalbe,「週期性離散影像陣列上的射影轉換」,載於 P. Hawkes (Ed),《影像和電子物理學的進展》,139 (2006)

範例

>>> SIZE = 59
>>> img = np.tri(SIZE, dtype=np.int32)

應用有限拉東轉換

>>> f = frt2(img)

套用反有限拉東變換以還原輸入

>>> fi = ifrt2(f)

檢查是否與原始值相同

>>> assert len(np.nonzero(img-fi)[0]) == 0

skimage.transform.integral_image(image, *, dtype=None)[原始碼]#

積分影像/總和區域表。

積分影像包含其上方和左側所有元素的總和,即

\[S[m, n] = \sum_{i \leq m} \sum_{j \leq n} X[i, j]\]
參數:
imagendarray

輸入影像。

傳回值:
Sndarray

與輸入影像形狀相同的積分影像/總和區域表。

注意

為了獲得更好的準確性並避免潛在的溢位,當使用預設的 None 類型時,輸出的資料類型可能與輸入的不同。對於整數資料類型的輸入,其行為與 numpy.cumsum() 的行為相符。浮點數輸入將至少升級為雙精度。使用者可以設定 dtype 來覆寫此行為。

參考文獻

[1]

F.C. Crow, “用於紋理對應的總和面積表”, ACM SIGGRAPH 電腦圖形, vol. 18, 1984, pp. 207-212.

用於紋理分類的多區塊局部二元模式

用於紋理分類的多區塊局部二元模式

使用類似 Haar 的特徵描述子的臉部分類

使用類似 Haar 的特徵描述子的臉部分類

skimage.transform.integrate(ii, start, end)[原始碼]#

使用積分影像在給定視窗上進行積分。

參數:
iindarray

積分影像。

start元組的清單,每個元組的長度等於 ii 的維度

視窗左上角的座標。清單中的每個元組包含起始列、行、... 索引,即 [(row_win1, col_win1, ...), (row_win2, col_win2,...), ...]

end元組的清單,每個元組的長度等於 ii 的維度

視窗右下角的座標。清單中的每個元組包含結束列、行、... 索引,即 [(row_win1, col_win1, ...), (row_win2, col_win2, ...), ...]

傳回值:
S純量或 ndarray

給定視窗上的積分(總和)。

另請參閱

integral_image

建立積分影像/總和區域表。

範例

>>> arr = np.ones((5, 6), dtype=float)
>>> ii = integral_image(arr)
>>> integrate(ii, (1, 0), (1, 2))  # sum from (1, 0) to (1, 2)
array([3.])
>>> integrate(ii, [(3, 3)], [(4, 5)])  # sum from (3, 3) to (4, 5)
array([6.])
>>> # sum from (1, 0) to (1, 2) and from (3, 3) to (4, 5)
>>> integrate(ii, [(1, 0), (3, 3)], [(1, 2), (4, 5)])
array([3., 6.])

skimage.transform.iradon(radon_image, theta=None, output_size=None, filter_name='ramp', interpolation='linear', circle=True, preserve_range=True)[原始碼]#

反拉東轉換。

使用濾波反投影演算法,從拉東變換重建影像。

參數:
radon_imagendarray

包含拉東變換(正弦圖)的影像。影像的每個列對應於沿不同角度的投影。斷層掃描旋轉軸應位於 radon_image 第 0 維度的像素索引 radon_image.shape[0] // 2 處。

theta陣列,選用

重建角度(以度為單位)。預設值:m 個角度均勻間隔在 0 到 180 之間(如果 radon_image 的形狀為 (N, M))。

output_sizeint,選用

重建中的列數和欄數。

filter_namestr,選用

用於頻域濾波的濾波器。預設使用斜坡濾波器。可用的濾波器:斜坡、Shepp-Logan、餘弦、漢明、漢恩。指定 None 以不使用濾波器。

interpolationstr,選用

重建中使用的插值方法。可用的方法:'線性'、'最近' 和 '立方'('立方' 速度較慢)。

circle布林值,選用

假設重建影像在內切圓之外為零。也將預設的 output_size 變更為與呼叫 circle=Trueradon 的行為相符。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

傳回值:
reconstructedndarray

重建的影像。旋轉軸將位於索引為 (reconstructed.shape[0] // 2, reconstructed.shape[1] // 2) 的像素中。

在 0.19 版本中變更:iradon 中,filter 引數已棄用,改用 filter_name

注意

它會套用傅立葉切片定理,方法是將濾波器的頻域與投影資料的 FFT 相乘,以重建影像。此演算法稱為濾波反投影。

參考文獻

[1]

AC Kak, M Slaney, “電腦斷層掃描成像原理”, IEEE Press 1988.

[2]

B.R. Ramesh, N. Srinivasa, K. Rajgopal, “一種計算離散拉東變換及其一些應用的演算法”, 第四屆 IEEE 第 10 區國際會議論文集, TENCON '89, 1989

拉東變換

拉東變換

skimage.transform.iradon_sart(radon_image, theta=None, image=None, projection_shifts=None, clip=None, relaxation=0.15, dtype=None)[原始碼]#

反拉東轉換。

使用同步代數重建技術 (SART) 演算法的單一疊代,從拉東變換重建影像。

參數:
radon_imagendarray,形狀為 (M, N)

包含拉東變換(正弦圖)的影像。影像的每個列對應於沿不同角度的投影。斷層掃描旋轉軸應位於 radon_image 第 0 維度的像素索引 radon_image.shape[0] // 2 處。

theta陣列,形狀為 (N,),選用

重建角度(以度為單位)。預設值:m 個角度均勻間隔在 0 到 180 之間(如果 radon_image 的形狀為 (N, M))。

imagendarray,形狀為 (M, M),選用

包含初始重建估計的影像。預設值為零陣列。

projection_shifts陣列,形狀為 (N,),選用

在重建影像之前,將 radon_image(正弦圖)中包含的投影偏移這麼多像素。第 i 個值定義 radon_image 的第 i 個列的偏移量。

clip長度為 2 的浮點數序列,選用

強制重建斷層掃描圖中的所有值都落在範圍 [clip[0], clip[1]]

relaxation浮點數,選用

更新步驟的鬆弛參數。較高的值可以改善收斂速度,但會冒著不穩定的風險。不建議使用接近或高於 1 的值。

dtypedtype,選用

輸出資料類型,必須是浮點數。預設情況下,如果輸入資料類型不是浮點數,則輸入會轉換為雙精度,否則 dtype 會設定為輸入資料類型。

傳回值:
reconstructedndarray

重建的影像。旋轉軸將位於索引為 (reconstructed.shape[0] // 2, reconstructed.shape[1] // 2) 的像素中。

注意

代數重建技術基於將斷層掃描重建問題公式化為一組線性方程式。沿著每條射線,投影值是射線沿線橫截面的所有值的總和。SART 的典型特徵(以及一些其他代數技術的變體)是它使用橫截面像素值之間的線性插值,沿射線以等距點對橫截面進行取樣。然後使用稍微修改的 Kaczmarz 方法求解產生的線性方程式組。

使用 SART 時,通常只需單次疊代即可獲得良好的重建。進一步的疊代將傾向於增強高頻資訊,但也經常會增加雜訊。

參考文獻

[1]

AC Kak, M Slaney, “電腦斷層掃描成像原理”, IEEE Press 1988.

[2]

AH Andersen, AC Kak, “Simultaneous algebraic reconstruction technique (SART): a superior implementation of the ART algorithm”, Ultrasonic Imaging 6 pp 81–94 (1984)

[3]

S Kaczmarz, “Angenäherte auflösung von systemen linearer gleichungen”, Bulletin International de l’Academie Polonaise des Sciences et des Lettres 35 pp 355–357 (1937)

[4]

Kohler, T. “A projection access scheme for iterative reconstruction based on the golden section.” Nuclear Science Symposium Conference Record, 2004 IEEE. Vol. 6. IEEE, 2004。

[5]

卡茨馬茲方法,維基百科,https://en.wikipedia.org/wiki/Kaczmarz_method

拉東變換

拉東變換

skimage.transform.matrix_transform(coords, matrix)[原始碼]#

應用 2D 矩陣轉換。

參數:
coords(N, 2) 類陣列

要轉換的 x, y 坐標

matrix(3, 3) 類陣列

齊次轉換矩陣。

傳回值:
coords(N, 2) 陣列

轉換後的坐標。


skimage.transform.order_angles_golden_ratio(theta)[原始碼]#

排序角度以減少後續投影中相關資訊的數量。

參數:
theta浮點數陣列,形狀 (M,)

以度為單位的投影角度。不允許重複的角度。

傳回值:
indices_generator生成器,產生無符號整數

返回的生成器會產生 theta 的索引,使得 theta[indices] 給出投影的近似黃金比例排序。總共產生 len(theta) 個索引。所有非負整數 < len(theta) 都會恰好產生一次。

注意

此處使用的方法是 T. Kohler 引入的黃金比例法。

參考文獻

[1]

Kohler, T. “A projection access scheme for iterative reconstruction based on the golden section.” Nuclear Science Symposium Conference Record, 2004 IEEE. Vol. 6. IEEE, 2004。

[2]

Winkelmann, Stefanie, et al. “An optimal radial profile order based on the Golden Ratio for time-resolved MRI.” Medical Imaging, IEEE Transactions on 26.1 (2007): 68-76.


skimage.transform.probabilistic_hough_line(image, threshold=10, line_length=50, line_gap=10, theta=None, rng=None)[原始碼]#

從漸進式機率直線霍夫轉換中傳回線條。

參數:
imagendarray,形狀 (M, N)

輸入影像,非零值代表邊緣。

threshold整數,選用

閾值

line_length整數,可選

偵測到的線條可接受的最小長度。增加此參數可提取更長的線條。

line_gap整數,可選

像素之間的最大間隙,仍然可以形成一條線。增加此參數可更積極地合併斷線。

thetandarray 的 dtype,形狀 (K,),可選

計算轉換的角度,以弧度表示。預設值為在 [-pi/2, pi/2) 範圍內均勻間隔的 180 個角度向量。

rng{numpy.random.Generator, int}, 可選

虛擬隨機數產生器。預設情況下,會使用 PCG64 產生器 (請參閱numpy.random.default_rng())。如果 rng 是一個整數,則會用它來設定產生器的種子。

傳回值:
lines列表

已識別的線條列表,線條格式為 ((x0, y0), (x1, y1)),表示線條的起點和終點。

參考文獻

[1]

C. Galamhos, J. Matas and J. Kittler, “Progressive probabilistic Hough transform for line detection”, in IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 1999.

直線霍夫轉換

直線霍夫轉換

skimage.transform.pyramid_expand(image, upscale=2, sigma=None, order=1, mode='reflect', cval=0, preserve_range=False, *, channel_axis=None)[原始碼]#

上採樣然後平滑影像。

參數:
imagendarray

輸入影像。

upscale浮點數,可選

放大比例因子。

sigma浮點數,可選

高斯濾波器的 Sigma。預設值為 2 * upscale / 6.0,它對應於比例因子兩倍大小的濾波器遮罩,該遮罩涵蓋了高斯分佈的 99% 以上。

order整數,可選

在升採樣插值中使用的樣條線階數。有關詳細資訊,請參閱skimage.transform.warp

mode{'reflect', 'constant', 'edge', 'symmetric', 'wrap'},可選

mode 參數決定如何處理陣列邊界,其中 cval 是當 mode 等於 'constant' 時的值。

cvalfloat,可選

如果 mode 為 'constant',則填充輸入邊界以外的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

channel_axis整數或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數表示陣列的哪個軸對應於通道。

在版本 0.19 中新增:channel_axis 是在 0.19 中新增的。

傳回值:
out陣列

升採樣和平滑後的浮點數影像。

參考文獻


skimage.transform.pyramid_gaussian(image, max_layer=-1, downscale=2, sigma=None, order=1, mode='reflect', cval=0, preserve_range=False, *, channel_axis=None)[原始碼]#

產生由輸入影像形成的 Gaussian 金字塔的影像。

遞迴地將pyramid_reduce 函數應用於影像,並產生縮小的影像。

請注意,金字塔的第一個影像將是原始、未縮放的影像。影像的總數為 max_layer + 1。如果計算所有圖層,則最後一個影像會是單像素影像,或縮減不會改變其形狀的影像。

參數:
imagendarray

輸入影像。

max_layer整數,可選

金字塔的圖層數。第 0 層是原始影像。預設值為 -1,表示建立所有可能的圖層。

downscale浮點數,可選

縮小比例因子。

sigma浮點數,可選

高斯濾波器的 Sigma。預設值為 2 * downscale / 6.0,它對應於比例因子兩倍大小的濾波器遮罩,該遮罩涵蓋了高斯分佈的 99% 以上。

order整數,可選

在降採樣插值中使用的樣條線階數。有關詳細資訊,請參閱skimage.transform.warp

mode{'reflect', 'constant', 'edge', 'symmetric', 'wrap'},可選

mode 參數決定如何處理陣列邊界,其中 cval 是當 mode 等於 'constant' 時的值。

cvalfloat,可選

如果 mode 為 'constant',則填充輸入邊界以外的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

channel_axis整數或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數表示陣列的哪個軸對應於通道。

在版本 0.19 中新增:channel_axis 是在 0.19 中新增的。

傳回值:
金字塔產生器

產生器,以浮點數影像的形式產生金字塔圖層。

參考文獻

建立影像金字塔

建立影像金字塔

skimage.transform.pyramid_laplacian(image, max_layer=-1, downscale=2, sigma=None, order=1, mode='reflect', cval=0, preserve_range=False, *, channel_axis=None)[原始碼]#

產生由輸入影像形成的 Laplacian 金字塔的影像。

每個圖層都包含降採樣影像與降採樣平滑影像之間的差異

layer = resize(prev_layer) - smooth(resize(prev_layer))

請注意,金字塔的第一張影像將是原始、未縮放的影像與其平滑版本之間的差異。影像總數為 max_layer + 1。如果計算所有圖層,則最後一張影像會是單像素影像,或是縮減不會改變其形狀的影像。

參數:
imagendarray

輸入影像。

max_layer整數,可選

金字塔的圖層數。第 0 層是原始影像。預設值為 -1,表示建立所有可能的圖層。

downscale浮點數,可選

縮小比例因子。

sigma浮點數,可選

高斯濾波器的 Sigma。預設值為 2 * downscale / 6.0,它對應於比例因子兩倍大小的濾波器遮罩,該遮罩涵蓋了高斯分佈的 99% 以上。

order整數,可選

在降採樣插值中使用的樣條線階數。有關詳細資訊,請參閱skimage.transform.warp

mode{'reflect', 'constant', 'edge', 'symmetric', 'wrap'},可選

mode 參數決定如何處理陣列邊界,其中 cval 是當 mode 等於 'constant' 時的值。

cvalfloat,可選

如果 mode 為 'constant',則填充輸入邊界以外的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

channel_axis整數或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數表示陣列的哪個軸對應於通道。

在版本 0.19 中新增:channel_axis 是在 0.19 中新增的。

傳回值:
金字塔產生器

產生器,以浮點數影像的形式產生金字塔圖層。

參考文獻


skimage.transform.pyramid_reduce(image, downscale=2, sigma=None, order=1, mode='reflect', cval=0, preserve_range=False, *, channel_axis=None)[原始碼]#

平滑然後降採樣影像。

參數:
imagendarray

輸入影像。

downscale浮點數,可選

縮小比例因子。

sigma浮點數,可選

高斯濾波器的 Sigma。預設值為 2 * downscale / 6.0,它對應於比例因子兩倍大小的濾波器遮罩,該遮罩涵蓋了高斯分佈的 99% 以上。

order整數,可選

在降採樣插值中使用的樣條線階數。有關詳細資訊,請參閱skimage.transform.warp

mode{'reflect', 'constant', 'edge', 'symmetric', 'wrap'},可選

mode 參數決定如何處理陣列邊界,其中 cval 是當 mode 等於 'constant' 時的值。

cvalfloat,可選

如果 mode 為 'constant',則填充輸入邊界以外的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

channel_axis整數或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數表示陣列的哪個軸對應於通道。

在版本 0.19 中新增:channel_axis 是在 0.19 中新增的。

傳回值:
out陣列

平滑且降採樣的浮點數影像。

參考文獻


skimage.transform.radon(image, theta=None, circle=True, *, preserve_range=False)[原始碼]#

計算給定指定投影角度的影像的拉東轉換。

參數:
imagendarray

輸入影像。旋轉軸將位於索引為 (image.shape[0] // 2, image.shape[1] // 2) 的像素中。

theta陣列,選用

投影角度(以度為單位)。如果為 None,則該值會設定為 np.arange(180)。

circle布林值,選用

假設影像在內切圓外為零,使每個投影的寬度(正弦圖的第一個維度)等於 min(image.shape)

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

傳回值:
radon_imagendarray

拉東轉換(正弦圖)。斷層掃描旋轉軸將沿著 radon_image 的第 0 維位於像素索引 radon_image.shape[0] // 2

注意

基於 Justin K. Romberg 的程式碼 (https://www.clear.rice.edu/elec431/projects96/DSP/bpanalysis.html)

參考文獻

[1]

AC Kak, M Slaney, “電腦斷層掃描成像原理”, IEEE Press 1988.

[2]

B.R. Ramesh, N. Srinivasa, K. Rajgopal, “一種計算離散拉東變換及其一些應用的演算法”, 第四屆 IEEE 第 10 區國際會議論文集, TENCON '89, 1989

拉東變換

拉東變換

skimage.transform.rescale(image, scale, order=None, mode='reflect', cval=0, clip=True, preserve_range=False, anti_aliasing=None, anti_aliasing_sigma=None, *, channel_axis=None)[原始碼]#

將影像縮放特定因數。

執行插值以放大或縮小 N 維影像。請注意,縮小影像尺寸時應啟用反鋸齒功能,以避免鋸齒失真。若要使用整數因子進行降採樣,另請參閱 skimage.transform.downscale_local_mean

參數:
image(M, N[, …][, C]) ndarray

輸入影像。

scale{浮點數, 浮點數元組}

空間維度的縮放因子。可將個別縮放因子定義為 (m, n[, …])。

傳回值:
scaledndarray

輸入的縮放版本。

其他參數:
order整數,可選

樣條插值的階數,如果 image.dtype 為布林值,則預設值為 0,否則為 1。階數必須在 0-5 的範圍內。如需詳細資訊,請參閱 skimage.transform.warp

mode{'constant'、'edge'、'symmetric'、'reflect'、'wrap'},選填

輸入邊界外的點會根據給定的模式填入。模式會與 numpy.pad 的行為相符。

cvalfloat,可選

與模式 'constant' 一起使用,表示影像邊界外的值。

clipbool,可選

是否將輸出裁剪為輸入影像的值範圍。預設會啟用此設定,因為較高階的插值可能會產生超出指定輸入範圍的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

anti_aliasing布林值,選填

是否在縮小影像尺寸之前套用高斯濾波器來平滑影像。縮小影像尺寸時,務必進行濾波以避免鋸齒失真。如果輸入影像資料類型為布林值,則不會套用反鋸齒。

anti_aliasing_sigma{浮點數, 浮點數元組},選填

高斯濾波的標準差,用於避免鋸齒失真。預設情況下,此值會選為 (s - 1) / 2,其中 s 是縮小尺寸的因子。

channel_axis整數或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數表示陣列的哪個軸對應於通道。

在版本 0.19 中新增:channel_axis 是在 0.19 中新增的。

注意

模式 'reflect' 和 'symmetric' 相似,但差異在於是否在反射期間複製邊緣像素。例如,如果陣列的值為 [0, 1, 2] 且使用對稱方式向右填補了四個值,則結果會是 [0, 1, 2, 2, 1, 0, 0],而如果使用反射,則結果會是 [0, 1, 2, 1, 0, 1, 2]。

範例

>>> from skimage import data
>>> from skimage.transform import rescale
>>> image = data.camera()
>>> rescale(image, 0.1).shape
(51, 51)
>>> rescale(image, 0.5).shape
(256, 256)

插值:邊緣模式

插值:邊緣模式

縮放、調整大小和降採樣

縮放、調整大小和降採樣

拉東變換

拉東變換

使用極座標和對數極座標轉換進行配準

使用極座標和對數極座標轉換進行配準

skimage.transform.resize(image, output_shape, order=None, mode='reflect', cval=0, clip=True, preserve_range=False, anti_aliasing=None, anti_aliasing_sigma=None)[原始碼]#

調整影像大小以符合特定大小。

執行插值以放大或縮小 N 維影像。請注意,縮小影像尺寸時應啟用反鋸齒功能,以避免鋸齒失真。若要使用整數因子進行降採樣,另請參閱 skimage.transform.downscale_local_mean

參數:
imagendarray

輸入影像。

output_shape可迭代物件

產生的輸出影像的大小 (rows, cols[, ...][, dim])。如果未提供 dim,則會保留通道數。如果輸入通道數與輸出通道數不相等,則會套用 n 維插值。

傳回值:
resizedndarray

輸入的調整大小版本。

其他參數:
order整數,可選

樣條插值的階數,如果 image.dtype 為布林值,則預設值為 0,否則為 1。階數必須在 0-5 的範圍內。如需詳細資訊,請參閱 skimage.transform.warp

mode{'constant'、'edge'、'symmetric'、'reflect'、'wrap'},選填

輸入邊界外的點會根據給定的模式填入。模式會與 numpy.pad 的行為相符。

cvalfloat,可選

與模式 'constant' 一起使用,表示影像邊界外的值。

clipbool,可選

是否將輸出裁剪為輸入影像的值範圍。預設會啟用此設定,因為較高階的插值可能會產生超出指定輸入範圍的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

anti_aliasing布林值,選填

是否在降採樣前應用高斯濾波器平滑影像。當降採樣影像以避免混疊偽影時,濾波至關重要。如果未指定,當降採樣資料類型不是布林的影像時,則設定為 True。當使用最近鄰插值(order == 0)且輸入資料類型為整數時,則設定為 False。

anti_aliasing_sigma{浮點數, 浮點數元組},選填

用於抗鋸齒時高斯濾波的標準差。預設情況下,此值選為 (s - 1) / 2,其中 s 是降採樣因子,且 s > 1。對於放大尺寸的情況,s < 1,在重新縮放之前不執行抗鋸齒。

注意

模式 'reflect' 和 'symmetric' 相似,但差異在於是否在反射期間複製邊緣像素。例如,如果陣列的值為 [0, 1, 2] 且使用對稱方式向右填補了四個值,則結果會是 [0, 1, 2, 2, 1, 0, 0],而如果使用反射,則結果會是 [0, 1, 2, 1, 0, 1, 2]。

範例

>>> from skimage import data
>>> from skimage.transform import resize
>>> image = data.camera()
>>> resize(image, (100, 100)).shape
(100, 100)

插值:邊緣模式

插值:邊緣模式

縮放、調整大小和降採樣

縮放、調整大小和降採樣

費雪向量特徵編碼

費雪向量特徵編碼

skimage.transform.resize_local_mean(image, output_shape, grid_mode=True, preserve_range=False, *, channel_axis=None)[原始碼]#

使用局部平均值/雙線性縮放調整陣列大小。

參數:
imagendarray

輸入影像。如果這是多通道影像,則應使用 channel_axis 指定對應於通道的軸。

output_shape可迭代物件

產生的輸出影像的大小。當 channel_axis 不為 None 時,channel_axis 應該從 output_shape 中省略,或 output_shape[channel_axis] 必須與 image.shape[channel_axis] 相符。如果 output_shape 的長度超過 image.ndim,則會根據需要將額外的單例維度附加到輸入的 image

grid_mode布林值,可選

定義 image 像素位置:如果為 True,則假設像素位於網格交點處,否則位於單元格中心。因此,例如,當 grid_mode 為 False 時,長度為 5 的一維訊號被認為具有長度 4,但當 grid_mode 為 True 時,則具有長度 5。請參閱以下視覺說明

| pixel 1 | pixel 2 | pixel 3 | pixel 4 | pixel 5 |
     |<-------------------------------------->|
                        vs.
|<----------------------------------------------->|

上圖中箭頭的起點對應於每種模式中的座標位置 0。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

傳回值:
resizedndarray

輸入的調整大小版本。

另請參閱

resizedownscale_local_mean

注意

此方法有時被稱為「基於面積」的插值或「像素混合」插值 [1]。當 grid_mode 為 True 時,它等同於使用 OpenCV 的 resize 和 INTER_AREA 插值模式。它通常用於縮小影像。如果縮小因子是整數,則應優先使用 downscale_local_mean

參考文獻

範例

>>> from skimage import data
>>> from skimage.transform import resize_local_mean
>>> image = data.camera()
>>> resize_local_mean(image, (100, 100)).shape
(100, 100)

skimage.transform.rotate(image, angle, resize=False, center=None, order=None, mode='constant', cval=0, clip=True, preserve_range=False)[原始碼]#

繞其中心將影像旋轉特定角度。

參數:
imagendarray

輸入影像。

angle浮點數

逆時針方向的旋轉角度,以度為單位。

resize布林值,可選

確定是否自動計算輸出影像的形狀,以便完整旋轉的影像完全符合。預設值為 False。

center長度為 2 的可迭代物件

旋轉中心。如果 center=None,則影像會繞其中心旋轉,即 center=(cols / 2 - 0.5, rows / 2 - 0.5)。請注意,此參數為 (cols, rows),與正常的 skimage 順序相反。

傳回值:
rotatedndarray

輸入的旋轉版本。

其他參數:
order整數,可選

樣條插值的階數,如果 image.dtype 為布林值,則預設值為 0,否則為 1。階數必須在 0-5 的範圍內。如需詳細資訊,請參閱 skimage.transform.warp

mode{'constant'、'edge'、'symmetric'、'reflect'、'wrap'},選填

輸入邊界外的點會根據給定的模式填入。模式會與 numpy.pad 的行為相符。

cvalfloat,可選

與模式 'constant' 一起使用,表示影像邊界外的值。

clipbool,可選

是否將輸出裁剪為輸入影像的值範圍。預設會啟用此設定,因為較高階的插值可能會產生超出指定輸入範圍的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

注意

模式 'reflect' 和 'symmetric' 相似,但差異在於是否在反射期間複製邊緣像素。例如,如果陣列的值為 [0, 1, 2] 且使用對稱方式向右填補了四個值,則結果會是 [0, 1, 2, 2, 1, 0, 0],而如果使用反射,則結果會是 [0, 1, 2, 1, 0, 1, 2]。

範例

>>> from skimage import data
>>> from skimage.transform import rotate
>>> image = data.camera()
>>> rotate(image, 2).shape
(512, 512)
>>> rotate(image, 2, resize=True).shape
(530, 530)
>>> rotate(image, 90, resize=True).shape
(512, 512)

單應性類型

單應性類型

使用簡單的影像拼接組裝影像

使用簡單的影像拼接組裝影像

使用極座標和對數極座標轉換進行配準

使用極座標和對數極座標轉換進行配準

ORB 特徵檢測器和二元描述子

ORB 特徵檢測器和二元描述子

BRIEF 二元描述子

BRIEF 二元描述子

SIFT 特徵檢測器和描述子提取器

SIFT 特徵檢測器和描述子提取器

滑動視窗直方圖

滑動視窗直方圖

用於紋理分類的局部二元模式

用於紋理分類的局部二元模式

使用不同的估算器測量周長

使用不同的估算器測量周長

測量區域屬性

測量區域屬性

視覺影像比較

視覺影像比較

skimage.transform.swirl(image, center=None, strength=1, radius=100, rotation=0, output_shape=None, order=None, mode='reflect', cval=0, clip=True, preserve_range=False)[原始碼]#

執行漩渦轉換。

參數:
imagendarray

輸入影像。

center(欄,列) 元組或 (2,) ndarray,可選

變換的中心座標。

strength浮點數,可選

應用的旋轉量。

radius浮點數,可選

旋轉的範圍(以像素為單位)。效果在 radius 之外會迅速減弱。

rotation浮點數,可選

應用於影像的其他旋轉。

傳回值:
swirledndarray

輸入的旋轉版本。

其他參數:
output_shape元組 (列,行),可選

產生的輸出影像的形狀。預設情況下,會保留輸入影像的形狀。

order整數,可選

樣條插值的階數,如果 image.dtype 為布林值,則預設值為 0,否則為 1。階數必須在 0-5 的範圍內。如需詳細資訊,請參閱 skimage.transform.warp

mode{'constant'、'edge'、'symmetric'、'reflect'、'wrap'},選填

根據給定的模式填充輸入邊界外的點,預設使用「reflect」。模式與 numpy.pad 的行為一致。

cvalfloat,可選

與模式 'constant' 一起使用,表示影像邊界外的值。

clipbool,可選

是否將輸出裁剪為輸入影像的值範圍。預設會啟用此設定,因為較高階的插值可能會產生超出指定輸入範圍的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

旋轉

旋轉

skimage.transform.warp(image, inverse_map, map_args=None, output_shape=None, order=None, mode='constant', cval=0.0, clip=True, preserve_range=False)[原始碼]#

根據給定的座標轉換扭曲影像。

參數:
imagendarray

輸入影像。

inverse_map變換物件、可呼叫 cr = f(cr, **kwargs) 或 ndarray

反向座標映射,它將輸出影像中的座標轉換為輸入影像中的對應座標。

根據輸入影像的維度,可以使用許多不同的選項來定義此映射。二維影像可以是灰階影像的 2 個維度,也可以是帶有色彩資訊的 3 個維度。

  • 對於 2 維影像,您可以直接傳遞一個轉換物件,例如 skimage.transform.SimilarityTransform,或是它的反向轉換。

  • 對於 2 維影像,您可以傳遞一個 (3, 3) 的齊次轉換矩陣,例如 skimage.transform.SimilarityTransform.params

  • 對於 2 維影像,可以傳遞一個函數,該函數將輸出影像中 (M, 2)(col, row) 座標陣列轉換為輸入影像中對應的座標。 可以透過 map_args 指定函數的額外參數。

  • 對於 N 維影像,您可以直接傳遞一個座標陣列。第一個維度指定輸入影像中的座標,而後續的維度則決定輸出影像中的位置。例如,在 2 維影像的情況下,您需要傳遞一個形狀為 (2, rows, cols) 的陣列,其中 rowscols 決定輸出影像的形狀,而第一個維度包含輸入影像中的 (row, col) 座標。請參閱 scipy.ndimage.map_coordinates 以獲取更多文件。

請注意,(3, 3) 矩陣會被解釋為齊次轉換矩陣,因此如果輸出形狀為 (3,),則您無法從 3 維輸入中插值。

請參閱範例章節以了解用法。

map_argsdict,選用

傳遞給 inverse_map 的關鍵字引數。

output_shape元組 (列,行),可選

產生的輸出影像的形狀。預設情況下,會保留輸入影像的形狀。請注意,即使對於多頻影像,也只需要指定行和列。

order整數,可選
插值的順序。順序必須在 0-5 的範圍內
  • 0:最近鄰

  • 1:雙線性(預設)

  • 2:雙二次

  • 3:雙三次

  • 4:雙四次

  • 5:雙五次

如果 image.dtype 是 bool,則預設值為 0,否則為 1。

mode{'constant'、'edge'、'symmetric'、'reflect'、'wrap'},選填

輸入邊界外的點會根據給定的模式填入。模式會與 numpy.pad 的行為相符。

cvalfloat,可選

與模式 'constant' 一起使用,表示影像邊界外的值。

clipbool,可選

是否將輸出裁剪為輸入影像的值範圍。預設會啟用此設定,因為較高階的插值可能會產生超出指定輸入範圍的值。

preserve_range布林值,選用

是否保留原始值範圍。否則,輸入影像會根據 img_as_float 的慣例進行轉換。另請參閱 https://scikit-image.dev.org.tw/docs/dev/user_guide/data_types.html

傳回值:
warped雙精度浮點數 ndarray

扭曲後的輸入影像。

注意

範例

>>> from skimage.transform import warp
>>> from skimage import data
>>> image = data.camera()

以下影像扭曲效果都相同,但在執行時間上差異很大。影像會被向下移動。

使用幾何變換來扭曲影像(快速)

>>> from skimage.transform import SimilarityTransform
>>> tform = SimilarityTransform(translation=(0, -10))
>>> warped = warp(image, tform)

使用可呼叫物件(慢速)

>>> def shift_down(xy):
...     xy[:, 1] -= 10
...     return xy
>>> warped = warp(image, shift_down)

使用轉換矩陣來扭曲影像(快速)

>>> matrix = np.array([[1, 0, 0], [0, 1, -10], [0, 0, 1]])
>>> warped = warp(image, matrix)
>>> from skimage.transform import ProjectiveTransform
>>> warped = warp(image, ProjectiveTransform(matrix=matrix))

您也可以使用幾何變換的反向轉換(快速)

>>> warped = warp(image, tform.inverse)

對於 N 維影像,您可以傳遞一個座標陣列,該陣列指定輸出影像中每個元素的輸入影像中的座標。例如,如果您想要縮放 3 維立方體,您可以執行以下操作

>>> cube_shape = np.array([30, 30, 30])
>>> rng = np.random.default_rng()
>>> cube = rng.random(cube_shape)

設定定義縮放的座標陣列

>>> scale = 0.1
>>> output_shape = (scale * cube_shape).astype(int)
>>> coords0, coords1, coords2 = np.mgrid[:output_shape[0],
...                    :output_shape[1], :output_shape[2]]
>>> coords = np.array([coords0, coords1, coords2])

假設立方體包含空間資料,其中第一個陣列元素的中心在真實空間中的座標為 (0.5, 0.5, 0.5),也就是說,我們在縮放影像時必須考慮這個額外的偏移

>>> coords = (coords + 0.5) / scale - 0.5
>>> warped = warp(cube, coords)

分段仿射變換

分段仿射變換

使用幾何變換

使用幾何變換

單應性類型

單應性類型

使用薄板樣條進行影像扭曲

使用薄板樣條進行影像扭曲

使用 RANSAC 進行強健匹配

使用 RANSAC 進行強健匹配

使用光流進行配準

使用光流進行配準

使用簡單的影像拼接組裝影像

使用簡單的影像拼接組裝影像

角點偵測

角點偵測

CENSURE 特徵偵測器

CENSURE 特徵偵測器

ORB 特徵檢測器和二元描述子

ORB 特徵檢測器和二元描述子

BRIEF 二元描述子

BRIEF 二元描述子

SIFT 特徵檢測器和描述子提取器

SIFT 特徵檢測器和描述子提取器

skimage.transform.warp_coords(coord_map, shape, dtype=<class 'numpy.float64'>)[source]#

為 2-D 影像扭曲的輸出建立來源座標。

參數:
coord_map可呼叫物件,類似 GeometricTransform.inverse

傳回給定輸出座標的輸入座標。座標的形狀為 (P, 2),其中 P 是座標的數量,每個元素都是一個 (row, col) 對。

shapetuple

輸出影像的形狀 (rows, cols[, bands])

dtypenp.dtype 或字串

傳回值的 dtype(合理的選擇:float32 或 float64)。

傳回值:
coords(ndim, rows, cols[, bands]),dtype 為 dtype 的陣列

scipy.ndimage.map_coordinates 的座標,它將根據 coord_transform_fn 從來源點繪製,產生一個形狀為 (orows, ocols, bands) 的影像。

注意

這是一個較低層級的常式,它產生 warp() 使用的 2 維影像的來源座標。

它與 warp 分開提供,以便為想要重複使用特定座標映射、在影像扭曲過程中的各個點使用特定 dtype 或實作與 warp 在呼叫 ndi.map_coordinates 後執行的不同的後處理邏輯的用戶提供額外的彈性。

範例

產生一個將影像向上和向右移動的座標映射

>>> from skimage import data
>>> from scipy.ndimage import map_coordinates
>>>
>>> def shift_up10_left20(xy):
...     return xy - np.array([-20, 10])[None, :]
>>>
>>> image = data.astronaut().astype(np.float32)
>>> coords = warp_coords(shift_up10_left20, image.shape)
>>> warped_image = map_coordinates(image, coords)

skimage.transform.warp_polar(image, center=None, *, radius=None, output_shape=None, scaling='linear', channel_axis=None, **kwargs)[source]#

將影像重新對應到極座標或對數極座標空間。

參數:
image(M, N[, C]) ndarray

輸入影像。對於多通道影像,必須指定 channel_axis

center2 元組,選用

(row, col) 座標,代表 image 中變換的中心點(即笛卡爾空間中的原點)。值可以是 float 類型。如果未給定值,則假設中心為 image 的中心點。

radius浮點數,可選

界定要轉換區域的圓的半徑。

output_shapetuple (row, col),選用
scaling{‘linear’, ‘log’},選用

指定影像扭曲是極座標還是對數極座標。預設為 'linear'。

channel_axis整數或 None,可選

如果為 None,則假設影像為灰階(單通道)影像。否則,此參數表示陣列的哪個軸對應於通道。

在版本 0.19 中新增:channel_axis 是在 0.19 中新增的。

**kwargs關鍵字引數

傳遞給 transform.warp

傳回值:
warpedndarray

極座標或對數極座標扭曲的影像。

範例

對灰階影像執行基本的極座標扭曲

>>> from skimage import data
>>> from skimage.transform import warp_polar
>>> image = data.checkerboard()
>>> warped = warp_polar(image)

對灰階影像執行對數極座標扭曲

>>> warped = warp_polar(image, scaling='log')

對灰階影像執行對數極座標扭曲,同時指定中心、半徑和輸出形狀

>>> warped = warp_polar(image, (100,100), radius=100,
...                     output_shape=image.shape, scaling='log')

對彩色影像執行對數極座標扭曲

>>> image = data.astronaut()
>>> warped = warp_polar(image, scaling='log', channel_axis=-1)

使用極座標和對數極座標轉換進行配準

使用極座標和對數極座標轉換進行配準
class skimage.transform.AffineTransform(matrix=None, scale=None, rotation=None, shear=None, translation=None, *, dimensionality=2)[source]#

基底:ProjectiveTransform

仿射轉換。

具有以下形式

X = a0 * x + a1 * y + a2
  =   sx * x * [cos(rotation) + tan(shear_y) * sin(rotation)]
    - sy * y * [tan(shear_x) * cos(rotation) + sin(rotation)]
    + translation_x

Y = b0 * x + b1 * y + b2
  =   sx * x * [sin(rotation) - tan(shear_y) * cos(rotation)]
    - sy * y * [tan(shear_x) * sin(rotation) - cos(rotation)]
    + translation_y

其中 sxsy 分別是 x 和 y 方向的縮放因子。

這等同於按照以下順序應用操作

  1. 縮放

  2. 錯切

  3. 旋轉

  4. 平移

齊次轉換矩陣為

[[a0  a1  a2]
 [b0  b1  b2]
 [0   0    1]]

在 2D 中,轉換參數可以以齊次轉換矩陣(如上所示)或以隱含參數表示,例如 x (a2) 和 y (b2) 方向的縮放、旋轉、錯切和平移。對於 3D 和更高維度,只允許使用矩陣形式。

在較窄的轉換中,例如歐幾里得轉換(僅旋轉和平移)或相似轉換(旋轉、平移和全域縮放因子),也可以使用隱含參數指定 3D 轉換。

參數:
matrix(D+1, D+1) array_like, 選用

齊次轉換矩陣。如果提供了此矩陣,則提供任何縮放、旋轉、錯切或平移參數都會導致錯誤。

scale{s 為 float 或 (sx, sy) 為 array, list 或 tuple}, 選用

縮放因子。如果為單一值,則會同時指定給 sx 和 sy。僅適用於 2D。

0.17 版本新增: 新增了對提供單一純量值的支援。

rotation浮點數,可選

旋轉角度,順時針方向,以弧度表示。僅適用於 2D。

shearfloat 或 2-tuple of float, 選用

x 和 y 軸的錯切角度,順時針方向,這些軸圍繞原點旋轉 [2]。如果給定單一值,則將其視為 x 錯切角度,而 y 角度保持為 0。僅適用於 2D。

translation(tx, ty) 為 array, list 或 tuple, 選用

平移參數。僅適用於 2D。

dimensionalityint, 選用

轉換的維度。如果提供了任何其他參數,則不使用此參數。

屬性:
params(D+1, D+1) array

齊次轉換矩陣。

引發:
ValueError

如果同時提供了 matrix 和任何其他參數。

參考文獻

[2]

維基百科,「錯切映射」,https://en.wikipedia.org/wiki/Shear_mapping

範例

>>> import numpy as np
>>> import skimage as ski
>>> img = ski.data.astronaut()

定義來源和目標點

>>> src = np.array([[150, 150],
...                 [250, 100],
...                 [150, 200]])
>>> dst = np.array([[200, 200],
...                 [300, 150],
...                 [150, 400]])

估計轉換矩陣

>>> tform = ski.transform.AffineTransform()
>>> tform.estimate(src, dst)
True

應用轉換

>>> warped = ski.transform.warp(img, inverse_map=tform.inverse)
__init__(matrix=None, scale=None, rotation=None, shear=None, translation=None, *, dimensionality=2)[原始碼]#

單應性類型

單應性類型

使用 RANSAC 進行強健匹配

使用 RANSAC 進行強健匹配

角點偵測

角點偵測

CENSURE 特徵偵測器

CENSURE 特徵偵測器

ORB 特徵檢測器和二元描述子

ORB 特徵檢測器和二元描述子

BRIEF 二元描述子

BRIEF 二元描述子

SIFT 特徵檢測器和描述子提取器

SIFT 特徵檢測器和描述子提取器
property dimensionality#

轉換的維度。

estimate(src, dst, weights=None)[原始碼]#

從一組對應點估計轉換。

您可以使用總最小平方方法確定過度確定、良好確定和欠定參數。

來源和目的地座標的數量必須相符。

轉換定義為

X = (a0*x + a1*y + a2) / (c0*x + c1*y + 1)
Y = (b0*x + b1*y + b2) / (c0*x + c1*y + 1)

這些方程式可以轉換為以下形式

0 = a0*x + a1*y + a2 - c0*x*X - c1*y*X - X
0 = b0*x + b1*y + b2 - c0*x*Y - c1*y*Y - Y

這存在於每組對應點,因此我們有一組 N * 2 個方程式。係數線性出現,因此我們可以寫成 A x = 0,其中

A   = [[x y 1 0 0 0 -x*X -y*X -X]
       [0 0 0 x y 1 -x*Y -y*Y -Y]
        ...
        ...
      ]
x.T = [a0 a1 a2 b0 b1 b2 c0 c1 c3]

在總最小平方法的情況下,此齊次方程式系統的解是 A 的右奇異向量,該向量對應於由係數 c3 歸一化的最小奇異值。

權重可以應用於每對對應點,以指示(尤其是在超定系統中)點對是否具有較高或較低的信賴度或相關聯的不確定性。從最小平方法問題的矩陣處理來看,這些權重值會被歸一化、平方根化,然後建立到對角矩陣中,A 會乘以該對角矩陣。

在仿射轉換的情況下,係數 c0 和 c1 為 0。因此,方程式系統為

A   = [[x y 1 0 0 0 -X]
       [0 0 0 x y 1 -Y]
        ...
        ...
      ]
x.T = [a0 a1 a2 b0 b1 b2 c3]
參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

weights(N,) array_like, 選用

每對點的相對權重值。

傳回值:
successbool

如果模型估計成功,則為 True。

property inverse#

傳回表示反向的轉換物件。

residuals(src, dst)[原始碼]#

確定轉換目標座標的殘差。

對於每個轉換後的來源座標,確定到各自目標座標的歐幾里得距離。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

座標的殘差。

property rotation#
property scale#
property shear#
property translation#
class skimage.transform.EssentialMatrixTransform(rotation=None, translation=None, matrix=None, *, dimensionality=2)[原始碼]#

基礎:FundamentalMatrixTransform

基本矩陣轉換。

基本矩陣關聯一對校準影像之間對應的點。矩陣將一個影像中的標準化齊次影像點轉換為另一個影像中的極線。

基本矩陣僅定義用於捕獲非平面場景的一對移動影像。在純旋轉或平面場景的情況下,單應性描述了兩個影像之間的幾何關係(ProjectiveTransform)。如果影像的內部校準未知,則基本矩陣描述兩個影像之間的投影關係(FundamentalMatrixTransform)。

參數:
rotation(3, 3) array_like, 選用

相對相機運動的旋轉矩陣。

translation(3, 1) array_like, 選用

相對相機運動的平移向量。向量的長度必須為單位長度。

matrix(3, 3) array_like, 選用

基本矩陣。

屬性:
params(3, 3) array

基本矩陣。

參考文獻

[1]

Hartley, Richard, 和 Andrew Zisserman。《電腦視覺中的多視圖幾何》。劍橋大學出版社,2003 年。

範例

>>> import numpy as np
>>> import skimage as ski
>>>
>>> tform_matrix = ski.transform.EssentialMatrixTransform(
...     rotation=np.eye(3), translation=np.array([0, 0, 1])
... )
>>> tform_matrix.params
array([[ 0., -1.,  0.],
       [ 1.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> src = np.array([[ 1.839035, 1.924743],
...                 [ 0.543582, 0.375221],
...                 [ 0.47324 , 0.142522],
...                 [ 0.96491 , 0.598376],
...                 [ 0.102388, 0.140092],
...                 [15.994343, 9.622164],
...                 [ 0.285901, 0.430055],
...                 [ 0.09115 , 0.254594]])
>>> dst = np.array([[1.002114, 1.129644],
...                 [1.521742, 1.846002],
...                 [1.084332, 0.275134],
...                 [0.293328, 0.588992],
...                 [0.839509, 0.08729 ],
...                 [1.779735, 1.116857],
...                 [0.878616, 0.602447],
...                 [0.642616, 1.028681]])
>>> tform_matrix.estimate(src, dst)
True
>>> tform_matrix.residuals(src, dst)
array([0.42455187, 0.01460448, 0.13847034, 0.12140951, 0.27759346,
       0.32453118, 0.00210776, 0.26512283])
__init__(rotation=None, translation=None, matrix=None, *, dimensionality=2)[原始碼]#
estimate(src, dst)[原始碼]#

使用八點演算法估計本質矩陣。

八點演算法需要至少 8 組對應的點對才能獲得良好條件的解,否則將估計過度決定的解。

參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

傳回值:
successbool

如果模型估計成功,則為 True。

屬性 inverse#

傳回表示反向的轉換物件。

請參閱 Hartley & Zisserman 的第 8 章:對極幾何與基礎矩陣,以瞭解為什麼 F.T 給出反矩陣。

residuals(src, dst)[原始碼]#

計算 Sampson 距離。

Sampson 距離是幾何誤差的第一個近似值。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

Sampson 距離。

類別 skimage.transform.EuclideanTransform(matrix=None, rotation=None, translation=None, *, dimensionality=2)[原始碼]#

基底:ProjectiveTransform

歐幾里得轉換,也稱為剛性轉換。

具有以下形式

X = a0 * x - b0 * y + a1 =
  = x * cos(rotation) - y * sin(rotation) + a1

Y = b0 * x + a0 * y + b1 =
  = x * sin(rotation) + y * cos(rotation) + b1

其中齊次轉換矩陣為

[[a0 -b0  a1]
 [b0  a0  b1]
 [0   0   1 ]]

歐幾里得轉換是一種具有旋轉和平移參數的剛體轉換。相似轉換使用單一縮放因子擴展了歐幾里得轉換。

在 2D 和 3D 中,轉換參數可以透過上面的 matrix(齊次轉換矩陣)提供,也可以透過隱含參數 rotation 和/或 translation 提供(其中 a1 是沿著 x 的平移,b1 是沿著 y 的平移,依此類推)。在 3D 以上,如果轉換僅為平移,則可以使用隱含參數 translation;否則,必須使用 matrix

參數:
matrix(D+1, D+1) array_like, 選用

齊次轉換矩陣。

rotation浮點數或浮點數序列,可選

旋轉角度,順時針,以弧度表示。如果給定為向量,則將其解釋為歐拉旋轉角度 [1]。僅支援 2D(單一旋轉)和 3D(歐拉旋轉)值。對於更高的維度,您必須提供或估計轉換矩陣。

translation(x, y[, z, …]) 浮點數序列,長度為 D,可選

每個軸的平移參數。

dimensionalityint, 選用

轉換的維度。

屬性:
params(D+1, D+1) array

齊次轉換矩陣。

參考文獻

__init__(matrix=None, rotation=None, translation=None, *, dimensionality=2)[原始碼]#

使用幾何變換

使用幾何變換

單應性類型

單應性類型

使用簡單的影像拼接組裝影像

使用簡單的影像拼接組裝影像
屬性 dimensionality#

轉換的維度。

estimate(src, dst)[原始碼]#

從一組對應點估計轉換。

您可以使用總最小平方方法確定過度確定、良好確定和欠定參數。

來源和目的地座標的數量必須相符。

參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

傳回值:
successbool

如果模型估計成功,則為 True。

屬性 inverse#

傳回表示反向的轉換物件。

residuals(src, dst)[原始碼]#

確定轉換目標座標的殘差。

對於每個轉換後的來源座標,確定到各自目標座標的歐幾里得距離。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

座標的殘差。

屬性 rotation#
屬性 translation#
類別 skimage.transform.FundamentalMatrixTransform(matrix=None, *, dimensionality=2)[原始碼]#

基底:_GeometricTransform

基本矩陣轉換。

基礎矩陣關聯一對未校準影像之間的對應點。該矩陣將一個影像中的齊次影像點轉換為另一個影像中的對極線。

基礎矩陣僅針對一對移動影像定義。在純旋轉或平面場景的情況下,單應性描述兩個影像之間的幾何關係(ProjectiveTransform)。如果已知影像的固有校準,則本質矩陣描述兩個影像之間的度量關係(EssentialMatrixTransform)。

參數:
matrix(3, 3) array_like, 選用

基礎矩陣。

屬性:
params(3, 3) array

基礎矩陣。

參考文獻

[1]

Hartley, Richard, 和 Andrew Zisserman。《電腦視覺中的多視圖幾何》。劍橋大學出版社,2003 年。

範例

>>> import numpy as np
>>> import skimage as ski
>>> tform_matrix = ski.transform.FundamentalMatrixTransform()

定義來源和目標點

>>> src = np.array([1.839035, 1.924743,
...                 0.543582, 0.375221,
...                 0.473240, 0.142522,
...                 0.964910, 0.598376,
...                 0.102388, 0.140092,
...                15.994343, 9.622164,
...                 0.285901, 0.430055,
...                 0.091150, 0.254594]).reshape(-1, 2)
>>> dst = np.array([1.002114, 1.129644,
...                 1.521742, 1.846002,
...                 1.084332, 0.275134,
...                 0.293328, 0.588992,
...                 0.839509, 0.087290,
...                 1.779735, 1.116857,
...                 0.878616, 0.602447,
...                 0.642616, 1.028681]).reshape(-1, 2)

估計轉換矩陣

>>> tform_matrix.estimate(src, dst)
True
>>> tform_matrix.params
array([[-0.21785884,  0.41928191, -0.03430748],
       [-0.07179414,  0.04516432,  0.02160726],
       [ 0.24806211, -0.42947814,  0.02210191]])

計算 Sampson 距離

>>> tform_matrix.residuals(src, dst)
array([0.0053886 , 0.00526101, 0.08689701, 0.01850534, 0.09418259,
       0.00185967, 0.06160489, 0.02655136])

應用反向轉換

>>> tform_matrix.inverse(dst)
array([[-0.0513591 ,  0.04170974,  0.01213043],
       [-0.21599496,  0.29193419,  0.00978184],
       [-0.0079222 ,  0.03758889, -0.00915389],
       [ 0.14187184, -0.27988959,  0.02476507],
       [ 0.05890075, -0.07354481, -0.00481342],
       [-0.21985267,  0.36717464, -0.01482408],
       [ 0.01339569, -0.03388123,  0.00497605],
       [ 0.03420927, -0.1135812 ,  0.02228236]])
__init__(matrix=None, *, dimensionality=2)[原始碼]#

基礎矩陣估計

基礎矩陣估計
estimate(src, dst)[原始碼]#

使用八點演算法估計基礎矩陣。

八點演算法需要至少 8 組對應的點對才能獲得良好條件的解,否則將估計過度決定的解。

參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

傳回值:
successbool

如果模型估計成功,則為 True。

屬性 inverse#

傳回表示反向的轉換物件。

請參閱 Hartley & Zisserman 的第 8 章:對極幾何與基礎矩陣,以瞭解為什麼 F.T 給出反矩陣。

residuals(src, dst)[原始碼]#

計算 Sampson 距離。

Sampson 距離是幾何誤差的第一個近似值。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

Sampson 距離。

類別 skimage.transform.PiecewiseAffineTransform[原始碼]#

基底:_GeometricTransform

分段仿射轉換。

控制點用於定義映射。轉換基於點的 Delaunay 三角剖分形成網格。每個三角形用於尋找局部仿射轉換。

屬性:
affines仿射轉換物件列表

網格中每個三角形的仿射轉換。

inverse_affines仿射轉換物件列表

網格中每個三角形的反向仿射轉換。

__init__()[原始碼]#

分段仿射變換

分段仿射變換
estimate(src, dst)[原始碼]#

從一組對應點估計轉換。

來源和目的地座標的數量必須相符。

參數:
src(N, D) 類陣列

來源座標。

dst(N, D) 類陣列

目標座標。

傳回值:
successbool

如果成功估計模型的所有部分,則為 True。

屬性 inverse#

傳回表示反向的轉換物件。

residuals(src, dst)[原始碼]#

確定轉換目標座標的殘差。

對於每個轉換後的來源座標,確定到各自目標座標的歐幾里得距離。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

座標的殘差。

class skimage.transform.PolynomialTransform(params=None, *, dimensionality=2)[原始碼]#

基底:_GeometricTransform

2D 多項式轉換。

具有以下形式

X = sum[j=0:order]( sum[i=0:j]( a_ji * x**(j - i) * y**i ))
Y = sum[j=0:order]( sum[i=0:j]( b_ji * x**(j - i) * y**i ))
參數:
params(2, N) array_like,可選

多項式係數,其中 N * 2 = (order + 1) * (order + 2)。因此,a_ji 定義在 params[0, :] 中,而 b_ji 定義在 params[1, :] 中。

屬性:
params(2, N) 陣列

多項式係數,其中 N * 2 = (order + 1) * (order + 2)。因此,a_ji 定義在 params[0, :] 中,而 b_ji 定義在 params[1, :] 中。

__init__(params=None, *, dimensionality=2)[原始碼]#
estimate(src, dst, order=2, weights=None)[原始碼]#

從一組對應點估計轉換。

您可以使用總最小平方方法確定過度確定、良好確定和欠定參數。

來源和目的地座標的數量必須相符。

轉換定義為

X = sum[j=0:order]( sum[i=0:j]( a_ji * x**(j - i) * y**i ))
Y = sum[j=0:order]( sum[i=0:j]( b_ji * x**(j - i) * y**i ))

這些方程式可以轉換為以下形式

0 = sum[j=0:order]( sum[i=0:j]( a_ji * x**(j - i) * y**i )) - X
0 = sum[j=0:order]( sum[i=0:j]( b_ji * x**(j - i) * y**i )) - Y

這存在於每組對應點,因此我們有一組 N * 2 個方程式。係數線性出現,因此我們可以寫成 A x = 0,其中

A   = [[1 x y x**2 x*y y**2 ... 0 ...             0 -X]
       [0 ...                 0 1 x y x**2 x*y y**2 -Y]
        ...
        ...
      ]
x.T = [a00 a10 a11 a20 a21 a22 ... ann
       b00 b10 b11 b20 b21 b22 ... bnn c3]

在總最小平方法的情況下,此齊次方程式系統的解是 A 的右奇異向量,該向量對應於由係數 c3 歸一化的最小奇異值。

權重可以應用於每對對應點,以指示(尤其是在超定系統中)點對是否具有較高或較低的信賴度或相關聯的不確定性。從最小平方法問題的矩陣處理來看,這些權重值會被歸一化、平方根化,然後建立到對角矩陣中,A 會乘以該對角矩陣。

參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

order整數,可選

多項式階數(係數數量為階數 + 1)。

weights(N,) array_like, 選用

每對點的相對權重值。

傳回值:
successbool

如果模型估計成功,則為 True。

property inverse#

傳回表示反向的轉換物件。

residuals(src, dst)[原始碼]#

確定轉換目標座標的殘差。

對於每個轉換後的來源座標,確定到各自目標座標的歐幾里得距離。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

座標的殘差。

class skimage.transform.ProjectiveTransform(matrix=None, *, dimensionality=2)[原始碼]#

基底:_GeometricTransform

射影轉換。

對座標應用投影轉換(單應性)。

對於每個齊次座標 \(\mathbf{x} = [x, y, 1]^T\),其目標位置是透過與給定矩陣 \(H\) 相乘來計算,得到 \(H \mathbf{x}\)

[[a0 a1 a2]
 [b0 b1 b2]
 [c0 c1 1 ]].

例如,要順時針旋轉 theta 度,矩陣應為

[[cos(theta) -sin(theta) 0]
 [sin(theta)  cos(theta) 0]
 [0            0         1]]

或,要將 x 平移 10,y 平移 20

[[1 0 10]
 [0 1 20]
 [0 0 1 ]].
參數:
matrix(D+1, D+1) array_like, 選用

齊次轉換矩陣。

dimensionalityint, 選用

轉換的維度數量。如果 matrix 不是 None,則會忽略此參數。

屬性:
params(D+1, D+1) array

齊次轉換矩陣。

__init__(matrix=None, *, dimensionality=2)[原始碼]#

使用幾何變換

使用幾何變換

單應性類型

單應性類型

使用 RANSAC 進行強健匹配

使用 RANSAC 進行強健匹配

使用簡單的影像拼接組裝影像

使用簡單的影像拼接組裝影像

角點偵測

角點偵測

CENSURE 特徵偵測器

CENSURE 特徵偵測器

ORB 特徵檢測器和二元描述子

ORB 特徵檢測器和二元描述子

BRIEF 二元描述子

BRIEF 二元描述子

SIFT 特徵檢測器和描述子提取器

SIFT 特徵檢測器和描述子提取器
property dimensionality#

轉換的維度。

estimate(src, dst, weights=None)[原始碼]#

從一組對應點估計轉換。

您可以使用總最小平方方法確定過度確定、良好確定和欠定參數。

來源和目的地座標的數量必須相符。

轉換定義為

X = (a0*x + a1*y + a2) / (c0*x + c1*y + 1)
Y = (b0*x + b1*y + b2) / (c0*x + c1*y + 1)

這些方程式可以轉換為以下形式

0 = a0*x + a1*y + a2 - c0*x*X - c1*y*X - X
0 = b0*x + b1*y + b2 - c0*x*Y - c1*y*Y - Y

這存在於每組對應點,因此我們有一組 N * 2 個方程式。係數線性出現,因此我們可以寫成 A x = 0,其中

A   = [[x y 1 0 0 0 -x*X -y*X -X]
       [0 0 0 x y 1 -x*Y -y*Y -Y]
        ...
        ...
      ]
x.T = [a0 a1 a2 b0 b1 b2 c0 c1 c3]

在總最小平方法的情況下,此齊次方程式系統的解是 A 的右奇異向量,該向量對應於由係數 c3 歸一化的最小奇異值。

權重可以應用於每對對應點,以指示(尤其是在超定系統中)點對是否具有較高或較低的信賴度或相關聯的不確定性。從最小平方法問題的矩陣處理來看,這些權重值會被歸一化、平方根化,然後建立到對角矩陣中,A 會乘以該對角矩陣。

在仿射轉換的情況下,係數 c0 和 c1 為 0。因此,方程式系統為

A   = [[x y 1 0 0 0 -X]
       [0 0 0 x y 1 -Y]
        ...
        ...
      ]
x.T = [a0 a1 a2 b0 b1 b2 c3]
參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

weights(N,) array_like, 選用

每對點的相對權重值。

傳回值:
successbool

如果模型估計成功,則為 True。

property inverse#

傳回表示反向的轉換物件。

residuals(src, dst)[原始碼]#

確定轉換目標座標的殘差。

對於每個轉換後的來源座標,確定到各自目標座標的歐幾里得距離。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

座標的殘差。

class skimage.transform.SimilarityTransform(matrix=None, scale=None, rotation=None, translation=None, *, dimensionality=2)[原始碼]#

基底:EuclideanTransform

相似轉換。

在 2D 中具有以下形式

X = a0 * x - b0 * y + a1 =
  = s * x * cos(rotation) - s * y * sin(rotation) + a1

Y = b0 * x + a0 * y + b1 =
  = s * x * sin(rotation) + s * y * cos(rotation) + b1

其中 s 是縮放因子,而齊次轉換矩陣為

[[a0 -b0  a1]
 [b0  a0  b1]
 [0   0   1 ]]

相似轉換透過單一縮放因子擴展歐幾里得轉換,此外還有旋轉和平移參數。

參數:
matrix(dim+1, dim+1) array_like,可選

齊次轉換矩陣。

scalefloat,可選

縮放因子。僅在 2D 和 3D 中實作。

rotation浮點數,可選

旋轉角度,順時針,以弧度表示。僅在 2D 和 3D 中實作。對於 3D,以 ZYX 歐拉角表示。

translation(dim,) array_like,可選

x、y[, z] 平移參數。僅在 2D 和 3D 中實作。

屬性:
params(dim+1, dim+1) 陣列

齊次轉換矩陣。

__init__(matrix=None, scale=None, rotation=None, translation=None, *, dimensionality=2)[原始碼]#

使用幾何變換

使用幾何變換

單應性類型

單應性類型
property dimensionality#

轉換的維度。

estimate(src, dst)[原始碼]#

從一組對應點估計轉換。

您可以使用總最小平方方法確定過度確定、良好確定和欠定參數。

來源和目的地座標的數量必須相符。

參數:
src(N, 2) array_like

來源座標。

dst(N, 2) array_like

目標座標。

傳回值:
successbool

如果模型估計成功,則為 True。

property inverse#

傳回表示反向的轉換物件。

residuals(src, dst)[原始碼]#

確定轉換目標座標的殘差。

對於每個轉換後的來源座標,確定到各自目標座標的歐幾里得距離。

參數:
src(N, 2) array

來源座標。

dst(N, 2) array

目標座標。

傳回值:
residuals(N,) array

座標的殘差。

property rotation#
property scale#
property translation#
class skimage.transform.ThinPlateSplineTransform[原始碼]#

基底類別:object

薄板樣條轉換。

給定兩組匹配的點集合:來源點與目標點,此類別會估計薄板樣條 (Thin-Plate Spline, TPS) 轉換,將來源點集合中的每個點轉換為其對應的目標點。

屬性:
src(N, 2) array_like

來源影像中控制點的座標。

參考文獻

[1]

Bookstein, Fred L. “Principal warps: Thin-plate splines and the decomposition of deformations,” IEEE Transactions on pattern analysis and machine intelligence 11.6 (1989): 567–585. DOI:10.1109/34.24792 https://user.engineering.uiowa.edu/~aip/papers/bookstein-89.pdf

範例

>>> import skimage as ski

定義來源和目標控制點,使其模擬旋轉 90 度,並從它們生成網格

>>> src = np.array([[0, 0], [0, 5], [5, 5], [5, 0]])
>>> dst = np.array([[5, 0], [0, 0], [0, 5], [5, 5]])

估計轉換

>>> tps = ski.transform.ThinPlateSplineTransform()
>>> tps.estimate(src, dst)
True

將轉換應用於 src 近似於 dst

>>> np.round(tps(src))
array([[5., 0.],
       [0., 0.],
       [0., 5.],
       [5., 5.]])

建立一個網格以應用轉換

>>> grid = np.meshgrid(np.arange(5), np.arange(5))
>>> grid[1]
array([[0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4]])
>>> coords = np.vstack([grid[0].ravel(), grid[1].ravel()]).T
>>> transformed = tps(coords)
>>> np.round(transformed[:, 1]).reshape(5, 5).astype(int)
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])
__init__()[原始碼]#

使用薄板樣條進行影像扭曲

使用薄板樣條進行影像扭曲
estimate(src, dst)[原始碼]#

估計來源點和目標點之間的最佳樣條映射。

參數:
src(N, 2) array_like

來源座標的控制點。

dst(N, 2) array_like

目標座標的控制點。

傳回值:
success: bool

True 表示估計成功。

注意

來源點和目標點的數量 N 必須匹配。

property inverse#