目录
背景
超分辨率重建任务需要高清和对应的低质图像。由于需要自己制作超分辨率重建数据集,需要将高分辨率图像按照公认的方式(DIV2k)制作为低分辨率图像,我根据网上代码进行了改造
可运行代码如下:(修改输入和输出路径 ,直接运行即可,路径需要英文)
代码
import os
import argparse
import cv2
#parse args
parser = argparse.ArgumentParser(description='Downsize images at 2x using bicubic interpolation')
parser.add_argument("-k", "--keepdims", help="keep original image dimensions in downsampled images", action="store_true")
parser.add_argument('--hr_img_dir', type=str, default=r'C:\Users\Administrator\Desktop\input',
help='path to high resolution image dir')
parser.add_argument('--lr_img_dir', type=str, default=r'C:\Users\Administrator\Desktop\result',
help='path to desired output dir for downsampled images')
args = parser.parse_args()
hr_image_dir = args.hr_img_dir
lr_image_dir = args.lr_img_dir
print(args.hr_img_dir)
print(args.lr_img_dir)
#create LR image dirs
os.makedirs(lr_image_dir + "/X2", exist_ok=True)
os.makedirs(lr_image_dir + "/X3", exist_ok=True)
os.makedirs(lr_image_dir + "/X4", exist_ok=True)
os.makedirs(lr_image_dir + "/X6", exist_ok=True)
supported_img_formats = (".bmp", ".dib", ".jpeg", ".jpg", ".jpe", ".jp2",
".png", ".pbm", ".pgm", ".ppm", ".sr", ".ras", ".tif",
".tiff")
#Downsample HR images
for filename in os.listdir(hr_image_dir):
if not filename.endswith(supported_img_formats):
continue
name, ext = os.path.splitext(filename)
#Read HR image
hr_img = cv2.imread(os.path.join(hr_image_dir, filename))
hr_img_dims = (hr_img.shape[1], hr_img.shape[0])
#Blur with Gaussian kernel of width sigma = 1
hr_img = cv2.GaussianBlur(hr_img, (0,0), 1, 1)
#Downsample image 2x
lr_image_2x = cv2.resize(hr_img, (0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
if args.keepdims:
lr_image_2x = cv2.resize(lr_image_2x, hr_img_dims, interpolation=cv2.INTER_CUBIC)
cv2.imwrite(os.path.join(lr_image_dir + "/X2", filename.split('.')[0]+'x2'+ext), lr_image_2x)
#Downsample image 3x
lr_img_3x = cv2.resize(hr_img, (0, 0), fx=(1 / 3), fy=(1 / 3),
interpolation=cv2.INTER_CUBIC)
if args.keepdims:
lr_img_3x = cv2.resize(lr_img_3x, hr_img_dims,
interpolation=cv2.INTER_CUBIC)
cv2.imwrite(os.path.join(lr_image_dir + "/X3", filename.split('.')[0]+'x3'+ext), lr_img_3x)
# Downsample image 4x
lr_img_4x = cv2.resize(hr_img, (0, 0), fx=0.25, fy=0.25,
interpolation=cv2.INTER_CUBIC)
if args.keepdims:
lr_img_4x = cv2.resize(lr_img_4x, hr_img_dims,
interpolation=cv2.INTER_CUBIC)
cv2.imwrite(os.path.join(lr_image_dir + "/X4", filename.split('.')[0]+'x4'+ext), lr_img_4x)
# Downsample image 6x
lr_img_6x = cv2.resize(hr_img, (0, 0), fx=1/6, fy=1/6,
interpolation=cv2.INTER_CUBIC)
if args.keepdims:
lr_img_4x = cv2.resize(lr_img_6x, hr_img_dims,
interpolation=cv2.INTER_CUBIC)
cv2.imwrite(os.path.join(lr_image_dir + "/X6", filename.split('.')[0]+'x6'+ext), lr_img_6x)
结果
我的目录以及最后生成的截图
其他
另外我在前期采集图像以及制作的过程中,需要从pdf中截取图像,以及对图像进行裁剪,裁剪后需要裁剪为2,3,4的倍数,且其中宽或者高需要为2040像素,请查看我的另外文章:
超分辨率重建数据集制作:高分辨率图像采集(从pdf中获取图像)_Alocus的博客-CSDN博客