はじめに
画像処理において、異なる解像度の画像を扱うことは重要です。scikit-imageライブラリのtransform.pyramid_gaussianは、元画像から一定の倍率で縮小された連続画像(ピラミッド)を生成する機能を提供します。これは、マルチスケール解析や特徴抽出などの用途に役立ちます。本記事では、このピラミッド表現の基本概念と実装方法について解説します。
コード

解説
モジュールのインポート
画像データの読み込み
パロディア属(旧ノトカクタス属)獅子王丸(Parodia submammulosus)の画像をplt.imread()で読み込みます。
画像ピラミッドの構築
rows, cols, dim = image.shapeで画像の行数、列数、次元数を取得します。この例では、それぞれ512、512、3となっています。 pyramid_gaussian()関数で画像ピラミッドを構築し、tuple()でタプル形式の画像集合としてデータを取得します。 複合画像(composite_image)は、 np.zeros((rows, cols + cols // 2, 3), dtype=np.double)で作成します。これにより、元画像より横方向にcols // 2だけ広い、要素がすべて0の画像が生成されます。
この複合画像の左側に元画像(pyramid[0])を表示するため、composite_image[:rows, :cols, :] = pyramid[0]と設定します。
n_rows, n_cols = p.shape[:2]でピラミッド画像のサイズを取得し、 composite_image[i_row:i_row + n_rows, cols:cols + n_cols,:] = pで画像を配置していきます。 i_row += n_rowsとすることで、次の画像が現在の画像の高さ分(n_rows)だけ下に表示され、重なりを防ぎます。
結果の表示
画像の大きさを揃えて表示

画像ピラミッドを使用すると、縮小された画像が小さすぎて詳細を識別しづらくなります。そのため、subplotsを使用して各画像を個別に表示しました。画像サイズが16×16ピクセル程度になると、内容を判別できなくなることが確認できます。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
scikit-imageのtransform.pyramid_gaussianを使用することで、元画像から一定倍率で縮小された連続画像を簡単に生成できます。このガウシアンピラミッドは、マルチスケール解析や特徴検出など様々な画像処理タスクに応用可能です。パラメータを調整することで、縮小率や出力レベル数をコントロールでき、処理の柔軟性を高めることができます。
参考

コメント
[…] [scikit-image] 25. 一定倍率で縮小された連続画像を生成(transform.pyramid_gaussian)ここでは、skimage.transformのpyramid_gaussianによる一定倍率で縮小された連続画像の生成方法について説明する。sabopy.c […]