注記
完全なサンプルコードをダウンロードするには、最後まで進んでください。 または、Binder を介してブラウザでこのサンプルを実行します。
画像からのガボールフィルタ/一次視覚皮質「単純細胞」#
例えば、画像分類のために、高度な数学を使わず、標準的なPython科学ライブラリだけで、(生物学的妥当性のある) *疎* ディクショナリ(または「コードブック」、または「フィルタバンク」)を構築する方法は?
簡単な答えを以下に示します ;-)
この簡単な例は、単純な画像を使用してガボールフィルタのようなフィルタ[1]を取得する方法を示しています。この例では、宇宙飛行士のEileen Collinsの写真を使用しています。ガボールフィルタは、哺乳類の一次視覚皮質(V1)に見られる「単純細胞」[2]の受容野[3]の良い近似値です(詳細については、例えば60年代に行われたHubelとWieselによるノーベル賞受賞研究を参照してください[4] [5])。
ここでは、単純な生物学的妥当性のあるヘッブ学習則として、McQueenの「kmeans」アルゴリズム[6]を使用し、(a)元の画像のパッチ(網膜投影)と(b)単純なガウシアン差分(DoG)近似を使用したLGNのような[7]画像のパッチに適用します。
楽しんでください ;-) そして、自然画像のパッチでガボールフィルタを得ることが、ロケット科学ではないことを覚えておいてください。

/home/runner/work/scikit-image/scikit-image/doc/examples/features_detection/plot_gabors_from_astronaut.py:57: UserWarning:
One of the clusters is empty. Re-run kmeans with a different initialization.
from scipy.cluster.vq import kmeans2
from scipy import ndimage as ndi
import matplotlib.pyplot as plt
from skimage import data
from skimage import color
from skimage.util.shape import view_as_windows
from skimage.util import montage
patch_shape = 8, 8
n_filters = 49
astro = color.rgb2gray(data.astronaut())
# -- filterbank1 on original image
patches1 = view_as_windows(astro, patch_shape)
patches1 = patches1.reshape(-1, patch_shape[0] * patch_shape[1])[::8]
fb1, _ = kmeans2(patches1, n_filters, minit='points')
fb1 = fb1.reshape((-1,) + patch_shape)
fb1_montage = montage(fb1, rescale_intensity=True)
# -- filterbank2 LGN-like image
astro_dog = ndi.gaussian_filter(astro, 0.5) - ndi.gaussian_filter(astro, 1)
patches2 = view_as_windows(astro_dog, patch_shape)
patches2 = patches2.reshape(-1, patch_shape[0] * patch_shape[1])[::8]
fb2, _ = kmeans2(patches2, n_filters, minit='points')
fb2 = fb2.reshape((-1,) + patch_shape)
fb2_montage = montage(fb2, rescale_intensity=True)
# -- plotting
fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax = axes.ravel()
ax[0].imshow(astro, cmap=plt.cm.gray)
ax[0].set_title("Image (original)")
ax[1].imshow(fb1_montage, cmap=plt.cm.gray)
ax[1].set_title("K-means filterbank (codebook)\non original image")
ax[2].imshow(astro_dog, cmap=plt.cm.gray)
ax[2].set_title("Image (LGN-like DoG)")
ax[3].imshow(fb2_montage, cmap=plt.cm.gray)
ax[3].set_title("K-means filterbank (codebook)\non LGN-like DoG image")
for a in ax.ravel():
a.axis('off')
fig.tight_layout()
plt.show()
スクリプトの総実行時間:(0分1.243秒)