超分辨率重建数据集制作:生成低分辨率数据集

目录

背景

代码

结果

 其他


注意:

超分主流有两种BI、BD。

1.实际上公认的是使用MATLAB进行插值

2.Bicubic(双三次插值)方式。(BI方式

3.高斯模糊+双三次插值是另一种常用方式(BD方式)。

4.目前有使用Python实现的上述BI、BD,但或多或少还是有差异。

这里python实现必定和matlab实现之间有差别,使用时注意。

(希望你务必看一下这一篇文章:图像/视频超分之降质过程)(我写一篇相关的文章,补充一下前者未说明的引文部分图像超分辨率数据集这一篇足够了,你需要注意什么?_Alocus_的博客-CSDN博客

1.背景

超分辨率重建任务需要高清和对应的低质图像。由于需要自己制作超分辨率重建数据集,需要将高分辨率图像制作为低分辨率图像,我根据网上代码,按照我的需要(高斯模糊和双三次插值,基于OPENCV)进行了构造。

2.代码

可运行代码如下:(修改输入和输出路径 ,直接运行即可,路径需要英文)

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)
    #cv2.GaussianBlur(hr_img, (0,0), 1, 1)   其中模糊核这里用的0。两个1分别表示x、y方向的标准差。 可以具体查看该函数的官方文档。
    #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_6x = 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)

3.结果

我的目录以及最后生成的截图

 

 

 

 4.其他

另外我在前期采集图像以及制作的过程中,需要从pdf中截取图像,以及对图像进行裁剪,裁剪后需要裁剪为2,3,4的倍数,且其中宽或者高需要为2040像素,请查看我的另外文章:

超分辨率重建数据集制作:高分辨率图像采集(从pdf中获取图像)_Alocus的博客-CSDN博客

用双三次插值bicubic生成高分辨率图像的代码,可用于论文中的对照实验

超分辨率重建双三次插值上采样生成高分辨率图像_Alocus_的博客-CSDN博客

通过MATLAB公认利用bicubic生成低分辨率(BI)方法,公认的模糊(BD)方法,公认的模糊和下采样DN方法。实现代码汇总:

超分辨率重建生成低分辨率图像,生成降质图像公认方法代码_Alocus_的博客-CSDN博客

  • 22
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alocus_

如果我的内容帮助到你,打赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值