首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

超分辨率重建生成低分辨率图像,生成降质图像公认方法代码

  • 25-03-03 05:22
  • 2179
  • 13285
blog.csdn.net

目录

1背景

2.BI

3.BD

4.DN

5总结


1背景

超分辨率重建中经典的生成降质图像通常使用MATLAB实现的,通常有四种方法:

类型说明
BIbicubic-down
BDblur-down
BNbicubic-down+noise
DNblur-down+noise

其中最常用的是BI,其次是BD,最后是DN。那我将其公认实现和出处总结起来,供大家参考。

注:在一些数据集中由于尺寸问题不能够被下采样的倍率所整除,导致生成数据用于训练测试时会出现很多麻烦,因此注意裁剪其大小。详细见下面代码。

注:关于其Python实现,可同时参考链接 图像/视频超分之降质过程和我的总结图像超分辨率数据集这一篇足够了,你需要注意什么?_Alocus_的博客-CSDN博客_图像超分辨率数据集

2.BI

 下面是通过MATLAB公认利用bicubic生成低分辨率(BI)方法,摘自xinntao大大

https://github.com/XPixelGroup/BasicSR/blob/479ec97e8a23e49cc559c081f8ff80eac1bc5989/scripts/matlab_scripts/generate_bicubic_img.mhttps://github.com/XPixelGroup/BasicSR/blob/479ec97e8a23e49cc559c081f8ff80eac1bc5989/scripts/matlab_scripts/generate_bicubic_img.m

  1. function generate_bicubic_img()
  2. %% matlab code to genetate mod images, bicubic-downsampled images and
  3. %% bicubic_upsampled images
  4. %% set configurations
  5. % comment the unnecessary lines
  6. input_folder = '../../datasets/Set5/original';
  7. save_mod_folder = '../../datasets/Set5/GTmod12';
  8. save_lr_folder = '../../datasets/Set5/LRbicx2';
  9. % save_bic_folder = '';
  10. mod_scale = 12;
  11. up_scale = 2;
  12. if exist('save_mod_folder', 'var')
  13. if exist(save_mod_folder, 'dir')
  14. disp(['It will cover ', save_mod_folder]);
  15. else
  16. mkdir(save_mod_folder);
  17. end
  18. end
  19. if exist('save_lr_folder', 'var')
  20. if exist(save_lr_folder, 'dir')
  21. disp(['It will cover ', save_lr_folder]);
  22. else
  23. mkdir(save_lr_folder);
  24. end
  25. end
  26. if exist('save_bic_folder', 'var')
  27. if exist(save_bic_folder, 'dir')
  28. disp(['It will cover ', save_bic_folder]);
  29. else
  30. mkdir(save_bic_folder);
  31. end
  32. end
  33. idx = 0;
  34. filepaths = dir(fullfile(input_folder,'*.*'));
  35. for i = 1 : length(filepaths)
  36. [paths, img_name, ext] = fileparts(filepaths(i).name);
  37. if isempty(img_name)
  38. disp('Ignore . folder.');
  39. elseif strcmp(img_name, '.')
  40. disp('Ignore .. folder.');
  41. else
  42. idx = idx + 1;
  43. str_result = sprintf('%d\t%s.\n', idx, img_name);
  44. fprintf(str_result);
  45. % read image
  46. img = imread(fullfile(input_folder, [img_name, ext]));
  47. img = im2double(img);
  48. % modcrop
  49. img = modcrop(img, mod_scale);
  50. if exist('save_mod_folder', 'var')
  51. imwrite(img, fullfile(save_mod_folder, [img_name, '.png']));
  52. end
  53. % LR
  54. im_lr = imresize(img, 1/up_scale, 'bicubic');
  55. if exist('save_lr_folder', 'var')
  56. imwrite(im_lr, fullfile(save_lr_folder, [img_name, '.png']));
  57. end
  58. % Bicubic
  59. if exist('save_bic_folder', 'var')
  60. im_bicubic = imresize(im_lr, up_scale, 'bicubic');
  61. imwrite(im_bicubic, fullfile(save_bic_folder, [img_name, '.png']));
  62. end
  63. end
  64. end
  65. end
  66. %% modcrop
  67. function img = modcrop(img, modulo)
  68. if size(img,3) == 1
  69. sz = size(img);
  70. sz = sz - mod(sz, modulo);
  71. img = img(1:sz(1), 1:sz(2));
  72. else
  73. tmpsz = size(img);
  74. sz = tmpsz(1:2);
  75. sz = sz - mod(sz, modulo);
  76. img = img(1:sz(1), 1:sz(2),:);
  77. end
  78. end

3.BD

 下面是通过MATLAB使用公认的模糊(BD)方法生成低分辨率代码。摘自RDN

