mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-27 23:08:44 +08:00
dd9030d44c
that there is only one function for fast and classic algorithms.
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""
|
|
=================================================
|
|
Non-local means denoising for preserving textures
|
|
=================================================
|
|
|
|
In this example, we denoise a detail of the astronaut image using the non-local
|
|
means filter. The non-local means algorithm replaces the value of a pixel by an
|
|
average of a selection of other pixels values: small patches centered on the
|
|
other pixels are compared to the patch centered on the pixel of interest, and
|
|
the average is performed only for pixels that have patches close to the current
|
|
patch. As a result, this algorithm can restore well textures, that would be
|
|
blurred by other denoising algoritm.
|
|
"""
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
from skimage import data, img_as_float
|
|
from skimage.restoration import nl_means_denoising
|
|
|
|
|
|
astro = img_as_float(data.astronaut())
|
|
astro = astro[30:180, 150:300]
|
|
|
|
noisy = astro + 0.3 * np.random.random(astro.shape)
|
|
noisy = np.clip(noisy, 0, 1)
|
|
|
|
denoise = nl_means_denoising(noisy, 7, 9, 0.08)
|
|
|
|
fig, ax = plt.subplots(ncols=2, figsize=(8, 4))
|
|
|
|
ax[0].imshow(noisy)
|
|
ax[0].axis('off')
|
|
ax[0].set_title('noisy')
|
|
ax[1].imshow(denoise)
|
|
ax[1].axis('off')
|
|
ax[1].set_title('non-local means')
|
|
|
|
fig.subplots_adjust(wspace=0.02, hspace=0.2,
|
|
top=0.9, bottom=0.05, left=0, right=1)
|
|
|
|
plt.show()
|