skimage.draw
#
線、円、テキストなどの描画プリミティブ。
ベジェ曲線座標を生成します。 |
|
円周の座標を生成します。 |
|
アンチエイリアス処理された円周座標を生成します。 |
|
円内のピクセル座標を生成します。 |
|
楕円内のピクセル座標を生成します。 |
|
楕円周の座標を生成します。 |
|
指定された半軸長の楕円体を生成します。 |
|
楕円体の解析的な体積と表面積を計算します。 |
|
線のピクセル座標を生成します。 |
|
アンチエイリアス処理された線のピクセル座標を生成します。 |
|
n次元で1ピクセル幅の線を描画します。 |
|
多角形内のピクセル座標を生成します。 |
|
多角形からバイナリマスクを作成します。 |
|
多角形周の座標を生成します。 |
|
ランダムな形状の画像と、境界ボックスでラベル付けされた画像を生成します。 |
|
矩形内のピクセル座標を生成します。 |
|
矩形の正確な周囲にあるピクセル座標を生成します。 |
|
指定された座標で画像のピクセル色を設定します。 |
- skimage.draw.bezier_curve(r0, c0, r1, c1, r2, c2, weight, shape=None)[ソース]#
ベジェ曲線座標を生成します。
- パラメータ:
- r0, c0int
最初の制御点の座標。
- r1, c1int
中間の制御点の座標。
- r2, c2int
最後の制御点の座標。
- weightdouble
中間の制御点の重み。線の張力を表します。
- shapetuple, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは画像サイズを超える曲線に役立ちます。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’}, optional
bresenham: ブレゼンハム法 (デフォルト) andres: アンドレス法
- shapetuple, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは画像サイズを超える円に役立ちます。Noneの場合、円の全体範囲が使用されます。少なくとも長さ2である必要があります。最初の2つの値のみを使用して、入力画像の範囲を決定します。
- 戻り値:
- rr, cc(N,) intのndarray
ブレゼンハム法およびアンドレス法:円周に属するピクセルのインデックス。配列に直接インデックスを付けるために使用できます。例:
img[rr, cc] = 1
。
注釈
アンドレス法には、同心円がディスクを作成するのに対し、ブレゼンハム法では穴が開く可能性があるという利点があります。また、アンドレス円を回転させるときの歪みが少なくなります。ブレゼンハム法は、中間点円アルゴリズムとも呼ばれます。アンチエイリアス処理された円ジェネレーターは、
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, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは画像サイズを超える円に役立ちます。Noneの場合、円の全体範囲が使用されます。少なくとも長さ2である必要があります。最初の2つの値のみを使用して、入力画像の範囲を決定します。
- 戻り値:
- rr, cc, val(N,) ndarray (int, int, float)
ピクセル(
rr
,cc
)と強度値(val
)のインデックス。img[rr, cc] = val
。
注釈
Wuの方法は、アンチエイリアス処理された円を描画します。この実装では、ルックアップテーブルの最適化を使用していません。
circle_perimeter_aa
の結果をカラー画像に適用するには、関数draw.set_color
を使用してください。参考文献
[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, optional
サイズ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, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは、画像サイズを超える楕円に役立ちます。デフォルトでは、楕円の全範囲が使用されます。長さが 2 以上である必要があります。最初の 2 つの値のみが範囲の決定に使用されます。
- rotationfloat, optional (デフォルトは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_radiusint
短半径と長半径。
(r/r_radius)**2 + (c/c_radius)**2 = 1
。- orientationdouble, optional
長軸の向きをラジアン単位で時計回りに示したもの。
- shapetuple, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは、画像サイズを超える楕円に役立ちます。None の場合、楕円の全範囲が使用されます。長さが 2 以上である必要があります。最初の 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)[ソース]#
指定された半軸長の楕円体を生成します。
それぞれの半軸の長さは、デカルト座標の 3 次元で与えられます。各次元は異なるグリッド間隔を使用できます。
- パラメータ:
- afloat
x軸に沿った半軸の長さ。
- bfloat
y軸に沿った半軸の長さ。
- cfloat
z軸に沿った半軸の長さ。
- spacingfloat の 3 タプル
3次元空間でのグリッド間隔。
- levelsetbool
True の場合、この楕円体のレベルセット(内部を示す正の値を持つゼロを中心とした符号付きレベルセット)を np.float64 として返します。False は、上記のレベルセットのバイナリ化されたバージョンを返します。
- 戻り値:
- ellipsoid(M, N, P) 配列
指定された
spacing
に対して正しくサイズ調整された配列の中心にある楕円体。levelset=True
でない限り、ブール型の dtype。その場合、楕円体を表す 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\) は、第 2 種のカーソン完全対称楕円積分 [1] です。後者は
scipy.special.elliprg()
として実装されます。- パラメータ:
- afloat
x軸に沿った半軸の長さ。
- bfloat
y軸に沿った半軸の長さ。
- cfloat
z軸に沿った半軸の長さ。
- 戻り値:
- volfloat
計算された楕円体の体積。
- surffloat
計算された楕円体の表面積。
参考文献
[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次元で1ピクセル幅の線を描画します。
生成される線は ndim で接続されます。つまり、線内の 2 つの連続するピクセルは、n 次元で直接または対角の近傍になります。
- パラメータ:
- start配列状、形状 (N,)
線の開始座標。
- stop配列状、形状 (N,)
線の終了座標。
- endpointbool, optional
返される線に終点を含めるかどうか。デフォルトは False で、複数点のパスを簡単に描画できます。
- integerbool, optional
座標を整数に丸めるかどうか。 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,) array_like
ポリゴンの頂点の行座標。
- c(N,) array_like
ポリゴンの頂点の列座標。
- shapetuple, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは、画像サイズを超えるポリゴンに役立ちます。Noneの場合、ポリゴンの全範囲が使用されます。少なくとも長さ2である必要があります。入力画像の範囲を決定するために、最初の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) array_like
ポリゴンの座標。形状は(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, optional
出力ピクセル座標の最大範囲を決定するために使用される画像形状。これは、画像サイズを超えるポリゴンに役立ちます。Noneの場合、ポリゴンの全範囲が使用されます。少なくとも長さ2である必要があります。入力画像の範囲を決定するために、最初の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_shapeタプル
生成する画像の行数と列数。
- max_shapesint
形状に収める(試みる)最大数。
- min_shapesint、オプション
形状に収める(試みる)最小数。
- min_sizeint、オプション
画像に収める各形状の最小寸法。
- max_sizeint、オプション
画像に収める各形状の最大寸法。
- num_channelsint、オプション
生成された画像のチャネル数。1の場合、モノクロ画像を生成し、そうでない場合は複数のチャネルを持つカラー画像を生成します。
multichannel
がFalseに設定されている場合は無視されます。- shape{rectangle, circle, triangle, ellipse, None} str、オプション
生成する形状の名前。またはランダムに選択する場合は
None
。- intensity_range{uint8のタプルのタプル、uint8のタプル}、オプション
ピクセル値をサンプリングする値の範囲。グレースケール画像の場合、形式は(最小値, 最大値)です。マルチチャネルの場合は、チャネル全体で範囲が同じ場合は((最小値, 最大値),)、異なる場合は((最小値_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
画像内の形状ごとに1つずつ、ラベルのリスト。各ラベルは、形状のカテゴリとバウンディングボックス座標を指定する(カテゴリ, ((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, optional
出力座標の最大境界を決定するために使用される画像形状。これは、画像サイズを超える長方形をクリッピングするのに便利です。デフォルトでは、クリッピングは行われません。
- 戻り値:
- coordsint 型の配列、形状 (Ndim, Npoints)
長方形内のすべてのピクセルの座標。
注釈
この関数は、N次元画像に適用できます。
start
およびend
またはextent
を長さ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, optional
出力座標の最大境界を決定するために使用される画像形状。これは、画像サイズを超える周囲長をクリッピングするのに便利です。デフォルトでは、クリッピングは行われません。長さは少なくとも2である必要があります。入力画像の範囲を決定するために、最初の2つの値のみが使用されます。
- clipbool、オプション
周囲長を指定された形状にクリップするかどうか。これを True に設定すると、描画された図形は常にすべてのエッジが表示される閉じた多角形になります。
- 戻り値:
- coordsint 型の配列、形状 (2, Npoints)
長方形内のすべてのピクセルの座標。
例
>>> 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
色を画像とブレンドするために使用されるアルファ値。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)