利用DCNN对同时含有椒盐噪声和高斯噪声的一张Lena图片进行去噪的python代码
时间: 2024-01-12 21:05:09 浏览: 80
数字图像椒盐噪声和高斯噪声的去处方法
3星 · 编辑精心推荐
以下是利用DCNN对同时含有椒盐噪声和高斯噪声的一张Lena图片进行去噪的Python代码:
```python
import numpy as np
import cv2
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, UpSampling2D
# 读取含有椒盐噪声和高斯噪声的Lena图片
img = cv2.imread('lena_noise.jpg', 0)
# 将像素值缩放到0-1之间
img = img.astype('float32') / 255.0
# 对图片进行reshape
img = np.reshape(img, (1, img.shape[0], img.shape[1], 1))
# 定义模型
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=img.shape[1:]))
model.add(MaxPooling2D((2, 2), padding='same'))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D((2, 2), padding='same'))
model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
model.add(Conv2D(1, (3, 3), activation='sigmoid', padding='same'))
# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy')
# 训练模型
model.fit(img, img, epochs=100, batch_size=1)
# 对图片进行去噪
denoised_img = model.predict(img)
# 将像素值缩放回0-255之间
denoised_img = denoised_img.reshape((denoised_img.shape[1], denoised_img.shape[2]))
denoised_img = denoised_img * 255.0
denoised_img = denoised_img.astype('uint8')
# 显示去噪后的图片
cv2.imshow('Denoised Image', denoised_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
需要注意的是,这里用到的是一个基于Keras的简单的DCNN模型,你可以根据自己的需要进行修改和调整。
阅读全文