画像をMATLAB中でグラフにする方法について

こんにちは。私は高校生でMATLABを用いて授業で研究を行っているのですが、躓いてしまったので解決策を教えていただければと思います。
研究の動機として、この動画を再現してみたいと考えMATLABを使い始めました。https://www.youtube.com/watch?v=BQvBq3K50u8&t=317s この動画の中ではYoutube上にある動画をjpg画像でコマ送りのようにして、そのうえで画像をグラフに変換し描写しています。これをすべてMATLAB上で行えないか試行錯誤していますが、エッジ検出した後の画像をグラフに落とし込む事ができません。その部分を教えていただければと思います。
エッジ検出に用いたMATLABのコードは以下の通りです。
RGB = imread('BAd.jpg'); %画像のファイル名を入れる,file name
imshow(RGB)
I = rgb2gray(RGB); %グレースケールに画像を返還変換 change the image into gray scale
figure
imshow(I) %グレースケールの画像を表示 display the image of above one
[~, threshold] = edge(I, 'sobel');
fudgeFactor = .3; %画像の読み込む深さ depth of read the image
BWs = edge(I,'sobel', threshold * fudgeFactor);
figure, imshow(BWs), title('edge-detected-RIOREUSU'); %適当に名前を付けていいよ
この先どうすればいいか行き詰っています。よろしくお願いします。

4 Kommentare

Atsushi Ueno
Atsushi Ueno am 13 Okt. 2021
動画をみました。Desmosって何?Potraceって何?ってとこからはじまりました。
Desmosという数式をグラフ表示するソフトウェアにベジエ曲線の数式を大量に送り込んで動画に見せてるんですね
あと画像をどうやってベジエ曲線で表現するかについて説明しています
  • 画像のエッジ検出を行う(OpenCVのCanny法アルゴリズムを使っている)
  • ラスタ画像をベクタ画像に変換に変換する。変換に使うソフトがPotrace
  • Potraceより得られたベジエ曲線の制御点からLateXコマンドを作成
  • LateXコマンドを羅列したJSONデータを作成しDesmosのAPIに渡す
  • DesmosをFlask(ウェブ画面)で開いて数式をグラフ表示する
の様な操作をPythonで実装しています。これをMATLABでやるなら
MATLABでどうするか困ったのが、Potraceでラスタ画像をベクタ画像(ベジエ曲線の制御点)に変換するところです。同じソフトウェアのAPIをMATLABで叩くか、同様の機能を探すか(さっとググってもすぐには見つかりませんでした)
土日にゆっくりみてまた何かあれば追記します。グラフでBadAppleやりましょう!楽しい!
恭歓(Yasuyoshi) 増田(Masuda)
Bearbeitet: 恭歓(Yasuyoshi) 増田(Masuda) am 14 Okt. 2021
回答ありがとうございます。英語で同様の質問をしたところ( https://jp.mathworks.com/matlabcentral/answers/1562431-i-am-looking-for-the-way-to-display-the-video-on-graph?s_tid=srchtitle )
exportgraphics(gca,'temp.pdf','ContentType','vector')
とのアドバイスがあり、英語で回答してくれた方の方法を参考にしながらやってみたところ
RGB = imread('ポニョ.jpg'); %画像のファイル名を入れる,file name
imshow(RGB)
I = rgb2gray(RGB); %グレースケールに画像を返還変換 change the image into gray scale
figure
imshow(I) %グレースケールの画像を表示 display the image of above one
[~, threshold] = edge(I, 'sobel');
fudgeFactor = .3; %画像の読み込む深さ depth of read the image
BWs = edge(I,'sobel', threshold * fudgeFactor);
GR = double(~BWs); % Added line
imagesc(GR) % Added line
colormap colorcube % Added line
ax = gca;
exportgraphics(gca,'Ponyo.pdf','ContentType','vector');
としてもベクター画像にはできませんでした。なぜでしょうか?
加えて、英語で回答してくださった方のコードが実行できませんでした。"I"が二次元出なければならないとのことでしたが、どういう事でしょうか?僕は自分がもともと書いてあったものに少し足したらできるようになってしまいましたが、できれば理由を教えていただきたいです。お忙しいところ本当にすみません。
I = imread('ポニョ.jpg'); % Modified the filename
[~, threshold] = edge(I,'sobel'); % Original code
fudgeFactor = .3; % Original code
BWs = edge(I,'sobel', threshold * fudgeFactor); % Original code
figure, imshow(BWs), title('edge-detected-PONYO'); % Original code
GR = double(~BWs); % Added line
imagesc(GR) % Added line
colormap Gray % Added line
Atsushi Ueno
Atsushi Ueno am 16 Okt. 2021
>"I"が二次元出なければならないとのことでしたが、どういう事でしょうか?
imread('ポニョ.jpg')の出力がRGBのカラー情報を含む三次元データだった為、edge関数が受け付けませんでした。
rgb2gray関数でカラー情報を含まない二次元データに変換すれば動きます。
I = rgb2gray(imread('ポニョ.jpg')); % Modified the filename
Atsushi Ueno
Atsushi Ueno am 16 Okt. 2021
Bearbeitet: Atsushi Ueno am 16 Okt. 2021
>メモ: JPEGTIFF、および PNG ファイルでは 'vector' オプションはサポートされていません。
MATLABは、SVG等のベクタ画像を出力する機能を(exportgraphics関数に限らず)持っています。
しかしこれは、MATLABの図形データをベクタ画像としてエクスポートする機能です。
今求めているのはラスタ画像をベクタ画像に変換する機能であって、少し違います。

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Communitys

Weitere Antworten in  ThingSpeak Community

Produkte

Version

R2021a

Community Treasure Hunt

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

Start Hunting!