1

scikit-imageメソッドをテストしているときにskimage.measure.perimeter(image)、この関数の出力を説明できませんでした。

import numpy as np  
image=np.zeros((100,100))  
image[10:30,10:30]=1                   # this creates a white square  
from skimage.measure import perimeter  
x=perimeter(image)  
print x                               #Should be (20+20+20+20) = 80  
76.0        <<<<<<<<<< it returns this value

この関数が何を返すかを誤解しましたか。周囲はエリアを囲むパスであることを私は知っています。

:-(1)計算された周囲長と返される周囲長の差は、必ずしも4だけではありません。正方形、長方形、その他の多角形に関係なく、6になる場合もあります。
更新:=
(1)関数ページ

4

2 に答える 2

2

どのバージョンのskimageを使用していますか?バージョン0.6およびgithubソースには、skimage.measure.perimeter関数がありません。

さらに、私はあなたが3行目を意味したと思います:image[10:30, 10:30] = 1

編集

はい、わかりました。この関数は、バージョン0.7.1以降の_regionprops.pyで定義されています。結果76は実際には正しいです。形状の白い正方形(20、20)の周囲長を計算します。

それぞれの辺が20ピクセルを占め、合計で80ピクセルになると思います。しかしそうすることで、コーナーピクセルの2倍を数えます。周囲が76ピクセルになるコーナーピクセルを削除します。

他の形状の場合、差は4ピクセルではない場合があります。

編集2

ソースコードとドキュメントを見る:

  • regionpropsのドキュメントによると、境界は境界の近似値です。

4つの接続性を使用して、境界ピクセルの中心を通る線として輪郭を近似するオブジェクトの周囲長。

  • このコードは、画像から侵食を差し引いたもので構成されるborder_imageを計算します。この配列は、最初の編集で持っていた境界のアイデアに対応しています。

  • 次に、畳み込みと加重和を境界画像に適用して、周囲長を計算します。これは、ドキュメントに記載されているように、境界ピクセルの中心を通る線の長さを計算するために行われると思います。

詳細が必要な場合は、開発者の1人に問い合わせてください。これは、パッケージ内の非常に新しい関数です。

于 2012-10-17T13:16:38.417 に答える
-1

コードは、接続された各ピクセルの中心から中心までを測定します

于 2021-02-17T05:53:42.627 に答える