https://github.com/yulunzhang/RDN/blob/master/RDN_TrainCode/Prepare_TrainData/Prepare_TrainData_HR_LR_BD.mhttps://github.com/yulunzhang/RDN/blob/master/RDN_TrainCode/Prepare_TrainData/Prepare_TrainData_HR_LR_BD.m

  1. function Prepare_TrainData_HR_LR_BD()
  2. %% settings
  3. path_save = './DIV2K';
  4. path_src = './DIV2K/DIV2K_HR';
  5. ext = {'*.jpg','*.png','*.bmp'};
  6. filepaths = [];
  7. for i = 1 : length(ext)
  8. filepaths = cat(1,filepaths, dir(fullfile(path_src, ext{i})));
  9. end
  10. nb_im = length(filepaths);
  11. DIV2K_HR = [];
  12. for idx_im = 1:nb_im
  13. fprintf('Read HR :%d\n', idx_im);
  14. ImHR = imread(fullfile(path_src, filepaths(idx_im).name));
  15. DIV2K_HR{idx_im} = ImHR;
  16. end
  17. %% generate and save LR via imresize() with Bicubic
  18. kernelsize = 7;
  19. sigma = 1.6;
  20. for IdxIm = 1:nb_im
  21. fprintf('IdxIm=%d\n', IdxIm);
  22. ImHR = DIV2K_HR{IdxIm};
  23. ImLRx3 = imresize_BD(ImHR, 3, kernelsize, sigma);
  24. % name image
  25. digit = IdxIm;
  26. fileName = num2str(IdxIm);
  27. while digit < 1000
  28. fileName = ['0', fileName];
  29. digit = digit*10;
  30. end
  31. FolderLRx3 = fullfile(path_save, 'DIV2K_LR_bicubic', 'X3');
  32. if ~exist(FolderLRx3)
  33. mkdir(FolderLRx3)
  34. end
  35. NameLRx3 = fullfile(FolderLRx3, [fileName, 'x3BD.png']);
  36. % save image
  37. imwrite(ImLRx3, NameLRx3, 'png');
  38. end
  39. end
  40. function ImLR = imresize_BD(ImHR, scale, kernelsize, sigma)
  41. % ImLR and ImHR are uint8 data
  42. % downsample by Bicubic
  43. kernel = fspecial('gaussian',kernelsize,sigma);
  44. blur_HR = imfilter(ImHR,kernel,'replicate');
  45. ImLR = imresize(blur_HR, 1/scale, 'nearest');
  46. end

4.DN

下面是DN的 MATLAB实现

  1. function Prepare_TrainData_HR_LR_DN()
  2. %% settings
  3. path_save = './DIV2K';
  4. path_src = './DIV2K/DIV2K_HR';
  5. ext = {'*.jpg','*.png','*.bmp'};
  6. filepaths = [];
  7. for i = 1 : length(ext)
  8. filepaths = cat(1,filepaths, dir(fullfile(path_src, ext{i})));
  9. end
  10. nb_im = length(filepaths);
  11. DIV2K_HR = [];
  12. for idx_im = 1:nb_im
  13. fprintf('Read HR :%d\n', idx_im);
  14. ImHR = imread(fullfile(path_src, filepaths(idx_im).name));
  15. DIV2K_HR{idx_im} = ImHR;
  16. end
  17. %% generate and save LR via imresize() with Bicubic
  18. sigma = 30; % noise level
  19. for IdxIm = 1:nb_im
  20. fprintf('IdxIm=%d\n', IdxIm);
  21. ImHR = DIV2K_HR{IdxIm};
  22. ImLRx3 = imresize_DN(ImHR, 3, sigma);
  23. % name image
  24. digit = IdxIm;
  25. fileName = num2str(IdxIm);
  26. while digit < 1000
  27. fileName = ['0', fileName];
  28. digit = digit*10;
  29. end
  30. FolderLRx3 = fullfile(path_save, 'DIV2K_LR_bicubic', 'X3');
  31. if ~exist(FolderLRx3)
  32. mkdir(FolderLRx3)
  33. end
  34. NameLRx3 = fullfile(FolderLRx3, [fileName, 'x3DN.png']);
  35. % save image
  36. imwrite(ImLRx3, NameLRx3, 'png');
  37. end
  38. end
  39. function ImLR = imresize_DN(ImHR, scale, sigma)
  40. % ImLR and ImHR are uint8 data
  41. % downsample by Bicubic
  42. ImDown = imresize(ImHR, 1/scale, 'bicubic'); % 0-255
  43. ImDown = single(ImDown); % 0-255
  44. ImDownNoise = ImDown + single(sigma*randn(size(ImDown))); % 0-255
  45. ImLR = uint8(ImDownNoise); % 0-255
  46. end

5总结

关于Python实现,以及详细信息,我还是想建议大家参考这边文章,总结的很不错,感谢稳扎那股作者以及参考文献中的作者们的贡献。!

图像/视频超分之降质过程

文章知识点与官方知识档案匹配,可进一步学习相关知识
OpenCV技能树首页概览26360 人正在系统学习中
注:本文转载自blog.csdn.net的Alocus_的文章"https://blog.csdn.net/Crystal_remember/article/details/124935720"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top