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!