12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MATLABで競艇の解析を始めよう(展示のターンを見てみよう)

Posted at

MATLABでボートレース解析をする11番目くらいの記事です。

 外に出れないのは暇ですね。。
「不要不急の外出を控えるように」=「ボートレースでもしてなさい」という解釈にしてプログラムでも作りましょう。。

展示航走で、誰がどこを走ってるのか見てみよう。

 展示って事前にやる練習みたいなやつです。さっきやってた鳴門の8レース。
naruto8.gif

 カメラの位置がスタンド側(手前)の上の方についてるので、どこを回ってるのかよくわからないですね。

真上から見てみよう!

 鳴門の航空写真をとってきましたけど、こんな感じの視点で見たらわかりやすそう。
naruto_map.jpg

 ただ、そんなところにカメラはないしドローンも飛ばしちゃダメなので、MATLAB を使いましょう。

まずは座標変換の準備。

 Image Processing Toolbox で適当な4点を選んで Projective 変換しましょう。動画なので Computer Vision Toolbox も必要です。

vfr = vision.VideoFileReader('naru8.mp4');   % 展示の動画
frame = vfr();
map = imread('naruto_map.jpg');    % さっきの航空写真
cpselect(frame,map)

選択メニューが出るので、共通するわかりやすい4点を左右で選びましょう!

naruto_cpselect.jpg

後ろのバンパー2箇所と、ターンマークと、ネトロン(フワフワ棒)の色の変わり目なんかをクリックしておこうかな。数字の3の後ろあたりにバンパーの端があります。

 できたらメニューから点をエクスポート!

クリックした点を元に座標変換をしよう。

 展示航走のカメラは固定っぽいので、1回クリックしてエクスポートしたらその座標は保存しておきましょう。
以下のような4点が得られていれば、試しに以下のコマンドを実行!

movingPoints = [ 212.875   21.375
                 414.625   20.875
                 284.125  123.875
                 118.625  122.875];
             
fixedPoints = [  954.00     84.125
                1213.50    174.875
                 848.70    500.431
                 757.17    462.92];

tform = fitgeotrans(movingPoints,fixedPoints,'Projective');
output = imwarp(frame,tform);
imshow(output)

結果↓↓↓

naruto_warp.png

上の方と右の方の文字が伸びたところは要らんな。

output = imcrop(output,[5 600 230 330]);
imshow(output)

naruto_crop.png

俯瞰っぽいのと、航空写真と同じような角度のネトロンになってそうだから、こんな感じでいいか。

パラメーターが決まったら動画で試そう。

 あとはもう簡単。

%% 読み込み
vfr = vision.VideoFileReader('naru8.mp4');
player = vision.DeployableVideoPlayer;

%% プロパティ
movingPoints = [ 212.875   21.375
                 414.625   20.875
                 284.125  123.875
                 118.625  122.875];
             
fixedPoints = [  954.00     84.125
                1213.50    174.875
                 848.70    500.431
                 757.17    462.92];

tform = fitgeotrans(movingPoints,fixedPoints,'Projective');

%% ステップ
while ~isDone(vfr)
    frame = vfr();
    output = imwarp(frame,tform);
    output = imcrop(output,[5 600 230 330]);
    player(output)
end

%% 開放
release(vfr)
release(player)

結果↓↓↓

naruto8_result.gif

4号艇と6号艇がいい角度!

あとは画像処理で航跡でも追ってみたらいいね。

 とりあえず今回はプログラムよりも、GIF を作るのが大変だったからここまで・・・
気に入ったら LGTM しておいてね!

12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?