for文の書き方

9 views (last 30 days)
hiro
hiro on 30 Nov 2020
Commented: hiro on 4 Dec 2020
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つの動画にするコードの書き方もご教示いただけたら幸いです。

Accepted Answer

Hiroshi Miyagawa
Hiroshi Miyagawa on 1 Dec 2020
まずは以下をご参照ください。
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 Comments
hiro
hiro on 4 Dec 2020
参考になりました! ありがとうございました!

Sign in to comment.

More Answers (1)

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

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!