[英]convert 3d matrix to 4d matrix using matlab
我有尺寸為400 x 500的2D矩陣,每個矩陣都顯示一張圖片。 我的過程包含2個步驟:
1)我必須對這些圖像進行分區(將矩陣拆分為相等大小的子矩陣)
2)我必須將每個拆分保存在一個矩陣中
第一步完成,矩陣的尺寸從2D-> 3D改變(最后一個索引顯示拆分的索引)
現在對於第2步,我有100張圖像,並且我想要有4個維度的矩陣,最后一個索引顯示圖像的數量
樣本:用於訪問圖像40的第3部分: [:,:,3,40]
我已經嘗試使用排列和重塑,但未成功
這是我的代碼
nCol = 10;
nRow = 4;
K=dir(p);
Len=length(K);
for i=3:Len
x1=imread(strcat(p,'\',K(i).name));
[m,n,d1]=size(x1);
if d1==1
x=double(x1);
else
x=double(rgb2gray(x1));
end
x=imresize(x,NN);
%% determined width and height of divided matrix %%%%%%%%%%%%%%%%%%%%%%%%%%
m = size(x,1)/nRow;
n = size(x,2)/nCol;
T = permute(reshape(permute(reshape(x, size(x, 1), n, []), [2 1 3]), n, m, []), [2 1 3]);
Im=[Im T(:,:,:,i-2)];
end
任何想法將不勝感激。
reshape
按列主要順序選擇元素,因此您可能必須編寫復雜的代碼才能使其工作。 而不是去用的方式permute
和reshape
創造四維矩陣,並可能運行到一個內存不足的問題,我會建議使用mat2cell
到你的矩陣划分為單元陣列,因為mat2cell
分裂像你這樣的矩陣將要拆分圖片。
在這里我展示一個帶有圖像的例子
RGB = imread('peppers.png');
x = rgb2gray(RGB); % x is a 384 x 512 matrix, we want to split in 3 rows and 2 columns
x2 = mat2cell(x,384*ones(3,1)/3,512*ones(2,1)/2); % 2D cell array, each cell holds a part of the image
imshow(x2{1,1}) % Top left part of the image
您可以遍歷所有圖像並創建一個3D單元陣列,其中陣列中的每一層都代表將每個圖像分成幾部分。 我建議您預先分配數組並在循環內的正確層中分配矩陣,而不是逐漸增加矩陣的大小。
似乎還有一個圖像處理工具箱特定的功能來執行您要嘗試的操作:檢查此: 如何在MATLAB中將圖像划分為塊?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.