R2016aでimt​ileのようなタイリ​ング機能のイメージ表​示関数はありますでし​ょうか。

5 views (last 30 days)
KO
KO on 17 Sep 2021
Commented: KO on 20 Sep 2021
R2016aでimtileのようなタイリング機能のイメージ表示関数はありますでしょうか。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 17 Sep 2021
Edited: Atsushi Ueno on 18 Sep 2021
@DGMさん(神)がFile Exchangeに上げている”Image Manipulation Toolbox”に同名の関数が含まれています。
作者ご本人から頂いた説明コメントを下記に翻訳します(ポイント①:TMW謹製のimtile()と違い、MIMTのimtile()マルチフレームイメージのみサポートしますが、他形式のデータ(ファイル名・イメージのリスト・イメージ データ ストア)を別の関数で変換すればimtile()に入力可能となり、結果TMW謹製のimtile()と同様に動かせます。イメージのリストマルチフレームイメージに変換するimstacker()関数についてご説明頂きました) (ポイント②:タイリング方法が1*nやn*1の場合は、imtile()を用いなくても、imstacker()の積層方向を変更すれば直接タイリングした画像を生成可能です)
MIMT(MATLAB Image Manipulation Toolbox)は多様な入力パターンを持っています(普通はそうでもない)。MIMTの多くは画像のセル配列をサポートしていません。
一般的に、サイズの合わない画像の処理は要件定義されていない問題になると考えています。 そのため、MIMT のほとんどの機能は、画像をどのように配置し、埋め合わせ、切り取るかをユーザーに委ねています。とはいえ、imstacker()はこれらの制限の両方を解決することができる橋渡し役です。imstacker()は、画像のセル配列を受け取り、画像を共通のサイズになるよう切り取り/埋め合わせ/拡大縮小して、指定された方法で連結します。
A = imread('cameraman.tif'); % サイズの異なる4枚の単色画像
B = imread('tire.tif');
C = imread('pout.tif');
D = imread('coins.png');
S1 = {A B C D}; % 一つのセル配列に含める
S2 = imstacker(S1,'padding',0); % 4次元方向に敷詰/積層する
tiledpict = imtile(S2,[2 2]); % 1枚の画像にタイリングする
imshow(tiledpict);
重力方向・サイズ合わせ・埋め合わせ・連結軸を設定できます。 デフォルトでは、サイズ合わせは’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]); % 1枚の画像にタイリングする
imshow(tiledpict);
imstacker()は、デフォルトでは4次元方向に連結しますが、1次元や2次元方向に連結することも可能です。上記の例が[1 4]のようなタイリングをした場合とは動作が異なります。 1 つの軸上でエッジ結合する際には軸外の埋め合わせのみが問題となるため、imstacker() は出力ジオメトリを4次元方向 に結合する場合とは異なる方法で計算します。
% 画像の積層は4次元方向、タイリングは2次元(列)方向
S2 = imstacker(S1,'fit','inscribe','padding',0);
tiledpict = imtile(S2,[1 4]);
imshow(tiledpict);
% 画像の積層を2次元(列)方向に実施(即ち=タイリングなのでimtile無しでOK)
tiledpict = imstacker(S1,'fit','inscribe','padding',0,'dim',2);
imshow(tiledpict);
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);
imshow(tiledpict);
この2つのアプローチには、それぞれ用途と限界があります。
  4 Comments
Atsushi Ueno
Atsushi Ueno on 18 Sep 2021
@DGM Thanks to the MIMT author for his direct explanation!
@KOさん:なんと!神様直伝のコメントを頂きましたよ!私の回答はImage Manipulation Toolboxの使い方を熟知せずに説明しようとしたあまりに稚拙な回答なので削除し、頂いたコメントを日本語で説明する回答を追記します。
KO
KO on 20 Sep 2021
@Atsushi Ueno様、こんな素人の僕のためにここまで時間を割いてくださり本当にありがとうございます。上野様も僕からしたら神のような存在です。ぜひDGMさんのような高みを目指してください。

Sign in to comment.

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 17 Sep 2021
R2006a より前に導入なのでR2016aでも動作しますが、別途Image Processing Toolboxが必要です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!