Matlab影象順序裁剪與順序恢復(rg和高光譜均適用)
阿新 • • 發佈:2020-12-10
標題 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
水平有限,如有錯誤,還請大佬們不靈賜教,謝謝大家!