$ pip3 install scikit-image
元画像
非局所平均値フィルタ
import numpy as np import matplotlib.pyplot as plt from skimage import img_as_float from skimage.restoration import denoise_nl_means, estimate_sigma from skimage.util import random_noise img = plt.imread('src/face.jpg') original = img_as_float(img) sigma = 0.1 noisy = random_noise(original, var=sigma**2) sigma_est = np.mean(estimate_sigma(noisy, multichannel=True)) patch_kw = dict(patch_size=5, # ノイズ除去のパッチサイズ 5x5 patch_distance=6, # パッチを検索する距離 13x13 searchera multichannel=True) denoise = denoise_nl_means(original, h=1.15*sigma_est, fast_mode=False, **patch_kw) # hはカットオフ fig, ax = plt.subplots(figsize=(8, 6.5), sharex=True, sharey=True) ax.imshow(denoise) ax.axis('off') ax.set_title('ノイズ除去') fig.tight_layout() plt.savefig('local_denoise_mangf.jpg',dpi=100)
かなり綺麗になってるのはわかります。