二次元配列から特定形状の二次元配列を取り出す方法 (例 4x4 → 2x2x4等)
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
画像処理を行う一環で、以下のような二次元配列(画像)から特定サイズの配列抽出をfor loopを用いずに行いたいです。

上記のようなことはfor loopを利用すればできるのはわかりますが、これらをfor loopを用いずに抽出することは可能でしょうか?
4x4 を2x2x4のように。
0 commentaires
Réponse acceptée
Shunichi Kusano
le 27 Nov 2020
こんにちは。
もっといい方法があるかもしれませんが、im2col関数とreshape関数を組合わせる方法がわかりやすいかなと思いました。
A = [1 1 2 2;1 1 2 2;3 3 4 4;3 3 4 4]
im2col(A,[2 2],'distinct') % どういう出力になるか見てみてください
reshape(im2col(A,[2 2],'distinct'),[2 2 4]) % im2colの出力をさらに並べ替えて、ご所望の形にしています。
ただこのやり方ですと3次元目が1 3 2 4の順で出力される(行方向がデフォルトの優先順位)ので、もし1 2 3 4の順にしたい場合は、処理前に
A = A';
で転置することになるかなと思います。
3 commentaires
Akira Agata
le 28 Nov 2020
こんばんは。
たまたま別の方法を思いついたので、ご参考までに紹介します。
A = [1 1 2 2;1 1 2 2;3 3 4 4;3 3 4 4];
% 2×2の配列に分割
c = mat2cell(A,[2 2],[2 2]);
% 並べ替え
c = reshape(c,1,1,4);
% 数値配列に変換
B = cell2mat(c);
こちらも、このままではBの3次元目が1 3 2 4の順で出力されますので、もし1 2 3 4の順にしたい場合は、処理前に配列Aを転置させてみてください。
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!