Montage関数を​使って,任意の枚数の​連続画像を一つにまと​めることができません​.

プログラミング初心者です.
以下のコードで,選択したフォルダから連続番号の任意の枚数(8~20枚程度)のjpg形式画像を読み込み,一つの画像としてまとめたいと思っていますが,上手く行きません.
どこに問題があるのでしょうか..教えて頂けると大変助かります.
fileFolder = uigetdir(); % Open the selected folder
imds = imageDatastore(fullfile(fileFolder,'AT*')); % Select the all images in this folder
montage(imds)
指定するフォルダ(例 D:\Document\MATLAB\AT)の中には"AT01, AT02, AT03...."とラベリングされたjpg形式の画像ファイルが複数入っています.
どうぞよろしくお願いいたします.

4 Comments

Atsushi Ueno
Atsushi Ueno on 18 Nov 2021
問題ありません。montage関数による画像が並んで表示されます。
エラー表示などはありましたか?
Yoko
Yoko on 18 Nov 2021
ご回答ありがとうございます.
カキのエラーが表示されています.
*******************************
エラー: montage
1 番目の入力引数 I, BW, or RGB は次のタイプのいずれかにする必要があります:
uint8, double, uint16, logical, single, int16
指定されたタイプは matlab.io.datastore.ImageDatastore でした。
エラー: montage>parse_inputs (line 249)
validateattributes(varargin{1}, ...
エラー: montage (line 114)
[I,cmap,mSize,indices,displayRange,parent] = parse_inputs(varargin{:});
エラー: Montage (line 29)
montage(imds)
**********************************
おかしいですね。montage関数はイメージ データストアの入力も受け付けます。下記はmontage関数の一部抜粋です。if文の2番目(elseif)で引っ掛かるべき所、3番目(else)まで行ってますね。
I = varargin{1};
if iscell(I) || isstring(I)
nframes = numel(I);
elseif isa(I,'matlab.io.datastore.ImageDatastore')
nframes = numel(I.Files);
else
validateattributes(I, ...
{'uint8' 'double' 'uint16' 'logical' 'single' 'int16'}, {}, ...
nfukebane, 'I, BW, or RGB', 1);
条件に当てはまる画像が指定フォルダに有ればイメージ データストアが出力されますし、無ければエラーの為イメージ データストアが出力される前に止まってしまうはずなのですが...
fileFolder = pwd; % uigetdir(); % Open the selected folder
imds = imageDatastore(fullfile(fileFolder)); % Select the all images in this folder
isa(imds,'matlab.io.datastore.ImageDatastore')
ans = logical
1
Atsushi Ueno
Atsushi Ueno on 18 Nov 2021
montage関数について上記コメントは間違いないですが、適用されたのがR2018aでした。
従ってR2017b以前の MATLAB 及び Image Processing Toolbox ではイメージ データストアの入力を受け付けません。

Sign in to comment.

 Accepted Answer

Atsushi Ueno
Atsushi Ueno on 18 Nov 2021

0 votes

R2017b以前の MATLAB 及び Image Processing Toolbox ではmontage関数がイメージ データストアの入力を受け付けないので、イメージデータストアの代わりに、その中のファイル名(セル配列)をmontage関数に入力する事で問題が解消します。
fileFolder = uigetdir(); % Open the selected folder
imds = imageDatastore(fullfile(fileFolder,'AT*')); % Select the all images in this folder
montage(imds.Files); % imdsからimds.Filesに変更しました

1 Comment

Yoko
Yoko on 18 Nov 2021
おっしゃる通りでした!
MATLAB R2017bを使っております.
教えて頂いた変更で上手くいきました.
ありがとうございます!

Sign in to comment.

More Answers (0)

Products

Release

R2017b

Asked:

on 18 Nov 2021

Commented:

on 18 Nov 2021

Community Treasure Hunt

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

Start Hunting!