- 締切済み
MATLABでのwhile文の条件について
MATLABでのwhile文の条件について いつもお世話になっております。 MATLABでwhile文を用いる際、その条件として行列中の特定の次元の値が存在するかどうかという条件を用いたいと考えています。 例えばsize(a)=(10 10 50)のaという画像データを読む際に、a(:,:,1)から順番に読み込んでいって a(:,:,50)で自動に止まるようなwhile文を作りたいと考えています。 つまりこの場合は順番に読み込んでいって、a(:,:,51)が存在しないならばwhile文が終了するようなプログラムを行いたいと考えております。 for文を用いればすぐだとは思いますが、どのようなデータにも入力引数なしで応用が出来ないかと思いましてご質問させていただきました。 もし以上の条件を満たす適当な関数などございましたら、ご一報いただけたらと存じます。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Kules
- ベストアンサー率47% (292/619)
かなり前の質問なのでもう解決しているかもですが… もし読み込むファイルがどれなのか決まっているのであれば、 1つのフォルダに読み込む画像ファイルだけ入れておき、 D=dir(uigetdir); でそのフォルダを指定すれば Dがファイル数+2?(この+2は私も何なのかよくわかりません)行の 構造体配列になります。 ついでにこのDにはメンバとしてnameも入っているので、 a=zeros(10,10,length(D)-2); for k=1:length(D)-2; a(:,:,k)=imread(D(k).name); end; で全部読み込めると思います(ファイルの順番がどうなっているかはわかりません) 以上、ご参考までに。
- rabbit_cat
- ベストアンサー率40% (829/2062)
つまりaという変数に画像をたくさん読みたいということですか? while 画像がまだ存在するか a(:,:,end+1) = imread(filename); end みたいなことですかね? ただ、このプログラムは非常にメモリ効率が悪いですし、遅いです。 前もって、画像が何枚あるかを調べておいて、 a = zeros(xsize,ysize,zsize); みたいにメモリを一気に確保するのがmatlabでの王道のやり方です。
- rabbit_cat
- ベストアンサー率40% (829/2062)
正直、何がやりたいのかがわからないです。 for j=1:size(a,3) end では駄目な点をもう少し説明してください。
お礼
rabbit_cat様、 ご返答ありがとうございます。 現在、MRIデータのような3次元の画像データ(x,y:座標、z:枚数)を読み込みたいと思っているのですが、 そのとき例えばimreadのみでは1枚分の画像しか読み込まれません。 そのためwhile文もしくはfor文を用いて500枚近くの画像データを一度に読み込みたいと思っております。 しかし読み込む前の時点ではaのサイズ(枚数方向のサイズ)が分かっていないためfor文では難しかったです。 前もって枚数を指定すればfor文で問題なく読み込みが行えると思いますが、枚数が常に一定のデータとは限らないため、枚数を指定しなくても正常に読み込みを行ってくれるプログラムを書きたいと思っておりました。 拙い文章で申し訳ありません。
お礼
rabbit_cat様、 はい、その様なプログラムを考えておりました。 ですがやはり前もって枚数を入力するほうがいいみたいですね! ありがとうございました^^大変勉強になりました! もしまた何かありましたらよろしくお願い致します。