画像データをブロックに分割したい。たとえば、X マトリックスが 4*4 の場合、結果を 2*2*2*2 のマトリックス M にしたい。M(1,1,:,:) =X(1:2,1:2) および M(1,2,:,:)=X(1:2,3:4) など
mat2cell を使用してセル配列に分割する方法を見つけましたが、セル配列は matlab ではあまりサポートされていないようです。SO を検索して、通常の行列で簡単に実行できることを行うように依頼します (使用しないことを示唆する回答が得られます)。 cell 配列はまったくありません)。
私はネットとSOを徹底的に検索しました.多くの結果があり、それらすべてが特定の問題を解決するか(ここでは望ましくない方程式の解を見つけるなど)、またはmat2cellを提案することになります.
私が見つけた最も近い結果はreshapeを使用していますreshape(X,[2 2 2 2])
.C = 2 * 2 * 2 * 2行列を試してみましたが、C(1,1,:,:)は最初のブロックではなくXの最初の行のようで、できます次に何をすべきかわかりません。
誰かが提案しpermute(C,[1 2 3 4])
ましたが、私はまだ私が望む結果を得ていません。
私はまだ matlab の初心者なので、質問が単純である場合はご容赦ください。また、for ループは必要ありません。ベクトル コードが必要です。
編集
その重複した質問の答えを試しましたが、それでも希望する結果が得られません。これらを試しました:
A=ones(40,40);
A(1:10,1:10)=32*ones(10,10);
A(11:20,1:10)=zeros(10,10);
T = permute(reshape(A, size(A, 1), 10, []), [2 1 3]);
T = permute(reshape(T, 10, 10, [], size(T, 3)), [2 1 3 4]);
T は 10*10*4*4 で、まさに私が望むサイズ (40*40 をそれぞれ 4*4 のサブマトリックスのマトリックスに) でしたが、値が間違っています。T(1,1,:,:)~=A(1:4,1:4)
ここで何が間違っていますか?