エッジ検出(2)
エッジ検出は複数の軸方向に対して行い、その結果を1つのエッジ値に統合することができます。2次元画像の場合、水平・垂直それぞれの「エッジマップ」をピタゴラスの定理を使って合成します:
$$z = \sqrt{x^2 + y^2}$$
代表的なエッジ検出手法の1つが Sobelフィルター です。Sobelフィルターは、検出器の中心ピクセルに対してより大きな重みを与えます:
weights = [[ 1, 2, 1],
[ 0, 0, 0],
[-1, -2, -1]]
この演習では、2つのSobelフィルター適用後の画像を合成エッジマップに統合することで、前回のエッジ検出をさらに改善しましょう。
この演習はコースの一部です
Python による生体医療画像解析
演習の手順
imに対して、第1軸と第2軸それぞれにndi.sobel()を適用します。- ピタゴラスの定理を使って全体のエッジ強度を計算します。
np.sqrt()とnp.square()を使いましょう。 - 強度画像を表示します。グレースケールのカラーマップを使用し、
vmaxを75に設定してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Apply Sobel filter along both axes
sobel_ax0 = ndi.sobel(____, axis=____)
sobel_ax1 = ____
# Calculate edge magnitude
edges = ____
# Plot edge magnitude
plt.imshow(____, ____, ____)
format_and_render_plot()