skimage.draw
#
繪圖基本元素,例如線條、圓形、文字等。
產生貝茲曲線座標。 |
|
產生圓形周長座標。 |
|
產生反鋸齒圓形周長座標。 |
|
產生圓形內像素的座標。 |
|
產生橢圓形內像素的座標。 |
|
產生橢圓形周長座標。 |
|
為給定的半軸長度產生橢球體。 |
|
計算橢球體的解析體積和表面積。 |
|
產生線條像素座標。 |
|
產生反鋸齒線條像素座標。 |
|
在 n 維度中繪製單像素粗細的線條。 |
|
產生多邊形內像素的座標。 |
|
從多邊形建立二元遮罩。 |
|
產生多邊形周長座標。 |
|
產生帶有隨機形狀的影像,並以邊界框標記。 |
|
產生矩形內像素的座標。 |
|
產生正好在矩形周圍的像素座標。 |
|
在給定座標處設定影像中的像素顏色。 |
- skimage.draw.bezier_curve(r0, c0, r1, c1, r2, c2, weight, shape=None)[原始碼]#
產生貝茲曲線座標。
- 參數:
- r0, c0int
第一個控制點的座標。
- r1, c1int
中間控制點的座標。
- r2, c2int
最後一個控制點的座標。
- weightdouble
中間控制點權重,描述線條的張力。
- shapetuple, 可選
影像形狀,用於決定輸出像素座標的最大範圍。這對於超出影像大小的曲線非常有用。如果為 None,則使用曲線的完整範圍。
- 傳回:
- rr, cc(N,) int 的 ndarray
屬於貝茲曲線的像素索引。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
注意事項
此演算法是參考資料 [1] 中提出的有理二次演算法。
參考資料
[1]A Rasterizing Algorithm for Drawing Curves, A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf
範例
>>> import numpy as np >>> from skimage.draw import bezier_curve >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = bezier_curve(1, 5, 5, -2, 8, 8, 2) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.circle_perimeter(r, c, radius, method='bresenham', shape=None)[原始碼]#
產生圓形周長座標。
- 參數:
- r, cint
圓形的中心座標。
- radiusint
圓形的半徑。
- method{‘bresenham’, ‘andres’}, 可選
bresenham:Bresenham 方法 (預設) andres:Andres 方法
- shapetuple, 可選
影像形狀,用於決定輸出像素座標的最大範圍。這對於超出影像大小的圓形非常有用。如果為 None,則使用圓形的完整範圍。長度必須至少為 2。只有前兩個值用於決定輸入影像的範圍。
- 傳回:
- rr, cc(N,) int 的 ndarray
Bresenham 和 Andres 的方法:屬於圓形周長的像素索引。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
注意事項
Andres 方法的優點是同心圓會建立一個圓盤,而 Bresenham 可能會產生孔洞。當 Andres 圓形旋轉時,失真也較少。Bresenham 方法也稱為中點圓演算法。使用
circle_perimeter_aa
提供反鋸齒圓形產生器。參考資料
[1]J.E. Bresenham, “Algorithm for computer control of a digital plotter”, IBM Systems journal, 4 (1965) 25-30.
[2]E. Andres, “Discrete circles, rings and spheres”, Computers & Graphics, 18 (1994) 695-706.
範例
>>> from skimage.draw import circle_perimeter >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = circle_perimeter(4, 4, 3) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.circle_perimeter_aa(r, c, radius, shape=None)[原始碼]#
產生反鋸齒圓形周長座標。
- 參數:
- r, cint
圓形的中心座標。
- radiusint
圓形的半徑。
- shapetuple, 可選
影像形狀,用於決定輸出像素座標的最大範圍。這對於超出影像大小的圓形非常有用。如果為 None,則使用圓形的完整範圍。長度必須至少為 2。只有前兩個值用於決定輸入影像的範圍。
- 傳回:
- rr, cc, val(N,) ndarray (int, int, float)
像素的索引 (
rr
、cc
) 和強度值 (val
)。img[rr, cc] = val
。
注意事項
Wu 的方法繪製反鋸齒圓形。此實作未使用查詢表最佳化。
使用函式
draw.set_color
將circle_perimeter_aa
結果套用至彩色影像。參考資料
[1]X. Wu, “An efficient antialiasing technique”, In ACM SIGGRAPH Computer Graphics, 25 (1991) 143-152.
範例
>>> from skimage.draw import circle_perimeter_aa >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc, val = circle_perimeter_aa(4, 4, 3) >>> img[rr, cc] = val * 255 >>> img array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 60, 211, 255, 211, 60, 0, 0, 0], [ 0, 60, 194, 43, 0, 43, 194, 60, 0, 0], [ 0, 211, 43, 0, 0, 0, 43, 211, 0, 0], [ 0, 255, 0, 0, 0, 0, 0, 255, 0, 0], [ 0, 211, 43, 0, 0, 0, 43, 211, 0, 0], [ 0, 60, 194, 43, 0, 43, 194, 60, 0, 0], [ 0, 0, 60, 211, 255, 211, 60, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
>>> from skimage import data, draw >>> image = data.chelsea() >>> rr, cc, val = draw.circle_perimeter_aa(r=100, c=100, radius=75) >>> draw.set_color(image, (rr, cc), [1, 0, 0], alpha=val)
- skimage.draw.disk(center, radius, *, shape=None)[原始碼]#
產生圓形內像素的座標。
- 參數:
- centertuple
圓盤的中心座標。
- radiusdouble
圓盤的半徑。
- shapetuple, 可選
影像形狀為大小為 2 的元組。決定輸出像素座標的最大範圍。這對於超出影像大小的圓盤非常有用。如果為 None,則使用圓盤的完整範圍。形狀可能會導致負座標和環繞行為。
- 傳回:
- rr, ccint 的 ndarray
圓盤的像素座標。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
範例
>>> import numpy as np >>> from skimage.draw import disk >>> shape = (4, 4) >>> img = np.zeros(shape, dtype=np.uint8) >>> rr, cc = disk((0, 0), 2, shape=shape) >>> img[rr, cc] = 1 >>> img array([[1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], dtype=uint8) >>> img = np.zeros(shape, dtype=np.uint8) >>> # Negative coordinates in rr and cc perform a wraparound >>> rr, cc = disk((0, 0), 2, shape=None) >>> img[rr, cc] = 1 >>> img array([[1, 1, 0, 1], [1, 1, 0, 1], [0, 0, 0, 0], [1, 1, 0, 1]], dtype=uint8) >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = disk((4, 4), 5) >>> img[rr, cc] = 1 >>> img array([[0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.ellipse(r, c, r_radius, c_radius, shape=None, rotation=0.0)[原始碼]#
產生橢圓形內像素的座標。
- 參數:
- r, cdouble
橢圓形的中心座標。
- r_radius, c_radiusdouble
短軸和長軸。
(r/r_radius)**2 + (c/c_radius)**2 = 1
。- shapetuple, 可選
影像形狀,用於決定輸出像素座標的最大範圍。這對於超出影像大小的橢圓形非常有用。預設會使用橢圓形的完整範圍。長度必須至少為 2。只有前兩個值用於決定範圍。
- rotationfloat, 可選 (預設 0.)
設定橢圓形的旋轉 (rotation),範圍為 (-PI, PI),逆時針方向,因此 PI/2 度表示交換橢圓軸
- 傳回:
- rr, ccint 的 ndarray
橢圓形的像素座標。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
注意事項
橢圓形方程式
((x * cos(alpha) + y * sin(alpha)) / x_radius) ** 2 + ((x * sin(alpha) - y * cos(alpha)) / y_radius) ** 2 = 1
請注意,沒有指定
shape
的ellipse
位置也可能有負值,因為在平面上這是正確的。另一方面,之後將這些橢圓形位置用於影像可能會導致出現在影像的另一側,因為image[-1, -1] = image[end-1, end-1]
>>> rr, cc = ellipse(1, 2, 3, 6) >>> img = np.zeros((6, 12), dtype=np.uint8) >>> img[rr, cc] = 1 >>> img array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]], dtype=uint8)
範例
>>> from skimage.draw import ellipse >>> img = np.zeros((10, 12), dtype=np.uint8) >>> rr, cc = ellipse(5, 6, 3, 5, rotation=np.deg2rad(30)) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.ellipse_perimeter(r, c, r_radius, c_radius, orientation=0, shape=None)[原始碼]#
產生橢圓形周長座標。
- 參數:
- r, cint
橢圓形的中心座標。
- r_radius, c_radius整數
短軸和長軸。
(r/r_radius)**2 + (c/c_radius)**2 = 1
。- orientation雙精度浮點數,可選
主軸方向,以弧度為單位,順時針方向。
- shapetuple, 可選
用於確定輸出像素座標最大範圍的影像形狀。這對於超出影像大小的橢圓很有用。如果為 None,則使用橢圓的全部範圍。長度必須至少為 2。只有前兩個值用於確定輸入影像的範圍。
- 傳回:
- rr, cc(N,) int 的 ndarray
屬於橢圓周界的像素索引。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
參考資料
[1]A Rasterizing Algorithm for Drawing Curves, A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf
範例
>>> from skimage.draw import ellipse_perimeter >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = ellipse_perimeter(5, 5, 3, 4) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
請注意,沒有指定
shape
的ellipse
位置也可能有負值,因為在平面上這是正確的。另一方面,之後將這些橢圓形位置用於影像可能會導致出現在影像的另一側,因為image[-1, -1] = image[end-1, end-1]
>>> rr, cc = ellipse_perimeter(2, 3, 4, 5) >>> img = np.zeros((9, 12), dtype=np.uint8) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.ellipsoid(a, b, c, spacing=(1.0, 1.0, 1.0), levelset=False)[原始碼]#
為給定的半軸長度產生橢球體。
各半軸長度沿著笛卡爾座標系的三個維度給出。每個維度可以使用不同的網格間距。
- 參數:
- a浮點數
沿著 x 軸的半軸長度。
- b浮點數
沿著 y 軸的半軸長度。
- c浮點數
沿著 z 軸的半軸長度。
- spacing浮點數的三元組
三個空間維度中的網格間距。
- levelset布林值
如果為 True,則返回此橢球體的水平集(關於零的帶符號水平集,正數表示內部),類型為 np.float64。False 則返回該水平集的二元化版本。
- 傳回:
- ellipsoid(M, N, P) 陣列
以給定
spacing
正確調整大小的陣列中居中的橢球體。布林值 dtype,除非levelset=True
,在這種情況下,將返回一個浮點陣列,其中水平集大於 0.0 表示橢球體。
- skimage.draw.ellipsoid_stats(a, b, c)[原始碼]#
計算橢球體的解析體積和表面積。
橢球體的表面積由下式給出
\[S=4\pi b c R_G\!\left(1, \frac{a^2}{b^2}, \frac{a^2}{c^2}\right)\]其中 \(R_G\) 是卡爾森第二類完全對稱橢圓積分 [1]。後者實現為
scipy.special.elliprg()
。- 參數:
- a浮點數
沿著 x 軸的半軸長度。
- b浮點數
沿著 y 軸的半軸長度。
- c浮點數
沿著 z 軸的半軸長度。
- 傳回:
- vol浮點數
計算出的橢球體體積。
- surf浮點數
計算出的橢球體表面積。
參考資料
[1]Paul Masson (2020)。橢球體的表面積。https://analyticphysics.com/Mathematical%20Methods/Surface%20Area%20of%20an%20Ellipsoid.htm
- skimage.draw.line(r0, c0, r1, c1)[原始碼]#
產生線條像素座標。
- 參數:
- r0, c0int
起始位置(列,行)。
- r1, c1int
結束位置(列,行)。
- 傳回:
- rr, cc(N,) int 的 ndarray
屬於該線的像素索引。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
注意事項
抗鋸齒線生成器可使用
line_aa
。範例
>>> from skimage.draw import line >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = line(1, 1, 8, 8) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.line_aa(r0, c0, r1, c1)[原始碼]#
產生反鋸齒線條像素座標。
- 參數:
- r0, c0int
起始位置(列,行)。
- r1, c1int
結束位置(列,行)。
- 傳回:
- rr, cc, val(N,) ndarray (int, int, float)
像素的索引 (
rr
、cc
) 和強度值 (val
)。img[rr, cc] = val
。
參考資料
[1]A Rasterizing Algorithm for Drawing Curves, A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf
範例
>>> from skimage.draw import line_aa >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc, val = line_aa(1, 1, 8, 8) >>> img[rr, cc] = val * 255 >>> img array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 255, 74, 0, 0, 0, 0, 0, 0, 0], [ 0, 74, 255, 74, 0, 0, 0, 0, 0, 0], [ 0, 0, 74, 255, 74, 0, 0, 0, 0, 0], [ 0, 0, 0, 74, 255, 74, 0, 0, 0, 0], [ 0, 0, 0, 0, 74, 255, 74, 0, 0, 0], [ 0, 0, 0, 0, 0, 74, 255, 74, 0, 0], [ 0, 0, 0, 0, 0, 0, 74, 255, 74, 0], [ 0, 0, 0, 0, 0, 0, 0, 74, 255, 0], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
- skimage.draw.line_nd(start, stop, *, endpoint=False, integer=True)[原始碼]#
在 n 維度中繪製單像素粗細的線條。
產生的線將是 ndim 連接的。也就是說,線中的兩個後續像素將是 n 維中的直接或對角鄰居。
- 參數:
- start類陣列,形狀為 (N,)
線的起始座標。
- stop類陣列,形狀為 (N,)
線的結束座標。
- endpoint布林值,可選
是否將端點包含在返回的線中。預設值為 False,這樣可以輕鬆繪製多點路徑。
- integer布林值,可選
是否將座標四捨五入為整數。如果為 True(預設值),則返回的座標可用於直接索引到陣列中。
False
可用於例如向量繪製。
- 傳回:
- coords陣列元組
線上的點的座標。
範例
>>> lin = line_nd((1, 1), (5, 2.5), endpoint=False) >>> lin (array([1, 2, 3, 4]), array([1, 1, 2, 2])) >>> im = np.zeros((6, 5), dtype=int) >>> im[lin] = 1 >>> im array([[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]]) >>> line_nd([2, 1, 1], [5, 5, 2.5], endpoint=True) (array([2, 3, 4, 4, 5]), array([1, 2, 3, 4, 5]), array([1, 1, 2, 2, 2]))
- skimage.draw.polygon(r, c, shape=None)[原始碼]#
產生多邊形內像素的座標。
- 參數:
- r(N,) 類陣列
多邊形頂點的列座標。
- c(N,) 類陣列
多邊形頂點的行座標。
- shapetuple, 可選
用於確定輸出像素座標最大範圍的影像形狀。這對於超出影像大小的多邊形很有用。如果為 None,則使用多邊形的全部範圍。長度必須至少為 2。只有前兩個值用於確定輸入影像的範圍。
- 傳回:
- rr, ccint 的 ndarray
多邊形的像素座標。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
另請參閱
polygon2mask
從多邊形建立二元遮罩。
注意事項
此函數確保
rr
和cc
不包含負值。座標小於 0 的多邊形像素不會被繪製。範例
>>> import skimage as ski >>> r = np.array([1, 2, 8]) >>> c = np.array([1, 7, 4]) >>> rr, cc = ski.draw.polygon(r, c) >>> img = np.zeros((10, 10), dtype=int) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
如果定義了影像
shape
,並且polygon
的頂點/點位於此座標空間之外,則只會返回多邊形的部分像素(或根本沒有像素)。將多邊形的頂點平移一個偏移量可用於移動多邊形,並可能繪製多邊形的任意子區域。>>> offset = (2, -4) >>> rr, cc = ski.draw.polygon(r - offset[0], c - offset[1], shape=img.shape) >>> img = np.zeros((10, 10), dtype=int) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
- skimage.draw.polygon2mask(image_shape, polygon)[原始碼]#
從多邊形建立二元遮罩。
- 參數:
- image_shape大小為 2 的元組
遮罩的形狀。
- polygon(N, 2) 類陣列
形狀為 (N, 2) 的多邊形座標,其中 N 是點的數量。座標為 (列, 行)。
- 傳回:
- mask類型為 ‘bool’ 的 2 維 ndarray
對應於輸入多邊形的二元遮罩。
另請參閱
polygon
產生多邊形內像素的座標。
注意事項
此函式不執行任何邊界檢查。多邊形超出
image_shape
定義的座標空間的部分不會被繪製。範例
>>> import skimage as ski >>> image_shape = (10, 10) >>> polygon = np.array([[1, 1], [2, 7], [8, 4]]) >>> mask = ski.draw.polygon2mask(image_shape, polygon) >>> mask.astype(int) array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
如果
polygon
的頂點/點超出image_shape
定義的座標空間,則只有多邊形的一部分(或完全沒有)會被繪製在遮罩中。>>> offset = np.array([[2, -4]]) >>> ski.draw.polygon2mask(image_shape, polygon - offset).astype(int) array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
- skimage.draw.polygon_perimeter(r, c, shape=None, clip=False)[原始碼]#
產生多邊形周長座標。
- 參數:
- r(N,) ndarray
多邊形頂點的列座標。
- c(N,) ndarray
多邊形頂點的行座標。
- shapetuple, 可選
用於確定輸出像素座標最大範圍的圖像形狀。這對於超出圖像大小的多邊形很有用。如果為 None,則使用多邊形的完整範圍。必須至少為長度 2。只有前兩個值用於確定輸入圖像的範圍。
- clipbool,可選
是否將多邊形裁剪為提供的形狀。如果此值設定為 True,則繪製的圖形將始終是一個封閉的多邊形,且所有邊緣都可見。
- 傳回:
- rr, ccint 的 ndarray
多邊形的像素座標。可用於直接索引到陣列中,例如
img[rr, cc] = 1
。
範例
>>> from skimage.draw import polygon_perimeter >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = polygon_perimeter([5, -1, 5, 10], ... [-1, 5, 11, 5], ... shape=img.shape, clip=True) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 1, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 1, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0]], dtype=uint8)
- skimage.draw.random_shapes(image_shape, max_shapes, min_shapes=1, min_size=2, max_size=None, num_channels=3, shape=None, intensity_range=None, allow_overlap=False, num_trials=100, rng=None, *, channel_axis=-1)[原始碼]#
產生帶有隨機形狀的影像,並以邊界框標記。
圖像會填充隨機形狀,這些形狀具有隨機大小、隨機位置和隨機顏色,可以重疊或不重疊。
形狀具有隨機的 (列, 行) 起始座標,以及受
min_size
和max_size
限制的隨機大小。可能發生隨機產生的形狀根本不適合圖像的情況。在這種情況下,演算法將使用新的起始座標嘗試一定次數。但是,這也意味著某些形狀可能會被完全跳過。在這種情況下,此函式產生的形狀會少於要求。- 參數:
- image_shapetuple
要產生的圖像的列數和行數。
- max_shapesint
(嘗試)放入形狀的最大形狀數量。
- min_shapesint,可選
(嘗試)放入形狀的最小形狀數量。
- min_sizeint,可選
要放入圖像的每個形狀的最小尺寸。
- max_sizeint,可選
要放入圖像的每個形狀的最大尺寸。
- num_channelsint,可選
產生圖像中的通道數。如果為 1,則產生單色圖像,否則產生具有多個通道的彩色圖像。如果
multichannel
設定為 False,則忽略此值。- shape{rectangle, circle, triangle, ellipse, None} str,可選
要產生的形狀名稱或
None
以選取隨機形狀。- intensity_range{uint8 的 tuple 或 uint8 的 tuple 的 tuple},可選
從中取樣像素值的數值範圍。對於灰階圖像,格式為 (最小值, 最大值)。對於多通道,如果通道的範圍相等則為 ((最小值, 最大值),),如果不同則為 ((最小值_0, 最大值_0), … (最小值_N, 最大值_N))。由於函式僅支援產生 uint8 陣列,因此最大範圍為 (0, 255)。如果為 None,則每個通道設定為 (0, 254),保留強度 = 255 的顏色作為背景。
- allow_overlapbool,可選
如果為
True
,則允許形狀重疊。- num_trialsint,可選
在跳過形狀之前,嘗試將形狀放入圖像中的次數。
- rng{
numpy.random.Generator
, int},可選 虛擬隨機數產生器。預設情況下,會使用 PCG64 產生器 (請參閱
numpy.random.default_rng()
)。如果rng
為 int,則會用來為產生器設定種子。- channel_axisint 或 None,可選
如果為 None,則假設圖像為灰階(單通道)圖像。否則,此參數表示陣列的哪個軸對應於通道。
在 0.19 版本中新增:
channel_axis
已在 0.19 中新增。
- 傳回:
- imageuint8 陣列
具有擬合形狀的圖像。
- labelslist
標籤清單,圖像中每個形狀一個標籤。每個標籤都是一個 (類別, ((r0, r1), (c0, c1))) 元組,指定形狀的類別和邊界框座標。
範例
>>> import skimage.draw >>> image, labels = skimage.draw.random_shapes((32, 32), max_shapes=3) >>> image array([ [[255, 255, 255], [255, 255, 255], [255, 255, 255], ..., [255, 255, 255], [255, 255, 255], [255, 255, 255]]], dtype=uint8) >>> labels [('circle', ((22, 18), (25, 21))), ('triangle', ((5, 6), (13, 13)))]
- skimage.draw.rectangle(start, end=None, extent=None, shape=None)[原始碼]#
產生矩形內像素的座標。
- 參數:
- starttuple
矩形的起點,例如
([平面,] 列, 行)
。- endtuple
矩形的終點
([平面,] 列, 行)
。對於 2D 矩陣,矩形定義的切片為[start:(end+1)]
。必須指定end
或extent
。- extenttuple
繪製矩形的範圍(大小)。例如
([平面數,] 列數, 行數)
。必須指定end
或extent
。負範圍是有效的,並且會產生沿相反方向的矩形。如果範圍為負數,則不包括start
點。- shapetuple, 可選
用於決定輸出座標最大邊界的影像形狀。這對於裁切超出影像尺寸的矩形非常有用。預設情況下,不執行任何裁切。
- 傳回:
- coords整數陣列,形狀 (N維度, N點)
矩形中所有像素的座標。
注意事項
透過將
start
和end
或extent
作為長度為 N 的元組傳遞,此函數可以應用於 N 維影像。範例
>>> import numpy as np >>> from skimage.draw import rectangle >>> img = np.zeros((5, 5), dtype=np.uint8) >>> start = (1, 1) >>> extent = (3, 3) >>> rr, cc = rectangle(start, extent=extent, shape=img.shape) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]], dtype=uint8)
>>> img = np.zeros((5, 5), dtype=np.uint8) >>> start = (0, 1) >>> end = (3, 3) >>> rr, cc = rectangle(start, end=end, shape=img.shape) >>> img[rr, cc] = 1 >>> img array([[0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]], dtype=uint8)
>>> import numpy as np >>> from skimage.draw import rectangle >>> img = np.zeros((6, 6), dtype=np.uint8) >>> start = (3, 3) >>> >>> rr, cc = rectangle(start, extent=(2, 2)) >>> img[rr, cc] = 1 >>> rr, cc = rectangle(start, extent=(-2, 2)) >>> img[rr, cc] = 2 >>> rr, cc = rectangle(start, extent=(-2, -2)) >>> img[rr, cc] = 3 >>> rr, cc = rectangle(start, extent=(2, -2)) >>> img[rr, cc] = 4 >>> print(img) [[0 0 0 0 0 0] [0 3 3 2 2 0] [0 3 3 2 2 0] [0 4 4 1 1 0] [0 4 4 1 1 0] [0 0 0 0 0 0]]
- skimage.draw.rectangle_perimeter(start, end=None, extent=None, shape=None, clip=False)[原始碼]#
產生正好在矩形周圍的像素座標。
- 參數:
- starttuple
內部矩形的起始點,例如,
(列, 行)
。- endtuple
內部矩形的結束點
(列, 行)
。對於 2D 矩陣,由內部矩形定義的切片是[start:(end+1)]
。必須指定end
或extent
其中之一。- extenttuple
內部矩形的範圍(大小)。例如,
(列數, 行數)
。必須指定end
或extent
其中之一。允許負範圍。請參閱rectangle
以更好地了解它們的行為。- shapetuple, 可選
用於決定輸出座標最大邊界的影像形狀。這對於裁切超出影像尺寸的邊界非常有用。預設情況下,不執行任何裁切。長度必須至少為 2。僅使用前兩個值來決定輸入影像的範圍。
- clipbool,可選
是否將邊界裁切到提供的形狀。如果將此設定為 True,則繪製的圖形將始終是一個封閉的多邊形,且所有邊都可見。
- 傳回:
- coords整數陣列,形狀 (2, N點)
矩形中所有像素的座標。
範例
>>> import numpy as np >>> from skimage.draw import rectangle_perimeter >>> img = np.zeros((5, 6), dtype=np.uint8) >>> start = (2, 3) >>> end = (3, 4) >>> rr, cc = rectangle_perimeter(start, end=end, shape=img.shape) >>> img[rr, cc] = 1 >>> img array([[0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1], [0, 0, 1, 0, 0, 1], [0, 0, 1, 0, 0, 1], [0, 0, 1, 1, 1, 1]], dtype=uint8)
>>> img = np.zeros((5, 5), dtype=np.uint8) >>> r, c = rectangle_perimeter(start, (10, 10), shape=img.shape, clip=True) >>> img[r, c] = 1 >>> img array([[0, 0, 0, 0, 0], [0, 0, 1, 1, 1], [0, 0, 1, 0, 1], [0, 0, 1, 0, 1], [0, 0, 1, 1, 1]], dtype=uint8)
- skimage.draw.set_color(image, coords, color, alpha=1)[原始碼]#
在給定座標處設定影像中的像素顏色。
請注意,此函數會就地修改影像的顏色。超出影像形狀的座標將被忽略。
- 參數:
- image(M, N, C) ndarray
影像
- coords((K,) ndarray, (K,) ndarray) 的元組
要著色的像素的列和行座標。
- color(C,) ndarray
要指定給影像中座標的顏色。
- alpha純量或 (K,) ndarray
用於將顏色與影像混合的 Alpha 值。0 為透明,1 為不透明。
範例
>>> from skimage.draw import line, set_color >>> img = np.zeros((10, 10), dtype=np.uint8) >>> rr, cc = line(1, 1, 20, 20) >>> set_color(img, (rr, cc), 1) >>> img array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]], dtype=uint8)