$ 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)
かなり綺麗になってるのはわかります。
