for文の書き方

조회 수: 1 (최근 30일)
hiro
hiro 2020년 11월 30일
댓글: hiro 2020년 12월 4일
I1 = imread('img001.jpg');
BW1 = edge(I1, 'Canny');
NZ1 = BW1.^2;
BT1 = NZ1(:);
SM1 = sum(BT1);
'img001.jpg'は、白黒画像です。上記のように、白黒画像を読み取り、キャニー法でエッジを検出し、検出したエッジ画像(BW1)の各要素を二乗しました。そして、行列の形だったNZ1を縦長の1つのベクトル(BT1)に変換し、BT1の要素を全部合計して1つのスカラー値としてSM1を出力しました。
これを'img002.jpg', 'img003.jpg', ・・・, 'img010.jpg', ・・・, 'img100.jpg', ・・・, 'imgN.jpg'のようにN個まとめて行いたいのですがどのようにコードを書けば良いのかご教示いただきたいです。
また、出力されたSM1~SMNのスカラー値のうち、値が大きい順に上位30個を抜き出し、それと対応する30個の白黒画像だけを読み込んで30フレームの1つの動画にするコードの書き方もご教示いただけたら幸いです。

채택된 답변

Hiroshi Miyagawa
Hiroshi Miyagawa 2020년 12월 1일
まずは以下をご参照ください。
ImageFileName = {...
'sampleImage1.jpg',...
'sampleImage2.jpg',...
'sampleImage3.jpg',...
'sampleImage4.jpg',...
}
%
for ii = 1:4
Image = imread(ImageFileName{ii});
BW = edge(Image,'Canny');
NZ = BW.^2;
BT = NZ(:);
SM(ii) = sum(BT);
end
  댓글 수: 3
Hiroshi Miyagawa
Hiroshi Miyagawa 2020년 12월 1일
参考リンク先をたどるとサンプルコードが載ってますので、具体的かと存じます。
頑張ってモノにしてください!
hiro
hiro 2020년 12월 4일
参考になりました! ありがとうございました!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hiroshi Miyagawa
Hiroshi Miyagawa 2020년 12월 1일
名前が異なる複数要素(ファイル名など)に対して同様の処理をしたい場合、タイトルにあるように for文が便利です。
以下のページご参考にしてみてください。
また、ご質問にあるその後の処理については、以下が参考になると思います。
配列にインデックスをつける:
並び替え:
ムービーフレームの作成:
  댓글 수: 1
hiro
hiro 2020년 12월 1일
편집: hiro 2020년 12월 1일
Hiroshi Miyagawa様
ご回答ありがとうございます。 貼っていただいたページを参考にさせていただいて、for文やそのあとの処理についていろいろ試してみたのですがプログラミング初心者というのもあり、うまくできませんでした。お手数をお掛けしてしまいますが、具体的なコードをご教示いただけたら幸いです。よろしくお願い申し上げます。

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!