• 締切済み

MATLABで連続した画像の取り込み方

1つのJPGファイルを取り込み、表示させるやり方は I = imread('sample000.jpg'); imshow(I) これででき、作業を書くと for t=1:1:10 if(t==1) A=imread('sample000.jpg'); imshow(A) hold on [xa, ya]=textread('sample01.txt','%d %d','headerlines',10); end plot(xa(t,1), ya(t,1), 'r+'); if(t==10) hold off end end ということになります。 10回ループさせるのは、sample01.txtの10行目以降の中身が10個ずつの座標だからです 以下はsample01.txtの中身を簡単に書いたものです ...         ※9行目 test coordinates  ※10行目 44 54        ※11行目 45 46 53 43 55 41 58 38 61 33 66 36 69 41 72 47 73 52        ※20行目 10         ※21行目 46 54        ※22行目 48 52 ... ... 77 51        ※31行目 10         ※32行目 47 52        ※33行目 ... ... という感じです。 で、本題ですが sample000.jpg sample001.jpg sample002.jpg ... ... など複数のjpgファイルをループを使って連続して取り込み、作業したいときは、どういうコマンドでどういうループを作ればいいでしょうか? 具体的には 1枚目のsample000.jpgファイルを読み込みhold on、sample01.txtの11行目から20行目の座標を赤い点でプロットし、最後にhold off 2枚目のsample001.jpgファイルを読み込みhold on、sample01.txtの22行目から31行目の座標を赤い点でプロットし、最後にhold off 3枚目の... というループです。 下手な説明でごめんなさい、誰かMATLABの画像処理に詳しい方がいたら応答よろしくおねがいします。

みんなの回答

  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.2

#1です. 9行目が間違いでした. × plot(xa(plotCounter+jpegCounter*11,1), ya(plotCounter,1), 'r+'); ○ plot(xa(plotCounter+jpegCounter*11,1), ya(plotCounter+jpegCounter*11,1), 'r+'); 失礼しました.

  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

こんにちは. ご質問の状況の場合,ループの中でsprintf関数を使用して,連番ファイル名を生成すれば良いでしょう. sprintf文の中の「%0?d」は?-1桁以下の数値変換の場合,頭に「0」を補完してくれる指示です. (sprintf関数の詳細についてはヘルプを参照,もしくはコマンドライン上で「help sprintf」してください) [xa, ya]=textread('sample01.txt','%d %d','headerlines',10); for jpegCounter = 0:1:5  str = sprintf('sample%03d.jpg',jpegCounter);  A = imread(str);  imshow(A);  hold on  for plotCounter = 1:1:10   plot(xa(plotCounter+jpegCounter*11,1), ya(plotCounter,1), 'r+');  end  hold off end (※デバッグはしていないので,このままでは動かない可能性大です 特にテキストのフォーマットがよく分からなかったので,そこは考慮していません. とりあえず動かなかったらtextreadとplotを外して,ちゃんと連番jpegが読めていることだけ確認してください) 後,細かいことですが,ループの中に入れるべき物,出すべき物はきちんと考えた方がよいです. imread・imshowをプロットと同じループの中に入れて最初の一回目かif文で判定するぐらいなら, ループの前に持ってきた方がよいです. 以上,参考になれば幸いです.

関連するQ&A