動画の上にベクトル場で流速分布を表示したい

8 次查看(过去 30 天)
巧 平山
巧 平山 2023-4-26
オプティカルフローのテンプレートopenExample('vision/viptrafficofExample')を用いて,動画上で稲の籾のオプティカルフローを解析しています。
しかし,テンプレートの自動車のようにうまくいきません。添付画像のように全体的に物が動いているため,矢印を沢山書くだけでは見にくい画像になっています。従って,動画の上にベクトル場を作成し,流速分布で表示したいと考えています。
しかし,ベクトル場作成はプロットでのみとなっているため,動画の上に重ねて表示する方法が分かりません。どのようにすれば,動画の上に流速分布を表示できますか??

采纳的回答

Atsushi Ueno
Atsushi Ueno 2023-4-26
>どのようにすれば,動画の上に流速分布を表示できますか??
動画を1フレームずつ表示し、その上に流速分布のプロットが可能です。
動画ファイルの読み取りや書き出しは専用の関数群で実行できます。
[X,Y] = meshgrid(pi/8:pi/8:2*pi,pi/8:pi/8:pi);
U = 100 * sin(Y); V = 100 * cos(X);
imshow(imread('peppers.png')); % サンプル画像
hold on
quiver(X*100,Y*100,U,V,'y'); % 流速分布のサンプルを重ねてプロット
  4 个评论
巧 平山
巧 平山 2023-5-8
返信ありがとうございました。非常に参考になりました。
巧 平山
巧 平山 2023-8-4
追加の質問になります。
作成した画像をつなげて動画を作成しました。しかし、いくつか動画を作成した際に、colormapの範囲が異なっていることに気づいてclim関数を利用しましたが、画像情報が消えて上手く動作しませんでした。
解決法が有れば教えて頂きたいです。
tic
f_name_base = [pwd];
colormap jet
cmap=colormap;
for id =400:998
str_id = num2str(id, '%i');
frame=[f_name_base, str_id, '.jpg'];
F=imread(frame);
imshow(frame);
hold on;
X = zeros(1280,1,998);Y = zeros(1280,1,998);U = zeros(1280,1,998);V = zeros(1280,1,998) ;L = zeros(1280,1,998) ;M = zeros(1280,1,998) ;
X(:,1,id)=Mat(:,1,id);
Y(:,1,id)=Mat(:,2,id);
U(:,1,id)=Mat(:,3,id);
V(:,1,id)=Mat(:,4,id);
L(:,1,id)=hypot(U(:,1,id),V(:,1,id));L(:,1,id)=L(:,1,id).*10;
M(:,1,id)=round(L(:,1,id),0);M(:,1,id)=M(:,1,id)+1;
for k = 1:1280 % 流速分布のサンプルを重ねてプロット
quiver(X(k,1,id),Y(k,1,id),U(k,1,id),V(k,1,id),'Color',cmap(ceil(M(k,1,id)),:),'linewidth',2);
end
filename = [sprintf('%03d',id) '_quiver.jpg'];%テキストファイル名
fullname = fullfile(f_name_base,filename);%保存ファイルにパスをつなげる
ax=gca;
exportgraphics(ax,fullname) % JPEG fileで書き出す (※名前;img1.jpg, img2.jpg, etc.)
hold off
end

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 コンピューター ビジョンと Simulink 的更多信息

Community Treasure Hunt

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

Start Hunting!