ピクセルグラフを用いた物体の測地中心の算出#

様々な画像解析において、画像のピクセル、または画像領域のピクセルを、各ピクセルがその近傍(対角線を含む場合と含まない場合がある)に接続されたネットワークまたはグラフとして考えることが有用です。そのような状況の1つは、物体の測地中心を見つけることです。これは、直線ではなく、物体のピクセル上でのみ移動が許可されている場合、他のすべての点に最も近い点です。この点は、ネットワークにおける最大の近接中心性[1]を持つ点です。

この例では、スケルトンのそのようなピクセルグラフを作成し、そのスケルトンの中心ピクセルを見つけます。これは、実際にはオブジェクトの外側に落ちる可能性のある重心(質量中心とも呼ばれる)と比較して、その有用性を示しています。

参考文献#

import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage as ndi
from skimage import color, data, filters, graph, measure, morphology

まず、データを読み込みます:人間の網膜の画像です。

Human retina

画像をグレースケールに変換し、次にSato 血管らしさ フィルタを使用して、画像内の主要な血管をより明確に区別します。

retina = color.rgb2gray(retina_source)
t0, t1 = filters.threshold_multiotsu(retina, classes=3)
mask = retina > t0
vessels = filters.sato(retina, sigmas=range(1, 10)) * mask

_, axes = plt.subplots(nrows=1, ncols=2)
axes[0].imshow(retina, cmap='gray')
axes[0].set_axis_off()
axes[0].set_title('grayscale')
axes[1].imshow(vessels, cmap='magma')
axes[1].set_axis_off()
_ = axes[1].set_title('Sato vesselness')
grayscale, Sato vesselness

観察された血管らしさの値に基づいて、ヒステリシス 閾値処理を使用して、主要な血管を定義します。

Thresholded vesselness

最後に、このラベル画像をスケルトン化し、それを基にして、そのスケルトン内の中心 ピクセルを見つけます。それを重心の位置と比較してください!

Vessel graph center vs centroid

**スクリプトの実行時間合計:**(1分22.863秒)

Sphinx-Galleryによって生成されたギャラリー