标题 Matlab图像顺序裁剪与顺序恢复
在跑超分辨率算法过程中,由于显存限制可能需要先将图片裁剪在将其拼接回去,于是自己简单的写了两个程序,供自己使用,上传到CSDN也是方便自己查阅,如有侵权请联系我,我加引用(狗头保命)。
顺序裁剪代码
clear,clc;close all;
file_path = 'F:\matlab2020\bin\CCN\';% 图像文件夹路径
%save_path1= 'F:\matlab2020\MACV3\';
save_path= 'F:\music\';
img_path_list = dir(file_path,'jpg');%获取该文件夹中所有jpg格式的图像
img_num = length(img_path_list);%获取图像总数量
if img_num > 0
for k = 1:img_num
image_name = img_path_list(k).name;% 图像名
B = imread(strcat(file_path,image_name));
fprintf('%d %s\n',k,strcat(file_path,image_name));
B = im2double(B); %将图像读取为double类型
[M, N, C] = size(B); %获取图像的大小
m = 228; %每张小图的宽(行)
n = 261;%每张小图的长(列)
count = 0; %计数
for i = 1:M/m
for j = 1:N/n
block = B((i-1)*m+1 : i*m, (j-1)*n+1 : j*n, :); %生成小图
%加上下面的代码可处理高光谱图像
%block = uint8(B(:,:,1:3) / 4);%处理高光谱图像
%temp = block(:,:,1);%bgr to rgb
%block(:,:,1) = block(:,:,3);
%block(:,:,3) = temp;
%block = block;
if count < 10%后面都是命名的东西了
imwrite(block,[save_path,strcat(image_name( ...
1:end-8),num2str(00),num2str(count+1)),'x4','.png'])
else
imwrite(block,[save_path,strcat(image_name( ...
1:end-9),num2str(0),num2str(count+1)),'x4','.png'])
end
count = count + 1; %计数加一
end
end
end
end
顺序拼接代码:
clear
clc
close all
file_path = 'F:\music\';%需要拼图的图像放在file_path中
save_path = 'F:\matlab2020\';%你要将拼好的图放在哪里
list = dir(strcat(file_path,'*.png'));%列出png格式图片
num = length(list);
if num > 0
count = 0;
A = zeros(912*4,1044*4,3);%(M,N,C)取决于原图的大小生成全黑图
for i=1:4
for j=1:4
image_name = list(count+1).name;
B = imread(strcat(file_path,image_name));%读取图片
fprintf('%d %s\n',count,strcat(file_path,image_name));%显示正在处理的图片
B = im2double(B); %将图像读取为double类型
A((i-1)*912+1:i*912,(j-1)*1044+1:j*1044,:)= B;%拼图过程实际上就是
%将小图变成矩阵在存储到全黑图模板中
count = count + 1;
end
end
imwrite(A,[save_path,strcat('ok','x4','.png')]);%命名为okx4.png
end
水平有限,如有错误,还请大佬们不灵赐教,谢谢大家!