通常,在 2D 图中很难通过肉眼看到噪声过滤器的效果。让我通过例子来证明这一点。假设我们有这张嘈杂的图片:

现在让我将此图像转换为 3d 网格图。然后它看起来像这样。噪点变得非常清晰,但画面左右两侧的深度差异也变得非常明显。

该库findpeaks
包含许多过滤器,这些过滤器从各种(旧的 python 2)库中使用并重写为 python 3。应用过滤器非常容易,如下所示。请注意,此示例对于 SAR 图像似乎不太具有代表性,因为没有散斑噪声。在此示例中,均值或中值滤波器似乎表现得非常好。在局部高度很重要的散斑噪声图像中,这种均值/中值滤波器可以去除峰值,从而破坏感兴趣的信号。
通过以下方式安装:
pip install findpeaks
由......运营:
from findpeaks import findpeaks
# Read image
img = cv2.imread('noise.png')
filters = [None, 'lee','lee_enhanced','kuan', 'fastnl','bilateral','frost','median','mean']
for getfilter in filters:
fp = findpeaks(method='topology', scale=False, denoise=getfilter, togray=True, imsize=False, window=15)
fp.fit(img)
fp.plot_mesh(wireframe=False, title=str(getfilter), view=(30,30))

如果您直接想使用去噪滤波器,可以这样做:
import findpeaks
import matplotlib.pyplot as plt
# Read image
img = cv2.imread('noise.png')
# filters parameters
# window size
winsize = 15
# damping factor for frost
k_value1 = 2.0
# damping factor for lee enhanced
k_value2 = 1.0
# coefficient of variation of noise
cu_value = 0.25
# coefficient of variation for lee enhanced of noise
cu_lee_enhanced = 0.523
# max coefficient of variation for lee enhanced
cmax_value = 1.73
# Some pre-processing
# Make grey image
img = findpeaks.stats.togray(img)
# Scale between [0-255]
img = findpeaks.stats.scale(img)
# Denoising
# fastnl
img_fastnl = findpeaks.stats.denoise(img, method='fastnl', window=winsize)
# bilateral
img_bilateral = findpeaks.stats.denoise(img, method='bilateral', window=winsize)
# frost filter
image_frost = findpeaks.frost_filter(img, damping_factor=k_value1, win_size=winsize)
# kuan filter
image_kuan = findpeaks.kuan_filter(img, win_size=winsize, cu=cu_value)
# lee filter
image_lee = findpeaks.lee_filter(img, win_size=winsize, cu=cu_value)
# lee enhanced filter
image_lee_enhanced = findpeaks.lee_enhanced_filter(img, win_size=winsize, k=k_value2, cu=cu_lee_enhanced, cmax=cmax_value)
# mean filter
image_mean = findpeaks.mean_filter(img, win_size=winsize)
# median filter
image_median = findpeaks.median_filter(img, win_size=winsize)
plt.figure(); plt.imshow(img_fastnl, cmap='gray'); plt.title('Fastnl')
plt.figure(); plt.imshow(img_bilateral, cmap='gray'); plt.title('Bilateral')
plt.figure(); plt.imshow(image_frost, cmap='gray'); plt.title('Frost')
plt.figure(); plt.imshow(image_kuan, cmap='gray'); plt.title('Kuan')
plt.figure(); plt.imshow(image_lee, cmap='gray'); plt.title('Lee')
plt.figure(); plt.imshow(image_lee_enhanced, cmap='gray'); plt.title('Lee Enhanced')
plt.figure(); plt.imshow(image_mean, cmap='gray'); plt.title('Mean')
plt.figure(); plt.imshow(image_median, cmap='gray'); plt.title('Median')
如果您想使用该库,可以在此处找到更多示例。