skimage.draw#

線、円、テキストなどの描画プリミティブ。

bezier_curve

ベジェ曲線座標を生成します。

circle_perimeter

円周の座標を生成します。

circle_perimeter_aa

アンチエイリアス処理された円周座標を生成します。

disk

円内のピクセル座標を生成します。

ellipse

楕円内のピクセル座標を生成します。

ellipse_perimeter

楕円周の座標を生成します。

ellipsoid

指定された半軸長の楕円体を生成します。

ellipsoid_stats

楕円体の解析的な体積と表面積を計算します。

line

線のピクセル座標を生成します。

line_aa

アンチエイリアス処理された線のピクセル座標を生成します。

line_nd

n次元で1ピクセル幅の線を描画します。

polygon

多角形内のピクセル座標を生成します。

polygon2mask

多角形からバイナリマスクを作成します。

polygon_perimeter

多角形周の座標を生成します。

random_shapes

ランダムな形状の画像と、境界ボックスでラベル付けされた画像を生成します。

rectangle

矩形内のピクセル座標を生成します。

rectangle_perimeter

矩形の正確な周囲にあるピクセル座標を生成します。

set_color

指定された座標で画像のピクセル色を設定します。


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

計算された楕円体の表面積。

参考文献


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

多角形からバイナリマスクを作成します。

注釈

この関数は、rrccに負の値が含まれないようにします。座標が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_sizemax_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)