我正在使用
cv2
进行以下图像处理:
import numpy as np
import cv2
image = cv2.imread('./tomatoes.png',cv2.IMREAD_GRAYSCALE)
noise_std = 0.1
noise = np.random.rayleigh(noise_std, image.shape)
noisy_image = image + noise
cv2.imwrite('noisy_image.jpg', noisy_image)
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
问题是:当噪声添加到图像中时,我只收到一个白色窗口对话框。
以下是如何在Python/OpenCV中添加瑞利噪声。你有几个问题。首先,将图像转换为浮点数以匹配噪声生成的结果。其次使用 addWeighted 将噪声和图像结合起来。由于瑞利噪声幅度很小,因此需要很大的权重。 (注:我特意选择了很大的权重,以使噪音非常明显)
输入:
import numpy as np
import cv2
img = cv2.imread('lena.png',cv2.IMREAD_GRAYSCALE)
image = img.astype(np.float64)
noise_std = 0.2
noise = np.random.rayleigh(noise_std, img.shape)
noisy_image = cv2.addWeighted(image, 1, noise, 70, 0.0).astype(np.uint8)
cv2.imwrite('lena_rayleigh_noise.png', noisy_image)
cv2.imshow('Image', img)
cv2.imshow('Noise', noise)
cv2.imshow('Noisy Image', noisy_image)
cv2.waitKey(0)
结果:
添加
以下是使用 Imagemagick 脚本 statsfilt 中的统计滤波器对上述图像进行瑞利噪声过滤的结果,网址为 http://www.fmwconcepts.com/imagemagick/statsfilt/index.php。请参阅 Wikipedia,例如,Lp 平均值位于 https://en.wikipedia.org/wiki/Lp_space 和反谐波平均值位于 https://en.wikipedia.org/wiki/Contraharmonic_mean。这两个似乎是最好的,包括几何平均数和调和平均数。我建议使用指数 (p) 为正 2 或更高。
Lp 平均值,p=2:
p=2 的反调和平均值:
p=3 的反调和平均值:
Imagemagick还有一个叫做enhance的降噪功能。我做了五次迭代:
convert lena_rayleigh_noise.png -enhance -enhance -enhance -enhance -enhance lena_rayleigh_noise_enhance5.png
它对白噪声效果很好,但留下了黑噪声。
如何在matlab中实现相同的代码?