Optical flow lines を説明して欲しい

5 views (last 30 days)
巧 平山
巧 平山 on 26 Apr 2023
Commented: 巧 平山 on 8 May 2023
openExample('vision/viptrafficofExample')を使ってオプティカルフローの表示をしています。
simlink上のOptical flow linesブロック内のコードです。
function vel_Lines=OpticalFlowLines(vel_Values, scaleFactor)
% Generates the coordinate points of optical flow lines
persistent first_time;
persistent X;
persistent Y;
persistent RV;
persistent CV;
if isempty(first_time)
first_time = 1;
%% user may change the following three parameters
borderOffset = 5;
borderOffset = 5;
decimFactorCol = 5;
%%
[R C] = size(vel_Values);
RV = borderOffset:decimFactorRow:(R-borderOffset);
CV = borderOffset:decimFactorCol:(C-borderOffset);
[Y X] = meshgrid(CV,RV);
end
tmp = vel_Values(RV,CV);
tmp = tmp.*scaleFactor;
vel_Lines = [Y(:), X(:), Y(:)+real(tmp(:)), X(:)+imag(tmp(:))];
このコードが指し示す意味が分かりません。このブロックは何の操作をしていますか??
1.functionは何の操作をしていますか??
2.persistent、borderOffset、borderOffset等の変数は何の値を指し示していますか?
3.if 内の操作はどういう意味ですか?
4.最後の三行はどの様な操作をしていますか??

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 26 Apr 2023
>このコードが指し示す意味が分かりません。このブロックは何の操作をしていますか??
このブロックは入力の速度分布データに設けたグリッド上のデータを抽出・演算・加工したデータを出力しています。
  • 入力 vel_Values:速度分布を表す行列データ
  • 入力 scaleFactor:倍率を表すスカラ値
  • 出力 vel_Lines:グリッド座標とグリッド上の速度分布データ
1.functionは何の操作をしていますか??
function はこのコード全てを ”OpticalFlowLines 関数” として定義しています。
2.persistent、borderOffset、borderOffset等の変数は何の値を指し示していますか?
  • persistent は永続変数の定義です。関数実行後も値が保持され、次回の関数実行時にも使われます。
  • decimFactorRowとdecimFactorColはグリッドの間隔です(decimFactorRowの値が定義されていません)
  • borderOffsetは速度ベクトル分布データ端部の間隔(境界マージン)を意味します
3.if 内の操作はどういう意味ですか?
persistent 変数 ”first_time” が isempty 空か否か、即ち当該関数の呼び出しが初回か2回目以降かを判定しています。if文内部の”グリッド定義”は最初の一回のみ実行され永続変数に記憶されます。入力 vel_Valuesのサイズが変化しない前提条件があるはずです。
4.最後の三行はどの様な操作をしていますか??
グリッド上の速度分布データを抽出し係数を掛け、グリッドの座標と、この座標に速度分布データの実部/虚部を加算したデータを一列に並べてN行4列のデータとして出力しています。
  3 Comments
Atsushi Ueno
Atsushi Ueno on 27 Apr 2023
いずれの質問も即答出来ません。openExample('vision/viptrafficofExample')を見ていないのと、OpticalFlowの技術的背景を良く知らない事が原因です。この関数の入力を作っているOpticalFlow(速度勾配)演算の仕様を知る必要があります。
  1. borderOffsetの作成意義:端の速度ベクトル情報を抽出したくない理由があるのだと思います
  2. X-Y順:これは判りません。行方向=X方向としたいのだと思います(元画像の向き?)
  3. (X,Y)⇒(X+im(tmp),Y+re(tmp))が速度ベクトルの始点⇒終点座標で、X/Yと実部/虚部の関係は不明です
巧 平山
巧 平山 on 8 May 2023
難しい質問にもかかわらず返信して頂きありがとうございました。技術的背景について自分でも詳しく調べて見たいと思います。返信ありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!