$ pip3 install scikit-image
元画像
非局所平均値フィルタ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 ) |
かなり綺麗になってるのはわかります。