画像処理の入力について

9 views (last 30 days)
Kaneko
Kaneko on 15 Jan 2020
Commented: Kaneko on 16 Jan 2020
こちらの動画を参考にして自分の持っている画像の二値化を行ったら、エラーが出て、「入力がlogical(バイナリ)の場合は2次元でなければなりません。」といったメッセージが出たのですが、どういう意味かわかりません。
また、アプリから「イメージの領域解析」を使ってファイルからイメージの読み込みを行ったのですが、「入力イメージのクラスはlogicalでなければなりません。」とでました。この「入力はlogical」の意味がよく分かりません。
よろしくお願いいたします。

Accepted Answer

Kenta
Kenta on 15 Jan 2020
I=imread('onion.png');
Ig=rgb2gray(I);
b=imbinarize(Ig);
こんにちは、logicalは、1か0かの値を持っていて、真が偽かなどの判別に使われることもあります。
詳しくは、下のURLをご参照ください。またネットで、「matlab logical」と検索すればたくさん出てくるので適宜ご参照ください
アプリの件ですが、上のように、2値化した画像 b を読み込めば、うまくアプリを使用できます。
あらかじめ、自分で前処理をしておき、それをアプリに読み込ませるイメージと思います。
はじめのエラーのほうは、あまり状況が想像できずわかりません。ただ、下のURLを実際に動かしながら
変数の形などを見比べて、ご自身のものと比較すればわかると思います。
  5 Comments
Kenta
Kenta on 16 Jan 2020
「ちなみにImgNが読み込む画像の数です.」と参考にされたWEBに書いています。
また、「関数または変数'Imgn'が認識されません。」とありますし、Imgnを定義していないためエラーが出ているのではないでしょうか。たとえば40枚処理したいなら、Imgn=40;と宣言すればよいです。
また、上のコードを拝見する限り、1.jpg...などと命名されているようなので、以下のようにすればよいと思います。おそらく下をもとにそちらのデータに合わせたり、保存をしたりする必要があるかもしれませんが、適宜変更いただければと思います。
ImgN=40;
S=imread('1.jpg');
imtool(rgb2gray(S))
figure, imhist(S);
figure;
for i=2:ImgN
%Image Read
Imgfilename=strcat(num2str((i)),'.jpg');
S=imread(Imgfilename);
Sg=rgb2gray(S);
sb1=imbinarize(Sg,0.4);imshow(sb1)
end
Kaneko
Kaneko on 16 Jan 2020
i=1:200とやってみたらできました。確かによく考えたら読み込む数も指定しなければいけませんよね。
いろいろと回答して頂き、ありがとうございました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!