注記
最後まで移動して、完全なサンプルコードをダウンロードします。または、Binderを使用してブラウザでこの例を実行します。
リッジ演算子#
リッジフィルタは、ニューライト[1]、チューブ[2]、血管[3]、しわ[4]、または川などの、尾根状の構造を検出するために使用できます。
コントラストやノイズレベルなどに応じて、異なるリッジフィルタが異なる構造の検出に適している場合があります。
このリッジフィルタのクラスは、画像強度におけるヘッセ行列の固有値に基づいて、構造に沿ってではなく、構造に垂直な方向に強度が変化する尾根状の構造を検出します。
参考文献#
![original, meijering σ = [1], meijering σ = [1, 2, 3, 4], sato σ = [1], sato σ = [1, 2, 3, 4], frangi σ = [1], frangi σ = [1, 2, 3, 4], hessian σ = [1], hessian σ = [1, 2, 3, 4]](../../_images/sphx_glr_plot_ridge_filter_001.png)
from skimage import data
from skimage import color
from skimage.filters import meijering, sato, frangi, hessian
import matplotlib.pyplot as plt
def original(image, **kwargs):
"""Return the original image, ignoring any kwargs."""
return image
image = color.rgb2gray(data.retina())[300:700, 700:900]
cmap = plt.cm.gray
plt.rcParams["axes.titlesize"] = "medium"
axes = plt.figure(figsize=(10, 4)).subplots(2, 9)
for i, black_ridges in enumerate([True, False]):
for j, (func, sigmas) in enumerate(
[
(original, None),
(meijering, [1]),
(meijering, range(1, 5)),
(sato, [1]),
(sato, range(1, 5)),
(frangi, [1]),
(frangi, range(1, 5)),
(hessian, [1]),
(hessian, range(1, 5)),
]
):
result = func(image, black_ridges=black_ridges, sigmas=sigmas)
axes[i, j].imshow(result, cmap=cmap)
if i == 0:
title = func.__name__
if sigmas:
title += f"\n\N{GREEK SMALL LETTER SIGMA} = {list(sigmas)}"
axes[i, j].set_title(title)
if j == 0:
axes[i, j].set_ylabel(f'{black_ridges = }')
axes[i, j].set_xticks([])
axes[i, j].set_yticks([])
plt.tight_layout()
plt.show()
スクリプトの総実行時間:(0分3.166秒)