家人们你们是不是也遇到了这个问题!!!
# 添加高斯噪声
def add_gauss_noise(image):
# 法1没用
# mean = 0
# val = 0.01
# image = image / 255
# noise = np.random.normal(mean, val * 5, image.shape)
# noisy = image + noise
# 法2也没用
# noisy = skimage.util.random_noise(image, mode='gaussian', var=0.01)
# return noisy
def show(name, img):
plt.title(name)
plt.imshow(img)
plt.show()
def methods_mean(img):
src1 = add_gauss_noise(img)
show('noise-src1', src1)
# 使用3x3窗的均值滤波对噪声图像进行滤波
src2 = cv2.blur(src1, (3, 3))
show('3x3-mean-src1', src2)
# 使用7x7窗的均值滤波对噪声图像进行滤波
src3 = cv2.blur(src1, (7, 7))
show('7x7-mean-src1', src3)
def methods_mid(img):
# 添加高斯噪声
src1 = add_gauss_noise(img)
show('noise-src1', src1)
# 使用3x3窗的中值滤波对噪声图像进行滤波
print(src1.shape)
src4 = cv2.medianBlur(src1, 3)
show('3x3-mid-src2', src4)
# 使用7x7窗的中值滤波对噪声图像进行滤波
src5 = cv2.medianBlur(src1, 7)
show('7x7-mid-src2', src5)
img = cv2.imread('E:\\PS\\lena.png')
show('origin-src1', img)
methods_mean(img)
methods_mid(img)
但是!我用均值滤波可以正常处理图像,可却在中值滤波的时候卡住了!报这个错!我好气!找了一下午没找出来!
今天被我偶然的看到了一个添加高斯噪声的新方法我就浅试了一下没想到居然成功了!!!
主要就是把添加高斯噪声那个函数改成下面这个就可以了!!!
def add_gauss_noise(image):
mean = 0
var = 0.01
image = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out * 255)
# cv.imshow("gasuss", out)
return out
在右图两种加上这行关键代码之后,代码就可以正常运行了!
至于为什么要这样做:
我的猜测是在python图像处理过程中,遇到的RGB图像的值是处于0-255之间的,为了更好的处理图像,通常会将图像值转变到0-1之间?
小小拙见还请指正!