簡體   English   中英

使用Matlab將3d矩陣轉換為4d矩陣

[英]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按列主要順序選擇元素,因此您可能必須編寫復雜的代碼才能使其工作。 而不是去用的方式permutereshape創造四維矩陣,並可能運行到一個內存不足的問題,我會建議使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM