[scikit-image] 34. 逆畳み込みによる劣化画像の鮮明化(skimage.restoration unsupervised_wiener)

python

はじめに

本記事では、画像処理において重要な「逆畳み込み(deconvolution)」という技術について説明します。実際の画像処理では、様々な要因(ピンぼけ、モーションブラー、ノイズなど)により画像が劣化することがあります。scikit-imageライブラリのunsupervised_wiener関数を使用することで、このような劣化した画像を元の鮮明な状態に復元する方法を紹介します。

コード

解説

モジュールのインポート

画像データの読み込み

下のサボテン・バッテリーの画像を読み込み、rgb2grayにより、グレースケール化します。

画像の畳み込み

これにより(6,6)の範囲で画像配列の2次元畳み込みが実行されます。パラメータ’same’を指定することで、出力画像が元画像と同じサイズに保たれます。

このコードでは畳み込んだ画像にノイズを加えています。

画像の逆畳み込み

scikit-imageのunsupervised_wiener関数を使用することで、画像の逆畳み込み(デコンボリューション)処理が可能になります。

  • 引数:
    • image: 劣化した入力画像
    • psf: Point Spread Function(点広がり関数)、つまり畳み込みに使用されたカーネル
  • 戻り値:
    • deconvolved: 復元された画像
    • _: アンダースコアは二つ目の戻り値(通常はフィルタ)を無視することを示します

この関数は、畳み込みとノイズによって劣化した画像を元の状態に近づけるために使用されます。具体的には、scipy.signalconvolve2dで画像を畳み込み、ノイズを加えた後、このunsupervised_wiener関数で元の画像に近づける処理を行います。

画像の表示

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

本記事では、scikit-imageのrestorationモジュールにあるunsupervised_wiener関数を使用して、畳み込みとノイズによって劣化した画像を復元する方法を説明しました。実際にscipy.signalconvolve2dで画像を畳み込み、ノイズを加えた後、unsupervised_wienerで元の画像に近づける処理を実装しました。この手法は画像の鮮明化や復元において有効であり、特に畳み込みカーネルが既知の場合に有用です。逆畳み込みの原理と実装方法を理解することで、より高度な画像処理技術への足がかりになるでしょう。

参考

Image Deconvolution — skimage 0.25.2 documentation
convolve2d — SciPy v1.16.2 Manual
skimage.restoration — skimage 0.25.2 documentation
http://www7.plala.or.jp/sentarosan/118vatteri.html

コメント