注記
最後まで移動して、完全なサンプルコードをダウンロードします。または、Binder経由でブラウザでこのサンプルを実行します。
画像デコンボリューション#
この例では、ウィーナーフィルタと教師なしウィーナーアルゴリズムを使用して、ノイズの多い画像のデコンボリューションを行います。これらのアルゴリズムは線形モデルに基づいており、非線形手法(TV復元など)ほどシャープなエッジを復元できませんが、はるかに高速です。
ウィーナーフィルタ#
PSF(点広がり関数)、事前正則化(高周波数のペナルティ)、データと事前適合性の間のトレードオフに基づく逆フィルタ。正則化パラメータは手動で調整する必要があります。
教師なしウィーナー#
このアルゴリズムは、データ学習に基づいて自己調整された正則化パラメータを持っています。これは一般的ではなく、以下の出版物[1]に基づいています。このアルゴリズムは、画像、ノイズパワー、画像周波数パワーの後部条件付き法則のサンプルを交互に抽出する反復ギブスサンプラーに基づいています。

import numpy as np
import matplotlib.pyplot as plt
from skimage import color, data, restoration
rng = np.random.default_rng()
astro = color.rgb2gray(data.astronaut())
from scipy.signal import convolve2d as conv2
psf = np.ones((5, 5)) / 25
astro = conv2(astro, psf, 'same')
astro += 0.1 * astro.std() * rng.standard_normal(astro.shape)
deconvolved, _ = restoration.unsupervised_wiener(astro, psf)
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(8, 5), sharex=True, sharey=True)
plt.gray()
ax[0].imshow(astro, vmin=deconvolved.min(), vmax=deconvolved.max())
ax[0].axis('off')
ax[0].set_title('Data')
ax[1].imshow(deconvolved)
ax[1].axis('off')
ax[1].set_title('Self tuned restoration')
fig.tight_layout()
plt.show()
スクリプトの総実行時間:(0分0.747秒)