自编码器可以将彩色图像转为黑白图像。下面是一个 Python 实现的示例:
import numpy as np
import matplotlib.pyplot as plt
from keras.layers import Conv2D, MaxPooling2D, UpSampling2D
from keras.models import Sequential
# 创建自编码器模型
def create_autoencoder(input_shape):
model = Sequential()
# Encoder
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=input_shape))
model.add(MaxPooling2D((2, 2), padding='same'))
model.add(Conv2D(16, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D((2, 2), padding='same'))
model.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D((2, 2), padding='same'))
# Decoder
model.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(16, (3, 3), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(UpSampling2D((2, 2)))
model.add(Conv2D(1, (3, 3), activation='sigmoid', padding='same'))
model.compile(optimizer='adam', loss='binary_crossentropy')
return model
# 加载数据
def load_data():
# 加载彩色图像
color_imgs = plt.imread('color_imgs.jpg')
# 转换为黑白图像
bw_imgs = np.dot(color_imgs[..., :3], [0.299, 0.587, 0.114])
# 进行归一化
bw_imgs = bw_imgs / 255.0
# 转换为 tensor
bw_imgs = np.reshape(bw_imgs, (-1, 224, 224, 1))
return bw_imgs
if __name__ == '__main__':
input_shape = (224, 224, 1)
# 创建自编码器模型
model = create_autoencoder(input_shape)
# 加载数据
bw_imgs = load_data()
# 训练模型
model