2012-09-02[n年前へ]
■「阿部の打球は本当に曲がったのか?」
問題の打球は8月26日の横浜DeNA戦(横浜)の6回、阿部が左腕・篠原貴行投手(35)から放った19号2ラン。高い弧を描いて下降をはじめ、中飛かと思われた次の瞬間、突然空中でバウンドするような軌道でバックスクリーンに飛び込んだのだ。
曲がっているように見える原因は、ズームだったわけです。夜の球場で視覚的情報量が少ないことからズームに気づきにくく、そのためボールが曲がったように見えたというのが私の結論です。
この解析のために書いたMathematicaコード・アルゴリズムは、『パノラマ画像で眺める「巨人阿倍の空中バウンド・ホームラン」の秘密!?』で読むことができます。
2012-09-04[n年前へ]
■続 パノラマ画像で眺める「巨人阿倍の空中バウンド・ホームラン」の秘密!?
『パノラマ画像で眺める「巨人阿倍の空中バウンド・ホームラン」の秘密!?』で書いた”カメラワーク”の影響を除去した上で・ホームランボールの軌跡を映し出す」スクリプトを書き直してみました。たとえば、下に貼り付けた画像は、巨人阿部選手のホームランボールが外野上空を飛翔していく0.5秒ほどの動きを、一枚の画像として合成したものです。…そうして眺めてみると、見事なくらいの「綺麗で美しく自然極まりない放物線」を巨人阿部が打ったホームラン・ボールは描いていることがわかります。
「突然、空中でバウンドする軌道のホームラン」…超常現象に思えるホームランボールの軌跡も、それは必然で単純な「カメラマンの指が(アングル的に必然として)操作したカメラ行列の変化によって作りされる「人の視覚の錯覚」だった、ということがわかります。
参考までに、昨日・今日に書いてみたMathematicaスクリプトをここに貼り付けておきます。処理手順を大雑把に書くと、「動画中のフレーム内から特徴点を抽出し、隣接フレーム間での特徴点位置関係からフレーム間の(カメラ)変換を算出して、その逆変換を使うことで一連の撮影映像を一枚のパノラマ画像に合成する、という具合です。(コードの前半は、オーバーレイ表示された文字や画像を除去するためのコードですから、本質的なものではありません)
frames=Import["hoge.mov", "ImageList"];(*画像読み込み*) frames2=ParallelTable[ Sharpen[ ColorConvert[ ImageTrim[ frames[[i]], {{1, 190}, {1024, 720}}] , "Grayscale"] , 7], {i, 1, Length[frames]} ];(*画像切り取り&強調*) i1=frames2[[130]];i1search=frames2[[130]]; Do[ tr=FindGeometricTransform[ (*位置検出用画像と保存用画像は別にする*) i1search,i2 = frames2[[i]] , "Transformation" -> "Affine"]; {w, h} = ImageDimensions[i1search]; tmp = ImagePerspectiveTransformation[ i2, tr[[2]], DataRange -> Full, PlotRange -> {{0, First@tr[[2]][{w, 0}]}, {0, h}} ]; {w, h} = ImageDimensions[tmp]; i1search = ImageCompose[i1, {tmp, 1.}, Round@({w, h}/2)]; i1 = ImageCompose[i1, {tmp, 0.75}, Round@({w, h}/2), {1, 0, -1}]; {i, 131, 140, 1} ]; il (* パノラマ画像 *)
ちなみに、隣接フレーム間から画像変換の関係式を導こうとすると、隣接フレーム間で対応する点を(回転や倍率を算出するために)最低3点抽出しないといけません。…というわけで、上記コードはホームランボール(という名前のただ一点の特徴点)だけが画面に映し出されているような映像があるとエラーを吐いてしまいます。
2012-11-04[n年前へ]
■日本シリーズの”疑惑の危険球”を画像解析してみよう!? 第1回
日本シリーズ第5戦(日本ハム vs. 読売ジャイアンツ)で「危険球とすべきか否か」の判断が分かれたというニュースを見て、「近未来の日本シリーズ放映なら、こんなシーンの直後には、ピッチャーが投げたボールコースを立体的に実感・体感できる”プレイバック・シーン”が即座に再生リピートされているに違いない」と考えました。
たとえば、ボールの軌跡を、ピッチャーの視点から・キャッチャーマスクの内側から・あるいは、バットを手にしたバッターの視点から…投げられたボールの軌跡を360°周囲の世界からレンダリングしているに違いないと思います。
今日は、日本シリーズ第5戦の「疑惑のボール」の軌跡を画像合成して眺めてみました。もちろん、そのボールの軌跡は、シンプル過ぎるくらいの単純な放物線を描いています。そういった、ボールの軌跡形状や、(進行方向が変化しても)速度の時間変化は滑らかで小さい…といった、ごく単純で当たり前の物理制約条件を活用すれば、(たとえ一箇所の定点TVカメラから撮影したとしても)ボール軌跡を立体的に再現できるように思われます。…というわけで、今日は、(続 パノラマ画像で眺める「巨人阿倍の空中バウンド・ホームラン」の秘密!?で書いたMathematicaコードを流用して)「(2012年 日本シリーズ第5戦の)疑惑の危険球」をまずは眺めてみました。
2013-03-24[n年前へ]
■テレビ画面に映るアイドルの「胸のドキドキ」がわかる未来!?
テレビ画面に映るアイドルの「胸のドキドキ」がわかる未来!? を書きました。
スマホカメラで写した顔画像で脈拍を検出することができるなら、テレビに写された顔の画像からも、もしかしたら(写っている人の)脈拍を検知することができるかもしれない?と思いつきました。そこで、前田敦子がTV画面に向かって話す映像をコンピュータで明るさ・緑/赤方向の色変化・黄青方向の色変化に分解し、顔に相当する部分だけの緑/赤方向の色変化だけを抜き出してグラフにしてみました。
2013-03-25[n年前へ]
■ノートPC付属のWebCamで「脈拍検出」をしてみよう!?
テレビ画面に映るアイドルの「胸のドキドキ」がわかる未来!?で書いた「カメラ画像からの脈拍推定」を、MacBook AirのFaceTimeカメラ(Webカメラ)を使い・Mathematicaでコードを書いて試してみました。
まずは、下のようなMathematicaコードを書き、1秒に10回のペースで10秒間にわたりカメラから画像を取り込み(カメラにかざした手のひらを撮影し)、そして、撮影画像の「緑←→赤」方向の色成分を抽出し、10秒間の色変化をグラフにしてみたのです。
Pause[5]; (* 手をかざすまでの待ち時間 *) img = Table[ Pause[0.1]; CurrentImage[], {100}]; lab = ImageData@(ColorConvert[#, "LAB"]) & /@ img; bImg = Table[ Map[(#[[2]]) &, data[[i]], {2, 2}], {i, 1, Length@data}]; ListPlot[ (Apply[Plus, Flatten[#] ]) & /@ bImg ](Webカメラに手をかざしつつ)このコードを実行した結果が、下に貼り付けたグラフです。横軸がフレーム数(10フレームで約1秒です)で、縦軸が「緑←→赤」方向の色成分量です。
10秒間に12間程度の色変化が見て取れます。…ということは、1分間あたりに換算すると70回程度の「色振動」が生じています。
…なるほど、これが脈拍を反映した肌の色変化なのかもしれません。今この時点のわたしの脈拍は70(回/分)程度のようです(点滅を高速に繰り返す照明周期と撮影周期のビートが生じていないか?という点は気にかかりますが)。
ノートPC付属のWebCamがユーザの脈拍検出も容易にできるようになると…「やってみたい面白いこと」がたくさん頭に浮かんできますね。