skimage.transform
#
幾何和其他轉換,例如旋轉、拉東轉換。
幾何轉換:這些轉換會改變影像的形狀或位置。它們對於諸如影像配準、對齊和幾何校正等任務很有用。範例:
AffineTransform
、ProjectiveTransform
、EuclideanTransform
。影像大小調整和縮放:這些轉換會改變影像的大小或解析度。它們對於諸如下採樣影像以縮小其大小或上採樣影像以增加其解析度等任務很有用。範例:
resize()
、rescale()
。特徵偵測和提取:這些轉換會識別和提取影像中的特定特徵或模式。它們對於諸如物件偵測、影像分割和特徵匹配等任務很有用。範例:
hough_circle()
、pyramid_expand()
、radon()
。影像轉換:這些轉換會在不改變其內容的情況下改變影像的外觀。它們對於諸如建立影像鑲嵌、應用藝術效果和視覺化影像資料等任務很有用。範例:
warp()
、iradon()
。
通過局部平均值對 N 維影像進行降採樣。 |
|
估計 2D 幾何轉換參數。 |
|
計算輸入陣列的二維有限拉東轉換 (FRT)。 |
|
執行圓形霍夫轉換。 |
|
傳回圓形霍夫轉換中的峰值。 |
|
執行橢圓霍夫轉換。 |
|
執行直線霍夫轉換。 |
|
傳回直線霍夫轉換中的峰值。 |
|
計算輸入陣列的二維反有限拉東轉換 (iFRT)。 |
|
積分影像/總和區域表。 |
|
使用積分影像在給定視窗上進行積分。 |
|
反拉東轉換。 |
|
反拉東轉換。 |
|
應用 2D 矩陣轉換。 |
|
排序角度以減少後續投影中相關資訊的數量。 |
|
從漸進式機率直線霍夫轉換中傳回線條。 |
|
上採樣然後平滑影像。 |
|
產生由輸入影像形成的 Gaussian 金字塔的影像。 |
|
產生由輸入影像形成的 Laplacian 金字塔的影像。 |
|
平滑然後降採樣影像。 |
|
計算給定指定投影角度的影像的拉東轉換。 |
|
將影像縮放特定因數。 |
|
調整影像大小以符合特定大小。 |
|
使用局部平均值/雙線性縮放調整陣列大小。 |
|
繞其中心將影像旋轉特定角度。 |
|
執行漩渦轉換。 |
|
根據給定的座標轉換扭曲影像。 |
|
為 2-D 影像扭曲的輸出建立來源座標。 |
|
將影像重新對應到極座標或對數極座標空間。 |
|
仿射轉換。 |
|
基本矩陣轉換。 |
|
歐幾里得轉換,也稱為剛性轉換。 |
|
基本矩陣轉換。 |
|
分段仿射轉換。 |
|
2D 多項式轉換。 |
|
射影轉換。 |
|
相似轉換。 |
|
薄板樣條轉換。 |
- skimage.transform.downscale_local_mean(image, factors, cval=0, clip=True)[原始碼]#
通過局部平均值對 N 維影像進行降採樣。
如果影像不能被整數因數完全整除,則會使用
cval
填充影像。與
skimage.transform.resize
和skimage.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
轉換物件,包含轉換參數並提供對正向和反向轉換函式的存取權限。
- tform
範例
>>> 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.
- 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=True
的radon
的行為相符。- 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
輸入的調整大小版本。
注意
此方法有時被稱為「基於面積」的插值或「像素混合」插值 [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)
- 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)
的陣列,其中rows
和cols
決定輸出影像的形狀,而第一個維度包含輸入影像中的(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
扭曲後的輸入影像。
注意
輸入影像會被轉換為
double
影像。在使用
SimilarityTransform
、AffineTransform
和ProjectiveTransform
以及order
在 [0, 3] 範圍內時,此函數會使用底層的轉換矩陣,以更快的常式扭曲影像。
範例
>>> 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)
- 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) 的影像。
- coords(ndim, rows, cols[, bands]),dtype 為
注意
這是一個較低層級的常式,它產生
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]#
-
仿射轉換。
具有以下形式
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
其中
sx
和sy
分別是 x 和 y 方向的縮放因子。這等同於按照以下順序應用操作
縮放
錯切
旋轉
平移
齊次轉換矩陣為
[[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)[原始碼]#
- 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)[原始碼]#
-
基本矩陣轉換。
基本矩陣關聯一對校準影像之間對應的點。矩陣將一個影像中的標準化齊次影像點轉換為另一個影像中的極線。
基本矩陣僅定義用於捕獲非平面場景的一對移動影像。在純旋轉或平面場景的情況下,單應性描述了兩個影像之間的幾何關係(
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])
- estimate(src, dst)[原始碼]#
使用八點演算法估計本質矩陣。
八點演算法需要至少 8 組對應的點對才能獲得良好條件的解,否則將估計過度決定的解。
- 參數:
- src(N, 2) array_like
來源座標。
- dst(N, 2) array_like
目標座標。
- 傳回值:
- successbool
如果模型估計成功,則為 True。
- 屬性 inverse#
傳回表示反向的轉換物件。
請參閱 Hartley & Zisserman 的第 8 章:對極幾何與基礎矩陣,以瞭解為什麼 F.T 給出反矩陣。
- 類別 skimage.transform.EuclideanTransform(matrix=None, rotation=None, translation=None, *, dimensionality=2)[原始碼]#
-
歐幾里得轉換,也稱為剛性轉換。
具有以下形式
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
齊次轉換矩陣。
參考文獻
- 屬性 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]])
- estimate(src, dst)[原始碼]#
使用八點演算法估計基礎矩陣。
八點演算法需要至少 8 組對應的點對才能獲得良好條件的解,否則將估計過度決定的解。
- 參數:
- src(N, 2) array_like
來源座標。
- dst(N, 2) array_like
目標座標。
- 傳回值:
- successbool
如果模型估計成功,則為 True。
- 屬性 inverse#
傳回表示反向的轉換物件。
請參閱 Hartley & Zisserman 的第 8 章:對極幾何與基礎矩陣,以瞭解為什麼 F.T 給出反矩陣。
- 類別 skimage.transform.PiecewiseAffineTransform[原始碼]#
基底:
_GeometricTransform
分段仿射轉換。
控制點用於定義映射。轉換基於點的 Delaunay 三角剖分形成網格。每個三角形用於尋找局部仿射轉換。
- 屬性:
- affines仿射轉換物件列表
網格中每個三角形的仿射轉換。
- inverse_affines仿射轉換物件列表
網格中每個三角形的反向仿射轉換。
- estimate(src, dst)[原始碼]#
從一組對應點估計轉換。
來源和目的地座標的數量必須相符。
- 參數:
- src(N, D) 類陣列
來源座標。
- dst(N, D) 類陣列
目標座標。
- 傳回值:
- successbool
如果成功估計模型的所有部分,則為 True。
- 屬性 inverse#
傳回表示反向的轉換物件。
- 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, :]
中。
- 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#
傳回表示反向的轉換物件。
- 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
齊次轉換矩陣。
- 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#
傳回表示反向的轉換物件。
- class skimage.transform.SimilarityTransform(matrix=None, scale=None, rotation=None, translation=None, *, dimensionality=2)[原始碼]#
-
相似轉換。
在 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) 陣列
齊次轉換矩陣。
- 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]])
- estimate(src, dst)[原始碼]#
估計來源點和目標點之間的最佳樣條映射。
- 參數:
- src(N, 2) array_like
來源座標的控制點。
- dst(N, 2) array_like
目標座標的控制點。
- 傳回值:
- success: bool
True 表示估計成功。
注意
來源點和目標點的數量 N 必須匹配。
- property inverse#