高清下采样到低清

import argparse
import numpy as np
import cv2
import os
from mmagic.datasets.transforms import RandomBlur, RandomResize, RandomNoise, RandomJPEGCompression,
RandomVideoCompression, DegradationsWithShuffle, Clip

from imgtrans import combine_img, show_img

class MyTransform:
def init(self, out_h=64, out_w=64):
self.random_blur = RandomBlur(
params=dict(
prob=0.9, # probability of applying this change
kernel_size=[3, 5, 7, 9, 11],
kernel_list=[
‘iso’, ‘aniso’, ‘generalized_iso’, ‘generalized_aniso’,
‘plateau_iso’, ‘plateau_aniso’, ‘sinc’
],
kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],
sigma_x=[0.2, 1.2], # Standard deviation range along the horizontal direction
sigma_y=[0.2, 1.2], # Standard deviation range along the vertical direction.
rotate_angle=[-3.1416, 3.1416],
beta_gaussian=[0.5, 4],
beta_plateau=[1, 2],
sigma_x_step=0.02, # Change sigma_x in range(-step, step) every step
sigma_y_step=0.02, # Change sigma_y in range(-step, step) every step
rotate_angle_step=0.31416,
beta_gaussian_step=0.05,
beta_plateau_step=0.1,
omega_step=0.0628),
keys=[‘img’])
self.random_video_compression = RandomVideoCompression(
params=dict(
prob=0.9,
codec=[‘libx264’, ‘h264’, ‘mpeg4’],
codec_prob=[1 / 3., 1 / 3., 1 / 3.],
bitrate=[1e4, 1e5]),
keys=[‘img’])
self.random_resize = RandomResize(
params=dict(
resize_mode_prob=[0.3, 0.4, 0.3], # up, down, keep
resize_scale=[0.5, 1.2],
resize_opt=[‘bilinear’, ‘area’, ‘bicubic’],
resize_prob=[1 / 3., 1 / 3., 1 / 3.],
resize_step=0.03, # random change scale for different images: [-resize_step, resize_step]
is_size_even=True), # if the size of image is even
keys=[‘img’])
self.random_noise = RandomNoise(
params=dict(
prob=0.9,
noise_type=[‘gaussian’, ‘poisson’],
noise_prob=[0.5, 0.5],
gaussian_sigma=[1, 10],
gaussian_gray_noise_prob=0.4,
poisson_scale=[0.05, 1.0],
poisson_gray_noise_prob=0.4,
gaussian_sigma_step=0.1,
poisson_scale_step=0.005),
keys=[‘img’])
self.random_jpeg_compression = RandomJPEGCompression(
params=dict(
prob=0.9,
quality=[55, 95],
quality_step=3),
keys=[‘img’])
self.degradations_with_shuffle = DegradationsWithShuffle(
degradations=[
# dict(
# type=‘RandomBlur’,
# params=dict(
# prob=0.9,
# kernel_size=[3, 5, 7, 9, 11],
# kernel_list=[‘sinc’],
# kernel_prob=[1],
# omega=[3.1416 / 3, 3.1416],
# omega_step=0.0628),
# ),
dict(
type=‘RandomResize’,
params=dict(
target_size=(out_h, out_w),
resize_opt=[‘bilinear’, ‘area’, ‘bicubic’],
resize_prob=[1 / 3., 1 / 3., 1 / 3.]),
),
],
keys=[‘img’])
self.clip = Clip(keys=[‘img’])

def update_out_size(self, out_h, out_w):
    self.degradations_with_shuffle = DegradationsWithShuffle(
        degradations=[
            # dict(
            #     type='RandomBlur',
            #     params=dict(
            #         prob=0.9,
            #         kernel_size=[3, 5, 7, 9, 11],
            #         kernel_list=['sinc'],
            #         kernel_prob=[1],
            #         omega=[3.1416 / 3, 3.1416],
            #         omega_step=0.0628),
            # ),
            dict(
                type='RandomResize',
                params=dict(
                    target_size=(out_h, out_w),
                    resize_opt=['bilinear', 'area', 'bicubic'],
                    resize_prob=[1 / 3., 1 / 3., 1 / 3.]),
            ),
        ],
        keys=['img'])
    # print('(Update output size: [{}, {}])'.format(out_h, out_w))

def forward(self, src_img):
    input_dict = {'img': [src_img]}
    output_dict = self.random_blur(input_dict)
    output_dict = self.random_resize(output_dict)
    output_dict = self.random_noise(output_dict)
    output_dict = self.random_jpeg_compression(output_dict)

    # output_dict = self.random_video_compression(output_dict)
    output_dict = self.random_blur(output_dict)
    output_dict = self.random_resize(output_dict)
    output_dict = self.random_noise(output_dict)
    output_dict = self.random_jpeg_compression(output_dict)

    output_dict = self.degradations_with_shuffle(output_dict)
    output_dict = self.clip(output_dict)
    return output_dict['img'][0]

def image_batch(src_dir, dst_dir, multi=2):
os.makedirs(dst_dir, exist_ok=True)
if src_dir[-1] != ‘/’:
src_dir += ‘/’
if dst_dir[-1] != ‘/’:
dst_dir += ‘/’
mt = MyTransform()
# 读取目录下的图像列表
file_names = os.listdir(src_dir)
file_num = str(len(file_names))
for i, item in enumerate(file_names):
# 读取图像
print(‘Processing ’ + str(i + 1) + ‘/’ + file_num + ’ : ’ + item)
origin = cv2.imread(src_dir + item)
h, w = origin.shape[:2]
mt.update_out_size(h // multi, w // multi)
out = mt.forward(origin)
# 保存图像,注意修改路径和名称
# dst_name = item.split(’.‘)[0] + ‘_x{}.’.format(multi) + item.split(’.‘)[1]
dst_name = item.split(’.‘)[0] + ‘.’ + item.split(’.')[1]
cv2.imwrite(dst_dir + dst_name, out)
return print(‘Finished!\n’)

def my_arguments(input_path=‘inputs/video/demo.mp4’,
output_path=‘results/video’,
multiple=4):
my_args = argparse.Namespace()
my_args.input = input_path
my_args.output = output_path
my_args.multiple = multiple

return my_args

if name == ‘main’:
# a_test_img = cv2.imread(‘…/inputs/00003.png’)
# mt = MyTransform()
# h, w = a_test_img.shape[:2]
# mt.update_out_size(h // 2, w // 2)
# output_img = mt.forward(a_test_img)
# display = combine_img(a_test_img, output_img)
# show_img(display)

# input_path = '../inputs/mytest_gt'
# output_path = './test_out'
# image_batch(input_path, output_path, 4)

# parser = argparse.ArgumentParser()
# parser.add_argument('-i', '--input', type=str, default='input', help='Input image or folder')
# parser.add_argument('-o', '--output', type=str, default='output', help='Output folder')
# parser.add_argument('--multiple', type=int, default=4, help='Down sampling multiple')
# args = parser.parse_args()
INPUT_PATH = r'/home/sunyingli/donghua_datasets/val_1080/00000001'
OUTPUT_PATH = r'/home/sunyingli/donghua_datasets/val_1080_540P_shao'
arguments = my_arguments(input_path=INPUT_PATH, output_path=OUTPUT_PATH, multiple=2)

image_batch(arguments.input, arguments.output, arguments.multiple)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值