使用SRCNN进行测试
准备图片
# Read and prepare the test image for SRCNN. def prepare_data(path): # Settings. data = [] label = [] padding = abs(size_input - size_label) / 2 stride = 21 # Read in image and convert to ycrcb color space. img_input = cv.imread(path) im = cv.cvtColor(img_input, cv.COLOR_BGR2YCR_CB) img = im2double(im) # Only use the luminance value.
传入一个图片,然后转化到YCrCB空间,并且归一化
# Create groundtruth and baseline image. im_label = modcrop_color(img, scale=multiplier) color_base = modcrop_color(im, scale=multiplier) size = im_label.shape h = size[0] w = size[1] im_blur = scipy.misc.imresize(im_label, 1 / multiplier, interp='bicubic') im_input = scipy.misc.imresize(im_blur, multiplier * 1.0, interp='bicubic')
将测试的图片变模糊
data = np.array(im_input[:,:,0]).reshape([1, h, w, 1]) color = np.array(color_base[:,:,1:3]) label = np.array(modcrop_color(img_input)) return data, label, color
data表示灰度空间,color保留另外两个空间,不参与运算,label是合在一起的图片
准备图片2
def prepare_raw(path): # Settings. data = [] color = [] # Read in image and convert to ycrcb color space. img = cv.imread(path) im = cv.cvtColor(img, cv.COLOR_BGR2YCR_CB) img = im2double(im) # Only use the luminance value. size = img.shape img_temp = scipy.misc.imresize(img, [size[0] * multiplier, size[1] * multiplier], interp='bicubic') color_temp = scipy.misc.imresize(im, [size[0] * multiplier, size[1] * multiplier], interp='bicubic') im_label = img_temp[:, :, 0] im_color = color_temp[:, :, 1:3] data = np.array(im_label).reshape([1, img.shape[0] * multiplier, img.shape[1] * multiplier, 1]) color = np.array(im_color) return data, color
im是转化到YCrCb空间下的图片,img是归一化的图片。
img_temp是放大之后的图片
color_temp是方法之后的归一化的图片
预测函数1
传入图片的路径和要保存的路径
# Initialization. images = tf.placeholder(tf.float32, [None, None, None, 1], name='images') model = SRCNN(images)
传给SRCNN的是一个一维的图片,我们只是训练一个灰度图片
with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print('Generating super-resolutioned image...') # Load the saved checkpoint. saver = tf.train.Saver() if load_ckpt(sess, ckpt_dir, saver): print('Successfully loaded checkpoint.') else: print('Failed to load checkpoint.')
加载训练的checkpoint
if os.path.isfile(path): test_data, test_label, color = prepare_data(path) print('test_data has shape:', test_data.shape, 'label has shape:', test_label.shape) print('color has shape:', color.shape)
传入这个路径,然后得到这个图片的测试集(灰度),以及何在一起的图片
# Generate super-resolutioned image. conv_out = model.eval({images: test_data}) conv_out = conv_out.squeeze() result_bw = revert(conv_out)#从归一化恢复 result = np.zeros([result_bw.shape[0], result_bw.shape[1], 3], dtype=np.uint8) result[:, :, 0] = result_bw result[:, :, 1:3] = color result = cv.cvtColor(result, cv.COLOR_YCrCb2RGB)# result经过经过卷积神经网络的图片 bicubic = scipy.misc.imresize(test_label, 1 / multiplier, interp='bicubic') bicubic = scipy.misc.imresize(bicubic, multiplier * 1.0, interp='bicubic') bicubic = cv.cvtColor(bicubic, cv.COLOR_BGR2RGB)# 二三插值法 # Save the image. save_path = os.path.join(save_dir, os.path.basename(path)) scipy.misc.imsave(save_path, result) bicubic_path = os.path.join(save_dir, 'bicubic_' + os.path.basename(path)) scipy.misc.imsave(bicubic_path, bicubic) print('Finished testing', path)# 分辨保存两种不同处理方式的图片