質問: 二次元配列から特定形状の二次元配列を取り出す方法 (例 4x4 → 2x2x4等) 画像処理を行う一環で、以下のような二次元配列(画像)から特定サイズの配列抽出をfor loopを用いずに行いたいです。 上記のようなことはfor loopを利用すればできるのはわかりますが、これらをfor loopを用いずに抽出することは可能でしょうか? 4x4 を2x2x4のように。
回答: こんにちは。 もっといい方法があるかもしれませんが、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'; で転置することになるかなと思います。