@DGMさん(神)がFile Exchangeに上げている”Image Manipulation Toolbox”に同名の関数が含まれています。
MIMT(MATLAB Image Manipulation Toolbox)は多様な入力パターンを持っています(普通はそうでもない)。MIMTの多くは画像のセル配列をサポートしていません。
一般的に、サイズの合わない画像の処理は要件定義されていない問題になると考えています。 そのため、MIMT のほとんどの機能は、画像をどのように配置し、埋め合わせ、切り取るかをユーザーに委ねています。とはいえ、imstacker()はこれらの制限の両方を解決することができる橋渡し役です。imstacker()は、画像のセル配列を受け取り、画像を共通のサイズになるよう切り取り/埋め合わせ/拡大縮小して、指定された方法で連結します。
A = imread('cameraman.tif');
S2 = imstacker(S1,'padding',0);
tiledpict = imtile(S2,[2 2]);
重力方向・サイズ合わせ・埋め合わせ・連結軸を設定できます。 デフォルトでは、サイズ合わせは’rigid’、各画像を最大サイズの画像に埋め合わせします。 'pout.tif'はフレーム幅を、'coins.png'はフレーム高を埋め合わせ、'tire.tif'は幅と高さ共に大きく埋め合わせしていることに注目です。'inscribe'のような拡大縮小モードを使えば、タイルの領域を有効に使うことができます。 試しに埋め合わせの色を変えてみましょう。
S2 = imstacker(S1,'fit','inscribe','padding',[0.8 0.2 0.5]);
tiledpict = imtile(S2,[2 2]);
imstacker()は、デフォルトでは4次元方向に連結しますが、1次元や2次元方向に連結することも可能です。上記の例が[1 4]のようなタイリングをした場合とは動作が異なります。 1 つの軸上でエッジ結合する際には軸外の埋め合わせのみが問題となるため、imstacker() は出力ジオメトリを4次元方向 に結合する場合とは異なる方法で計算します。
S2 = imstacker(S1,'fit','inscribe','padding',0);
tiledpict = imtile(S2,[1 4]);
tiledpict = imstacker(S1,'fit','inscribe','padding',0,'dim',2);
imstacker()は、実際には1軸のジオメトリ管理を意図したものですが、2次元のタイリングにも使用できます。
r1 = imstacker(S1(1:2),'fit','inscribe','padding',0,'dim',2);
r2 = imstacker(S1(3:4),'fit','inscribe','padding',0,'dim',2);
tiledpict = imstacker({r1 r2},'fit','inscribe','padding',0,'dim',1);
この2つのアプローチには、それぞれ用途と限界があります。