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

조회 수: 2 (최근 30일)
巧 平山
巧 平山 2023년 4월 26일
댓글: 巧 平山 2023년 8월 4일
オプティカルフローのテンプレート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에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!