特許第6843192号(P6843192)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

<>
  • 特許6843192-映像安定化 図000004
  • 特許6843192-映像安定化 図000005
  • 特許6843192-映像安定化 図000006
  • 特許6843192-映像安定化 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6843192
(24)【登録日】2021年2月25日
(45)【発行日】2021年3月17日
(54)【発明の名称】映像安定化
(51)【国際特許分類】
   H04N 5/232 20060101AFI20210308BHJP
   G06T 3/00 20060101ALI20210308BHJP
【FI】
   H04N5/232 480
   H04N5/232 290
   G06T3/00
【請求項の数】15
【外国語出願】
【全頁数】23
(21)【出願番号】特願2019-131289(P2019-131289)
(22)【出願日】2019年7月16日
(62)【分割の表示】特願2018-501254(P2018-501254)の分割
【原出願日】2016年9月23日
(65)【公開番号】特開2019-208243(P2019-208243A)
(43)【公開日】2019年12月5日
【審査請求日】2019年8月20日
(31)【優先権主張番号】14/883,515
(32)【優先日】2015年10月14日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ホン,ウェイ
(72)【発明者】
【氏名】カルセロニ,ロドリゴ
【審査官】 ▲徳▼田 賢二
(56)【参考文献】
【文献】 米国特許出願公開第2013/0121597(US,A1)
【文献】 特開2014−192613(JP,A)
【文献】 特開2006−074678(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 5/232
G06T 3/00
(57)【特許請求の範囲】
【請求項1】
コンピュータにより実現される方法であって、
コンピューティングシステムが、カメラによって取込まれた映像の第1フレームおよび第2フレームを受信するステップと、
前記コンピューティングシステムが、前記映像の前記第1フレームおよび前記第2フレームを用いて、前記映像によって取込まれたシーンに対する、前記第1フレームが取込まれた時点から前記第2フレームが取込まれた時点までの前記カメラの移動を示す第1の数学的変換を生成するステップと、
前記コンピューティングシステムが、前記シーンに対する、長期にわたって発生した前記カメラの移動を特定するステップと、を含み、前記長期にわたって発生した前記カメラの移動を特定するステップは、前記映像の前記第1フレームおよび前記第2フレームよりも前に前記カメラが取込んだ映像のフレームを解析することにより、前記長期にわたって発生した移動を特定するステップを含み、
前記方法は、さらに、前記コンピューティングシステムが、前記第1の数学的変換と、前記シーンに対する、前記特定した長期にわたって発生した前記カメラの移動とを用いて、第2の数学的変換を生成するステップ含み、前記第2の数学的変換は、前記特定した長期にわたって発生した前記カメラの移動の表示を前記第1の数学的変換から取除くことを含むプロセスによって生成され、
前記方法は、さらに、前記コンピューティングシステムが、前記第2の数学的変換を前記第2フレームに適用し、最近始まった移動を前記第2フレームから取除き、前記長期にわたって発生した移動を残すことにより、安定化された前記第2フレームを生成するステップを含む、コンピュータにより実現される方法。
【請求項2】
前記第2フレームは、前記映像の前記第1フレームの直後の前記映像のフレームである、請求項1に記載のコンピュータにより実現される方法。
【請求項3】
前記シーンに対する前記カメラの移動を示す前記第1の数学的変換はホモグラフィ変換行列を含む、請求項1または2に記載のコンピュータにより実現される方法。
【請求項4】
前記安定化された第2フレームを生成するステップは、前記第2の数学的変換を前記第2フレームに適用することによって生成された前記第2フレームのバージョンをズームインするステップを含む、請求項1から3のいずれか1項に記載のコンピュータにより実現される方法。
【請求項5】
前記安定化された第2フレームのズームイン領域を、水平方向または鉛直方向にシフトすることにより、前記安定化された第2フレームの前記ズームイン領域が無効領域を提示しないようにするステップをさらに含む、請求項4に記載のコンピュータにより実現される方法。
【請求項6】
前記長期にわたって発生した前記カメラの移動を特定するステップは、前記映像の前記第1フレームおよび前記第2フレームよりも前に前記カメラが取込んだ映像のフレームの解析に基づいて、ローパスフィルタを前記第1の数学的変換に適用するステップを含む、請求項1からのいずれか1項に記載のコンピュータにより実現される方法。
【請求項7】
前記コンピューティングシステムが、前記第2の数学的変換を前記第2フレームに適用した結果得られる、安定化された前記第2フレームに存在する、予測される歪みを、
(i)前記第2の数学的変換を前記第2フレームに適用した結果生じる水平方向の歪み量と、
(ii)前記第2の数学的変換を前記第2フレームに適用した結果生じる鉛直方向の歪み量との差に基づいて、
特定するステップと、
前記コンピューティングシステムが、前記第2フレームに先行する前記映像の複数のフレームにおける歪みから算出された歪みの許容可能な変化を、前記予測される歪みが超過する程度に基づいて、前記第2の数学的変換を前記第2フレームに適用した結果得られる安定化効果の低減量を決定するステップとを含み、
前記安定化された第2フレームを生成するステップは、前記決定した安定化効果の低減量に基づいて、前記第2の数学的変換を前記第2フレームに適用することによる安定化効果を低減するステップを含む、請求項1からのいずれか1項に記載のコンピュータにより実現される方法。
【請求項8】
前記コンピューティングシステムが、前記第2フレームに先行する前記映像の複数のフレーム間の前記カメラの移動速度の解析に基づいて、前記カメラの移動速度の許容可能な変化を算出するステップと、
前記コンピューティングシステムが、前記カメラの移動速度の許容可能な変化を超過する、前記第1フレームから前記第2フレームまでの、決定した前記カメラの移動速度に基づいて、前記第2の数学的変換を前記第2フレームに適用した結果得られる安定化効果の低減量を決定するステップとをさらに含み、
前記安定化された第2フレームを生成するステップは、前記決定した安定化効果の低減量に基づいて、前記第2の数学的変換を前記第2フレームに適用することによる安定化効果を低減するステップを含む、請求項1からのいずれか1項に記載のコンピュータにより実現される方法。
【請求項9】
前記カメラの移動は、最近始まった移動と、前記長期にわたって発生した移動とを含む、請求項1からのいずれか1項に記載のコンピュータにより実現される方法。
【請求項10】
前記コンピューティングシステムは、前記第1の数学的変換を、前記第1フレームおよび前記第2フレーム内に存在する特徴点が前記第1フレームと前記第2フレームとの間でどのように移動したかを特定することによって生成する、請求項1からのいずれか1項に記載のコンピュータにより実現される方法。
【請求項11】
前記第2の数学的変換は、前記第1の数学的変換と比較して、前記シーンに対する、最近始まった前記カメラの移動に対する代表性がより高く、前記シーンに対する、前記長期にわたって発生した前記カメラの移動に対する代表性がより低い、請求項1から1のいずれか1項に記載のコンピュータにより実現される方法。
【請求項12】
コンピュータにより実現される方法であって、
コンピューティングシステムが、カメラによって取込まれた映像の第1フレームおよび第2フレームを受信するステップと、
前記コンピューティングシステムが、前記映像の前記第1フレームおよび前記第2フレームを用いて、前記映像によって取込まれたシーンに対する、前記第1フレームが取込まれた時点から前記第2フレームが取込まれた時点までの前記カメラの移動を示す第1の数学的変換を生成するステップと、
前記コンピューティングシステムが、前記シーンに対する、長期にわたって発生した前記カメラの移動を特定するステップと、
前記コンピューティングシステムが、前記第1の数学的変換と、前記シーンに対する、前記特定した長期にわたって発生した前記カメラの移動とを用いて、第2の数学的変換を生成するステップとを含み、前記第2の数学的変換は、前記特定した長期にわたって発生した前記カメラの移動の表示を前記第1の数学的変換から取除くことを含むプロセスによって生成され、
前記方法は、さらに、
前記コンピューティングシステムが、前記第2の数学的変換を前記第2フレームに適用し、最近始まった移動を前記第2フレームから取除き、前記長期にわたって発生した移動を残すことにより、安定化された前記第2フレームを生成するステップを含み、
前記安定化された第2フレームを生成するステップは、前記第2の数学的変換を前記第2フレームに適用することによって生成された前記第2フレームのバージョンをズームインするステップを含み、
前記方法は、さらに、
前記安定化された第2フレームのズームイン領域を、水平方向または鉛直方向にシフトすることにより、前記安定化された第2フレームの前記ズームイン領域が無効領域を提示しないようにするステップを含む、コンピュータにより実現される方法。
【請求項13】
コンピュータにより実現される方法であって、
コンピューティングシステムが、カメラによって取込まれた映像の第1フレームおよび第2フレームを受信するステップと、
前記コンピューティングシステムが、前記映像の前記第1フレームおよび前記第2フレームを用いて、前記映像によって取込まれたシーンに対する、前記第1フレームが取込まれた時点から前記第2フレームが取込まれた時点までの前記カメラの移動を示す第1の数学的変換を生成するステップと、
前記コンピューティングシステムが、前記シーンに対する、長期にわたって発生した前記カメラの移動を特定するステップと、
前記コンピューティングシステムが、前記第1の数学的変換と、前記シーンに対する、前記特定した長期にわたって発生した前記カメラの移動とを用いて、第2の数学的変換を生成するステップとを含み、前記第2の数学的変換は、前記特定した長期にわたって発生した前記カメラの移動の表示を前記第1の数学的変換から取除くことを含むプロセスによって生成され、
前記方法は、さらに、
前記コンピューティングシステムが、前記第2の数学的変換を前記第2フレームに適用し、最近始まった移動を前記第2フレームから取除き、前記長期にわたって発生した移動を残すことにより、安定化された前記第2フレームを生成するステップと、
前記コンピューティングシステムが、前記第2の数学的変換を前記第2フレームに適用した結果得られる、安定化された前記第2フレームに存在する、予測される歪みを、
(i)前記第2の数学的変換を前記第2フレームに適用した結果生じる水平方向の歪み量と、
(ii)前記第2の数学的変換を前記第2フレームに適用した結果生じる鉛直方向の歪み量との差に基づいて、
特定するステップと、
前記コンピューティングシステムが、前記第2フレームに先行する前記映像の複数のフレームにおける歪みから算出された歪みの許容可能な変化を、前記予測される歪みが超過する程度に基づいて、前記第2の数学的変換を前記第2フレームに適用した結果得られる安定化効果の低減量を決定するステップとを含み、
前記安定化された第2フレームを生成するステップは、前記決定した安定化効果の低減量に基づいて、前記第2の数学的変換を前記第2フレームに適用することによる安定化効果を低減するステップを含む、コンピュータにより実現される方法。
【請求項14】
コンピュータにより実現される方法であって、
コンピューティングシステムが、カメラによって取込まれた映像の第1フレームおよび第2フレームを受信するステップと、
前記コンピューティングシステムが、前記映像の前記第1フレームおよび前記第2フレームを用いて、前記映像によって取込まれたシーンに対する、前記第1フレームが取込まれた時点から前記第2フレームが取込まれた時点までの前記カメラの移動を示す第1の数学的変換を生成するステップと、
前記コンピューティングシステムが、前記シーンに対する、長期にわたって発生した前記カメラの移動を特定するステップと、
前記コンピューティングシステムが、前記第1の数学的変換と、前記シーンに対する、前記特定した長期にわたって発生した前記カメラの移動とを用いて、第2の数学的変換を生成するステップとを含み、前記第2の数学的変換は、前記特定した長期にわたって発生した前記カメラの移動の表示を前記第1の数学的変換から取除くことを含むプロセスによって生成され、
前記方法は、さらに、
前記コンピューティングシステムが、前記第2の数学的変換を前記第2フレームに適用し、最近始まった移動を前記第2フレームから取除き、前記長期にわたって発生した移動を残すことにより、安定化された前記第2フレームを生成するステップと、
前記コンピューティングシステムが、前記第2フレームに先行する前記映像の複数のフレーム間の前記カメラの移動速度の解析に基づいて、前記カメラの移動速度の許容可能な変化を算出するステップと、
前記コンピューティングシステムが、前記カメラの移動速度の許容可能な変化を超過する、前記第1フレームから前記第2フレームまでの、決定した前記カメラの移動速度に基づいて、前記第2の数学的変換を前記第2フレームに適用した結果得られる安定化効果の低減量を決定するステップとを含み、
前記安定化された第2フレームを生成するステップは、前記決定した安定化効果の低減量に基づいて、前記第2の数学的変換を前記第2フレームに適用することによる安定化効果を低減するステップを含む、コンピュータにより実現される方法。
【請求項15】
請求項1から1のいずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本明細書は概して映像安定化に関する。
【背景技術】
【0002】
背景
映像記録はかつて、映像記録専用装置の専門分野であったが、映像記録が可能な携帯電話およびタブレットコンピュータ等の身近な装置がより一般的になっている。大抵の携帯映像記録装置の問題点は、これらの装置では映像のブレが生じる点であり、ユーザが記録装置を持ちながら行なう無意識の動きが映像の品質に影響する。
【0003】
記録装置を振動させると、その振動をたとえば映像安定化機構によって補償しない限り、同様にブレた映像になる可能性がある。光学式映像安定化は、レンズまたは画像センサ等の記録装置の構成部品を機械的に動かすことによって映像のブレを減じることができる。しかしながら、光学式映像安定化装置は、記録装置の材料および製造コストを増大させる場合がある。また、光学式映像安定化装置は、記録装置のサイズを増大させる場合があり、記録装置は小型に設計することが望まれることが多い。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
本明細書は、映像を安定化させるための技術、方法、システム、およびその他の機構を説明する。
【0005】
下記実施形態に追加する説明として、本開示は以下の実施形態を説明する。
実施形態1は、コンピュータによって実現される方法である。この方法は、コンピューティングシステムが、カメラ等の記録装置によって取込まれた映像の第1フレームおよび第2フレームを受信するステップを含む。この方法は、コンピューティングシステムが、映像の第1フレームおよび第2フレームを用いて、映像によって取込まれたシーン(すなわち映像において描写されているシーン)に対する、第1フレームが取込まれた時点から第2フレームが取込まれた時点までのカメラの移動を示す数学的変換を特定するステップを含む。この方法は、コンピューティングシステムが、最近始まった移動に対する数学的変換の代表性が低くなるように、上記シーンに対するカメラの移動を示す数学的変換を修正することにより、修正された数学的変換を生成するステップを含む。この方法は、コンピューティングシステムが、数学的変換と修正された数学的変換とを用いて、第2フレームに適用されて第2フレームを安定化することができる第2の数学的変換を生成するステップを含む。この方法は、コンピューティングシステムが、第2の数学的変換を第2フレームに適用した結果得られる、安定化された第2フレームに存在する、予測される歪みを、(i)第2の数学的変換を第2フレームに適用した結果生じる水平方向の歪み量と、(ii)第2の数学的変換を第2フレームに適用した結果生じる鉛直方向の歪み量との差に基づいて、特定するステップを含む。この方法は、コンピューティングシステムが、第2フレームに先行する映像の複数のフレームにおける歪みから算出された歪みの許容可能な変化を、予測される歪みが超過する程度に基づいて、第2の数学的変換を第2フレームに適用した結果得られる安定化効果の低減量を決定するステップを含む。この方法は、コンピューティングシステムが、第2の数学的変換を第2フレームに適用することにより、安定化された第2フレームを生成するステップを含み、第2の数学的変換を第2フレームに適用することによる安定化効果は、決定した安定化効果の低減量に基づいて低減されてい
る。
【0006】
実施形態2は、実施形態1の方法であり、第2フレームは、映像の第1フレームの直後の映像のフレームである。
【0007】
実施形態3は、実施形態1の方法であり、カメラの移動を示す数学的変換はホモグラフィ変換行列を含む。
【0008】
実施形態4は、実施形態3の方法であり、数学的変換を修正するステップは、ローパスフィルタをホモグラフィ変換行列に適用するステップを含む。
【0009】
実施形態5は、実施形態3の方法であり、予測される歪みは、第2の数学的変換における水平ズーム値と第2の数学的変換における鉛直ズーム値との差に基づく。
【0010】
実施形態6は、実施形態1の方法であり、数学的変換を修正するステップは、数学的変換を修正して、修正された数学的変換が、数学的変換よりも、長期にわたって発生した移動に対する代表性が高くなるようにするステップを含む。
【0011】
実施形態7は、実施形態1の方法であり、第2の数学的変換を第2フレームに適用した結果得られる安定化効果の低減量を決定するステップは、第2フレームに先行する映像の複数のフレーム間のカメラの移動の速度に基づいて算出された、カメラの移動速度の許容可能な変化を超える、第1フレームから第2フレームまでのカメラの決定した移動速度に、さらに基づく。
【0012】
実施形態8は、実施形態1の方法であり、安定化された第2フレームを生成するステップは、第2の数学的変換を第2フレームに適用することによって生成された第2フレームのバージョンをズームインするステップを含む。
【0013】
実施形態9は、実施形態1の方法であり、第2フレームのバージョンのズームイン領域を、水平方向または鉛直方向にシフトすることにより、第2フレームのズームイン領域が無効領域を提示しないようにするステップをさらに含む。
【0014】
実施形態10は、命令が格納された記録可能媒体を含むシステムに関し、この命令は1つ以上のプロセッサによって実行されると実施形態1〜9のいずれか1つの方法に従う動作を実行させる。
【0015】
特定の実装例は、場合に応じて、以下の利点のうちの1つ以上を実現できる。本明細書に記載の映像安定化技術は、3以上の自由度の移動(たとえば水平移動および鉛直移動だけでない移動)を、たとえば8自由度の移動(たとえば並進方位、回転方位、ズーム方位、および非固定(non-rigid)ローリングシャッター歪み)を補償することにより、補償することができる。本明細書に記載の映像安定化技術は、装置による映像の撮影中に機能することができ、未来のフレームからの情報はなくてもよい。言い換えると、この映像安定化技術は、最新記録フレームを安定化するときに、過去のフレームのみからの情報を使用することができるので、システムは、映像ストリームを取込むときに、安定化された映像ストリームを格納することができる(たとえば、現在記録中のまたは記録済の映像に、1、100、500、1000、または5000を超える不安定な映像フレームを格納しないといったように、複数の不安定な映像フレームを格納しない)。したがって、システムは、映像の安定化を、全映像の記録が終わるまで待つ必要がない。本明細書に記載の映像安定化技術は、複雑でなくてもよいので、処理能力がそれほど高くない装置(たとえばスマートフォンの一部)上でも実行し得る。加えて、本明細書に記載の映像安定化技術は、
第1段階でフレーム間動き予測が失敗する状況でも機能し得る。
【0016】
1つ以上の実装例の詳細が添付の図面および以下の説明において示される。その他の特徴、目的、および利点は、本明細書および図面ならびに請求項から明らかになるであろう。
【図面の簡単な説明】
【0017】
図1】映像安定化プロセスによる安定化中の映像ストリームの図を示す。
図2A】映像を安定化させるプロセスのフローチャートを示す。
図2B】映像を安定化させるプロセスのフローチャートを示す。
図3】本明細書に記載のシステムおよび方法を実現するために、クライアントとしてまたはサーバとしてまたは複数のサーバとして使用し得るコンピューティングデバイスのブロック図である。
【発明を実施するための形態】
【0018】
各種図面における同様の参照符号は同様の要素を示す。
詳細な説明
本明細書は概して映像の安定化について説明する。映像安定化は、直近の受信映像フレームと過去の受信映像フレームとの間の変換を特定し(この変換は、シーンに対する、フレームとフレームとの間のカメラの移動を示す)、過去のフレームからの情報に基づいてこの変換を修正し、上記変換と上記修正された変換とに基づいて第2の変換を生成し、第2の変換を現在受信中のフレームに適用することにより、現在受信中のフレームを安定化したものを生成することによって、実行し得る。このプロセスは、概要が図1に基づいて説明され、詳細が図2に基づいて説明される。
【0019】
図1は、映像安定化プロセスによって安定化中の映像ストリームの図を示す。この図は、3つの映像フレーム110a〜110cを含む。これらのフレームは連続していてもよく、フレーム110bはフレーム110aが取込まれた直後に取込まれたフレームであってもよく、フレーム110cはフレーム110bが取込まれた直後に取込まれたフレームであってもよい。本明細書は、映像の2つのフレームを、映像の第1フレームおよび映像の第2フレームと呼ぶ場合があるが、「第1」という表記は、第1フレームが映像全体における最初のフレームであることを必ずしも意味しない。
【0020】
フレーム110a〜110cは、ライン112a〜112bの間またはその近くに配置されて示されているが、これらのラインは、これらのフレームによって表わされるシーン相互の相対的な位置を示す。この図面においてこれらのラインは、カメラがフレーム110a〜110cを取込んだときに移動していたことを示す。たとえば、カメラは、フレーム110aを取込んだときよりもフレーム110bを取込んだときの方が下を向いており、フレーム110aおよび110bを取込んだときよりもフレーム110cを取込んだときの方が上を向いていたことになる。
【0021】
コンピューティングシステムは、第1フレーム110bから第2フレーム110cまでのカメラの移動を示す数学的変換(ボックス120)を特定する。この特定は、(図中の矢印で示されるように)フレーム110b〜110cを用いて実施することができる。フレーム110cは直近に取込まれたフレームであってもよい。これら2つのフレーム110b〜110cは、コンピューティングシステムに装着されているカメラセンサまたはカメラモジュールから受けてもよく、または、映像フレーム110b〜110cを取込んだ遠隔装置から受けてもよい。上記数学的変換を特定することは、数学的変換を生成することを含み得る。数学的変換は、図2A図2Bのボックス210との関連でより詳細に説明するように、ホモグラフィ変換行列であってもよい。
【0022】
次に、コンピューティングシステムは、修正された変換(ボックス125)を生成する。このとき、コンピューティングシステムは、最近始まった移動に対する、修正された変換(ボックス125)の代表性が、最初の変換と比べて低くなるように、最初の変換(ボックス120)を修正する。言い換えると、修正された変換を生成することは、最初の変換を、第1および第2フレーム110b〜110cよりも前の1つ以上の映像フレームからの情報に基づいて修正することを含む。修正された変換は、最初の変換をローパスフィルタにかけたものであってもよい。そうすることにより得られる修正された数学的変換(ボックス125)は、最近始まった移動ではなく長期にわたって発生した移動に対する代表性が、最初の変換(120)よりも高い。
【0023】
一例として、修正された数学的変換(ボックス125)は、数分の1秒前に始まった振動ではなく長い秒数にわたって発生したパニングの動きを、より十分に代表することができる。このやり方で変換を修正することは、図1においてフレーム110a〜110bからボックス122を指している矢印で示されるように、映像の過去のフレームを考慮している。たとえば、過去のフレームを用いて算出した変換を用いることで、より長い期間にわたって発生した移動と、ごく最近始まった移動とを特定することができる。修正された変換を、過去のフレームを用いて算出する方法の一例は、図2A図2Bのボックス220との関連でより詳細に説明する、ローパスフィルタをホモグラフィ変換行列に適用することであってもよい。
【0024】
ボックス130は、最初の変換(ボックス120)と修正された変換(ボックス125)とから生成される第2の変換を示す。第2の変換は、最初の変換と修正された変換との差であってもよい。第2の変換を最初の変換と修正された変換とから生成することは、図2A図2Bのボックス230との関連でより詳細に説明する。
【0025】
ボックス132は、(i)第2の数学的変換を第2フレーム110cに適用した結果生じる水平方向の歪み量と、(ii)第2の数学的変換を第2フレーム110cに適用した結果生じる鉛直方向の歪み量との差に基づいて、第2の変換を第2フレーム110cに適用した結果得られる安定化された第2フレーム110cの、予測される歪みを、コンピューティングシステムが如何にして特定するかを示す。予測される歪みの算出については、図2A図2Bのボックス250との関連でより詳細に説明する。
【0026】
ボックス134は、予測される歪みが許容可能な歪み変化をどの程度超過しているかに基づいて、第2の数学的変換を第2フレーム110cに適用することにより得られる安定化効果の低減量を、コンピューティングシステムが如何にして決定するかを示す。許容可能な歪み変化は、図1においてフレーム110a〜110bからボックス134を指している矢印で示されるように、第2フレーム110cに先行する映像の複数のフレームを用いて算出することができる。一例として、過去の複数のフレームにおける歪みを解析してもよく、現在のフレーム110cを安定化した結果生じる歪みが、フレーム間の歪みの変化量から大幅に外れている場合、コンピューティングシステムは、現在のフレーム110cの安定化を低減することにより、歪みが映像を見る者にとって明らかになり過ぎないようにすることができる。映像安定化の低減量の決定については、図2のボックス250および260との関連でより詳細に説明する。コンピューティングシステムが、決定した映像安定化の低減量を使用することは、決定した量を用いて、修正された第2の変換(ボックス140)を生成することを含み得る。
【0027】
コンピューティングシステムは、修正された第2の変換(ボックス140)を第2フレーム110cに適用することにより、安定化された第2フレーム110c(ボックス150)を生成する。修正された第2の変換(ボックス140)は、決定した安定化の低減量
に基づいて修正されているので、コンピューティングシステムによる、安定化された第2フレーム(ボックス150)の生成は、決定した安定化効果の低減量に基づいて低減されていると考えられる。
【0028】
いくつかの実装例において、安定化効果の低減量を決定することは、さらに、または代わりに、シーンに対するカメラの許容可能な速度変化を超える、シーンに対する第1フレーム110bから第2フレーム110cまでのカメラの決定した移動速度に基づく。カメラの許容可能な速度変化は、図2A図2Bのボックス240および260に関連してより詳細に説明する第2フレーム110cに先行する映像の複数のフレームから算出してもよい。
【0029】
いくつかの実装例において、安定化された第2フレームを生成することは、第2の数学的変換を第2フレームに適用することにより生成された第2フレームのバージョンをズームインすることを含む。コンピューティングシステムは、ズームイン領域を、水平方向、鉛直方向、またはこれら両方の方向にシフトさせることにより、ズームイン領域が、安定化された第2フレームのエッジに現れ得る無効領域を提示しないようにすることができる。これについては、図2A図2Bのボックス280および290との関連でより詳細に説明する。
【0030】
図2A図2Bは映像安定化プロセスのフローチャートを示す。このプロセスは、以下で説明するボックス210〜290で示される。これらのボックスに関連付けて説明する動作は、以下で示す順序または図2A図2Bに示される順序で実行されなくてもよい。
【0031】
ボックス210で、コンピューティングシステムは、2つの映像フレームを入力として用いてフレーム間の動き(「H_interframe」)を表わす行列を推定する。このフレーム間動き行列は、ホモグラフィ変換行列であってもよい。ホモグラフィ変換行列は、シーンの、または、映像の2つのフレーム間のシーンを取込んだカメラの移動を表わすことができる。一例として、映像の各フレームは二次元画像を表示し得る。第1フレームが、正方形をその真正面から撮影して、映像フレームの中で辺の長さが等しく角度が90度の正方形となるように(言い換えると正方形に見えるように)したとする。次に、カメラを側方に移動させて(または正方形自体を移動させて)、次の映像フレームが、辺のうちのいつくかが他の辺よりも長く角度が90度ではない歪んだ正方形を表示するようにしたとする。第1フレーム内の正方形の4つのコーナーポイントの位置を第2フレームの4つのコーナーポイントの位置にマッピングすることにより、第1フレームから次のフレームまでにカメラまたはシーンがどのように移動したかを特定することができる。
【0032】
フレーム内のこれらのコーナーポイントの相互のマッピングを用いることにより、カメラが記録しているシーンに対するカメラの視点の動きを表わすホモグラフィ変換行列を生成することができる。このようなホモグラフィ変換行列の場合、第1フレームを、生成したホモグラフィ変換行列とともに使用して、たとえば既知のホモグラフィ変換方法に従って第1フレーム内の画素を異なる場所に移動させることにより、第2フレームを再度生成することができる。
【0033】
上記ホモグラフィ変換行列は、並進移動だけでなく、回転、ズーム、および非固定ローリングシャッター歪みも表わすことができる。このように、ホモグラフィ変換行列を使用することにより、8自由度の移動に対して映像を安定化することができる。比較として、いくつかの映像安定化機構は、専ら画像を安定化することによって並進移動(たとえば上下および左右の移動)を説明する。
【0034】
上述のホモグラフィ変換行列は、3×3のホモグラフィ変換行列であってもよいが、そ
の他の種類のホモグラフィ行列を使用してもよい(ホモグラフィ行列でなくても、または行列でなくても、1つのフレームから別のフレームまでの移動のその他の数学的表現を使用してもよい)。3×3行列(H_interframeと呼ぶ)は以下のようにして決定することができる。第1に、コンピューティングシステムは、現在の画像の中で一組の特徴点(通常コーナーポイント)を見つける。これらのポイントを[x’_i,y’_i],i=1....N(Nは特徴点の数)で表わす。次に、前のフレームにおける対応する特徴点を見つける。この対応する特徴点を[x_i,y_i]で表わす。なお、これらのポイントは、GL座標系にあるものとして説明する(すなわちxおよびyの範囲はフレーム中心を起点として−1〜1)。これらのポイントが、xの範囲が0〜画像の幅で、yの範囲が0〜画像の高さである画素座標系の中にある場合、ポイントをGL座標系に変換することができる、または、得られた行列を変換して補償することができる。
【0035】
上記H_interframe行列は、9の要素を含む3×3行列である。
【0036】
【数1】
H_interframeは下記のように[x_i,y_i]を[x’_i,y’_i]に変換する変換行列である。
・z_i'*[x'_i, y'_i, 1]' = H_interframe * [x_i, y_i, 1]'
[x'_i,y'_i,1]'は、[x'_i,y'_i,1]ベクトルの転置行列である3×1ベクトルである。[x_i,y_i,1]'は、[x_i,y_i,1]ベクトルの転置行列である3×1ベクトルである。z_i'はスケールファクタである。
【0037】
一組の対応する特徴点を想定した場合、行列を推定するためのアルゴリズムの例は、ftp://vista.eng.tau.ac.il/dropbox/aviad/Hartley,%20Zisserman
%20-%20Multiple%20View%20Geometry%20in%20Computer%20Vision.pdfから入手できるコンピュータビジョンの書籍「Hartley, R., Zisserman, A.: Multiple View Geometry in Computer Vision. Cambridge University Press (2000)」のアルゴリズム4.1(91頁)およびアルゴリズム4.6(123頁)に記載されている。
【0038】
ボックス220で、コンピューティングシステムは、ローパス変換行列(H_lowpass)を推定する。ローパス変換行列を後にH_interframe行列と組合わせることにより、ビデオカメラの無意識の「高周波の」移動の結果を取除くために使用できる新たな行列(H_compensation)を生成することができる。システムがすべての移動を取除こうとする場合(言い換えると本明細書に記載のローパスフィルタリングを実行しない場合)、ユーザは、カメラを意識的に動かすことができず映像によって示されるシーンも動かすことができないかもしれない。このため、コンピューティングシステムは、高周波の移動をフィルタ処理して取除くためにローパス変換を生成する。高周波の移動は、短期間の前後移動のような、不規則であって多数のフレームを通して表わされるのではない移動であり得る。逆に、低周波の移動は、数秒間のユーザによるビデオカメラのパニングのような、多数のフレームを通して表わされる移動であり得る。
【0039】
このフィルタリングを実施するために、コンピューティングシステムは、長い時系列にわたって発生した低周波移動を強調するために重み付けされた値を含むローパス変換行列(H_lowpass)を生成する。ローパス変換行列は、ローパスフィルタをH_interframe行列に適用した結果であってもよい。ローパス変換行列の各要素は、(
1)前のフレームからのローパス変換行列の自身の時系列と、(2)前のフレームと現在のフレームとの間の移動を表わすH_interframe行列と、(3)ユーザによって指定された減衰比とから、要素ごとに個別に生成される。言い換えると、注目すべき値で重み付けされた行列内の要素は、多くのフレームにわたってH_interframeに存在している移動を表わす要素であってもよい。H_lowpassを生成するための等式は次のように表わすことができる。
・H_lowpass = H_previous_lowpass * transform_damping_ratio + H_interframe * (1 -
transform_damping_ratio)
この等式は、2タップ無限インパルス応答フィルタの一例である。
【0040】
ボックス230で、コンピューティングシステムは、補償変換行列(H_compensation)を算出する。補償行列は、ローパス行列(H_lowpass)とフレーム間動き行列(H_interframe)との組合わせであってもよい。これら2つの行列を組合わせることにより、あるフレームから次のフレームまでの移動を保つのに必要な行列(H_compensation)が生成されるが、これは、最近の「無意識の」移動の除外までの、妥当な期間に発生した移動のみである。H_compensation行列は、H_interframeとH_lowpassとの間の移動の相違を表わし得る。よって、H_lowpassを最後のフレームに適用することにより、最後のフレームと現在のフレームとの間に発生した自発的な移動を表わす、最後のフレームを修正したものを生成する一方で、H_compensationを現在のフレームに適用することにより、最後のフレームと現在のフレームとの間に発生した自発的な移動を表わす、現在のフレームを修正し(安定化し)たものを生成することができる。簡単に言うと、H_compensationを現在のフレームに適用することにより、そのフレームから無意識の移動を取除く。具体的には、この算出されたH_compensation行列を想定すると、システムは、映像の現在のフレームを取込み、変換プロセスを用いてH_compensation行列をこのフレームに適用し、現在のフレームと同様であるが突然の小さな移動を除外する、新たに生成されたフレームを取得することができるはずである。言い換えると、システムは、現在のフレームをできる限り最後のフレームの近くで維持しようとするが、長期の「自発的な」移動は許可する。
【0041】
補償変換行列は以下の等式を用いて生成することができる。
・H_compensation = Normalize( Normalize( Normalize(H_lowpass) *
H_previous_compensation ) * Inverse(H_interframe))
H_previous_compensation行列は、このプロセスにおいて後に算出されるが、前のフレー
ムのために算出された、H_constrained_compensation行列である。Inverse()は、変換を
反転させることにより最後のフレームの元のバージョンを生成するために使用される行列反転演算である。最後のフレームの元のバージョンをローパスフィルタ行列と組合わせることにより、自発的な移動を許容する。H_previous_compensationと組合わせることによ
り、前の補償値を補償する。
【0042】
Normalize()は、3×3行列をその第2の特異値によって正規化する演算である。正規
化プロセスを実行する理由は、このプロセスのステップのうちのいくつかが、他に良い言葉がないのであるが、現実世界においてあまり意味をなさないであろう変換を生じさせる可能性があるからである。このため、正規化プロセスは、各プロセスステップから妥当な結果が得られることを保証できる。正規化は、プロセスのステップごとに実行されるので、1つのステップの変則的な出力がこのプロセスの残りのステップを汚染することはない(たとえば、この変則的な出力が、これらのステップのうちの残りのステップの出力もゼロの近くに引き寄せるゼロに近い値を与えた場合を想定する)。下記理由により、追加の処理によって映像安定化プロセスの結果を向上させることができる。
【0043】
ボックス240で、コンピューティングシステムは、減速値を算出する。減速値は、カメラが非常に素早く移動し、フレーム間の動きが信頼できない可能性があるので映像安定化が歓迎されなくなったときに、映像安定化をどの程度低減するかを判断するために使用される値であってもよい。映像安定化を低減し得る量を算出するために、フレーム間の移動の速度を先ず算出する。この例において、コンピューティングシステムは、フレームの中心の速度を生成する。x方向の速度は、以下のように、H_interframeの行1列3の要素から取出される(ボックス242)。
・speed_x = H_interframe[1, 3] * aspect_ratio
y方向の速度は、以下のように、H_interframe行列の行2列3の要素から取出される(ボックス242)。
・speed_y = H_interframe[2, 3]
上記aspect_ratioは、frame_widthをframe_heightで除算したものである。これらの速度
の特定は2つのフレーム間の並進移動を説明するだけかもしれないが、他の例において速度は回転、ズーム、またはその他の種類の移動を説明し得る。
【0044】
システムは次に、長期にわたるカメラ(またはシーン)の速度を説明し突然の素早い「無意識の」移動を除外する、ローパス動き速度を決定することができる。これはたとえば以下のように行なわれる。現在の速度を取得し、それを前に(previous)算出したローパス速度(lowpass speed)と組合わせ、さらに、前に算出したローパス速度に対して現在
の速度を逆に重み付けする減衰比(damping ratio)を適用する。
・lowpass_speed_x = lowpass_speed_x_previous * speed_damping_ratio +
speed_x * (1 - speed_damping_ratio)
この等式は実質的に、前に計算した速度を取得し、それを、減衰比によって特定される量だけ減じることにより、ローパス速度を生成する。この低減分は現在の速度によって補償される。このように、映像の現在の速度は、全lowpass_speed値に影響するが、lowpass_speed値における排他的ファクタではない。上記等式は、無限インパルス応答フィルタを表わす。たとえば以下のようにy速度についても同じプロセスを実行してローパスy速度(lowpass y speed)を生成することができる。
・lowpass_speed_y = lowpass_speed_y_previous * speed_damping_ratio +
speed_y * (1 - speed_damping_ratio)
このプロセスの減衰比はユーザによって設定され、その値の一例は0.99である。
【0045】
このプロセスは次に、たとえば以下の等式を用いて、これらの値を組合わせることにより、x方向およびy方向における移動を説明するローパス速度の1つの表現を生成する(ボックス244)。
・lowpass_speed = sqrt(lowpass_speed_x *lowpass_speed_x +
lowpass_speed_y * lowpass_speed_y)
算出されたこのローパス速度は実質的に、長期にわたるフレーム間の移動の速度を表わす。言い換えると、lowpass_speedは、最近の速度変化に対する説明性は低く、より長期の
速度傾向をより十分に説明する。
【0046】
ローパス速度が算出された状態で、システムは、減速値を算出することができる。いくつかの例において、減速値は0と1の間の値であり(その他の境界値も可能)、システムは、ローパス速度と低しきい値および高しきい値との比較に基づいて減速値を生成することができる。ローパス速度(lowpass speed)が低しきい値(low threshold)を下回る場合、減速値(speed reduction)は境界値0に設定してもよい。ローパス速度が高しきい
値(high threshold)を上回る場合、減速値は境界値1に設定してもよい。ローパス速度が2つのしきい値の間であるとき、コンピューティングシステムは、たとえば減速値が境界値0と1の間にある場合は、しきい値の間のローパス速度のスケーリングされた値を表わす減速値を選択してもよい。減速値の算出は、以下のアルゴリズムで表わすことができ
る(ボックス246)。
・lowpass_speed < low_speed_thresholdの場合、speed_reduction = 0
・lowpass_speed > high_speed_thresholdの場合、speed_reduction = max_speed_reduction
・さもなければ、speed_reduction = max_speed_reduction * (lowpass_speed -
low_speed_threshold) / (high_speed_threshold - low_speed_threshold)
このアルゴリズムにより、low_speed_threshold、high_speed_threshold、およびmax_speed_reductionはすべて、ユーザにより特定される。値の例は、low_speed_threshold = 0.008、high_speed_threshold = 0.016、およびmax_speed_reduction = 1.0
を含む。
【0047】
ボックス250で、コンピューティングシステムは歪み低減値を算出する。補償変換は映像フレームに適用されたときに非固定(non-rigid)歪みを過剰に生成し得るので、コ
ンピューティングシステムは歪み低減値を算出してもよい。言い換えると、映像安定化は現実的に見えないかもしれない。たとえばその理由は、1方向において別の方向よりも大きく画像を引き延ばすことにより発生する歪みは、発生するのが速すぎてユーザには異常に見えることにある。
【0048】
歪み低減値を算出するために、コンピューティングシステムは先ず、H_compensation行列におけるズームファクタの値を調べることにより、以下のように補償ズームファクタを算出してもよい。
・zoom_x = H_compensation[1,1] これはH_compensation行列の行1列1の要素
・zoom_y = H_compensation[2,2] これはH_compensation行列の行2列2の要素
ズームファクタは、如何にして変換が画像をある次元において引き延ばすかを特定するファクタであってもよい。
【0049】
次に、コンピューティングシステムは、2つのズームファクタ間の差を求めることにより、以下のように、1方向において別の方向よりも大きく画像を引き延ばすことにより画像が歪む(distortion)程度を求めることができる(ボックス252)。
・distortion=abs(zoom_x-zoom_y)
ローパスフィルタをこの歪みに適用することにより、歪みを変化させることが許容されるレートに制限を課し、したがって、以下の式を用いて歪みの突然の変化を確実に最少にする(ボックス254)。
・lowpass_distortion = previous_lowpass_distortion * distortion_damping_ratio + distortion * (1 - distortion_damping_ratio)
言い換えると、このアルゴリズムは、歪み量をゆっくりと変化させるように構成されている。上記式において、distortion_damping_ratioは、ユーザが指定した歪みIIRフィルタの減衰比である。値の一例は0.99である。
【0050】
ローパス歪みが算出された状態で、コンピューティングシステムは、歪み低減値を算出することができる。いくつかの例において、歪み低減値は0と1の間の値であり(その他の境界値も可能)、システムは、ローパス歪みと低しきい値および高しきい値との比較に基づいて歪み低減値を生成してもよい。ローパス歪みが低しきい値を下回る場合、ローパス低減値は境界値0に設定してもよい。ローパス歪み値が高しきい値を上回る場合、歪み低減値は境界値1に設定してもよい。ローパス歪み値が2つのしきい値の間である場合、しきい値間のローパス歪みのスケーリングされた値を表わす値を選択してもよい(たとえば結果として得られた歪み低減値が境界値0と1の間である場合)。歪み低減値の算出は以下のアルゴリズムで表わすことができる(ボックス256)。
・lowpass_distortion < low_distortion_thresholdである場合、distortion_reduction = 0
・lowpass_distortion > high_distortion_thresholdである場合、max_distortion_reduction
・さもなければ、distortion_reduction = max_distortion_reduction *
(lowpass_distortion - low_distortion_threshold) / (high_distortion_threshold
- low_distortion_threshold)
このアルゴリズムにより、low_distortion_threshold、high_distortion_threshold、お
よびmax_distortion_reductionはすべて、ユーザにより特定される。値の例は、low_distortion_threshold = 0.001、high_distortion_threshold = 0.01、およびmax_distortion_reduction = 0.3を含む。
【0051】
ボックス260で、コンピューティングシステムは、求めた減速値および歪み低減値に基づいて、映像安定化の強度を低減する。そうするために、コンピューティングシステムは、以下のように、この例では減速値(speed reduction value)と歪み低減値(distortion reduction value)の最大値(maximum)として特定される低減値(reduction value
)を算出する(ボックス262)。
・reduction = max(speed_reduction, distortion_reduction)
その他の例では、この低減値は、各値の一部を説明するこれら2つの値の組合わせであってもよい(たとえば、これらの値を合算または乗算し、可能であればその後0.5等の予め定められた値で乗算してもよい)。低減値は、境界値0および1またはその間の値であってもよく、コンピューティングシステムは低減値が1に近づくほど映像安定化の強度を減じてもよい。
【0052】
次に、コンピューティングシステムは、補償変換行列を修正することにより、低減された補償変換行列を生成してもよい(ボックス264)。コンピューティングシステムはこれを、1から低減値(reduction)を減算したもので補償減算行列を乗算することにより
、行なってもよい。言い換えると、低減値が1に非常に近い場合(画像安定化が大幅に低減されることを示す)、補償行列内の値は、ゼロに近い数で乗算されることになるので、大幅に減じられるであろう。次に、修正された補償変換行列内の数字を、低減値(reduction value)で乗算された単位行列(identity matrix)に加算する。等式の一例は次の通りである。
・H_reduced_compensation = Identity * reduction + H_compensation * (1 - reduction)
ボックス270で、コンピューティングシステムは、得られた映像安定化が出力フレームの無効領域(たとえばフレーム外の領域)を示すことがないように、補償を制限してもよい。あるバックグラウンドとして、画像安定化プロセスから得られた画像を補償は歪めるかもしれないので、この画像は実質的にその境界の外側の無効領域を表示する場合がある。これらの無効領域が確実に表示されないようにするために、コンピューティングシステムは、この画像をズームインして、無効領域を含み得る画像の外側を切取ってもよい。
【0053】
ボックス270のプロセスに戻ると、カメラが素早く大幅に移動した場合、安定化は、古い場所の表示に固定される可能性がある。なぜなら、素早い大きな移動はフィルタ処理で落とされる場合があり、そうすると、上記無効領域が安定化後のフレームの表示の中に導入される可能性がある。そのような場合、下記の制限プロセスは、映像が無効領域を表示しようとしている場合に表示されるフレームの領域の完全制御を映像安定化が実質的に停止することを保証できる。この、安定化がフレームの何らかの制御をあきらめる必要があるか否かに関する判断は、最初に出力画像のコーナーポイントを設定し、これらのコーナーポイントが予め指定されたトリミング領域の外側にあるか否か判断することにより、開始されてもよい。補償(compensation)およびズームの最大量は、トリミング比(cropping ratio)の2倍に定めてもよく、このトリミング比はユーザによって指定されてもよい(たとえば両側で15%または以下の等式で0.15)。
・max_compensation = cropping_ratio * 2
コンピューティングシステムは次に、H_reduced_compensation行列を使用することにより、GL座標における単位正方形の4つのコーナー(x01, y01) = (-1, -1)、(x02, y02) = (1, -1)、(x03, y03) = (-1,1)、(x04, y04) = (1,1)を、4つのコーナーポイント(x1,
y1)、(x2, y2)、(x3, y3)、(x4, y4)に変換してもよい。(なお、映像フレームは単位正方形である必要はないが、単位正方形の寸法がGL座標の単位正方形にマッピングされる)。より具体的には、以下の式を用いて(x0i, y0i)を(xi, yi)に変換する。
・dzi * [xi, yi, 1]' = H_reduced_compensation * [x0i, y0i, 1]'
この例において、[x0i, y0i, 1]'は、[x0i, y0i, 1]ベクトルの転置行列である3×1ベ
クトルである。[xi, yi, 1]'は、[xi, yi, 1]ベクトルの転置行列である3×1ベクトル
である。
【0054】
次に、コンピューティングシステムは、以下のようにして、変換された各映像フレームのコーナーから単位正方形のエッジまでの、各方向(左(left)、右(right)、上(top
)および下(bottom))における最大(max)変位量(displacement)を特定することが
できる。
・max_left_displacement = 1 + max(x1, x3)
・max_right_displacement = 1 - min(x2, x4)
・max_top_displacement = 1 + max(y1, y2)
・max_bottom_displacement = 1 - min(y3, y4)
特定された変位量のうちのいずれかが最大補償量(上記のようにトリミング比の2倍であり、単位正方形のズームイン領域の表示領域内に無効領域があることを示す)を上回った場合、無効領域が表示されないように、フレームのコーナーポイントは同じ量だけ単位正方形のエッジからシフトされる。コーナーポイントをシフトするための式はしたがって次の通りである。
・max_left_displacement > max_compensationの場合、4つのコーナーポイントを左に4 max_left_displacement - max_compensationだけシフトし、
・max_right_displacement > max_compensationの場合、4つのコーナーポイントを右にmax_right_displacement - max_compensationだけシフトし、
・max_top_displacement > max_compensationの場合、4つのコーナーポイントを上にmax_top_displacement - max_compensationだけシフトし、
・max_bottom_displacement > max_compensationの場合、4つのコーナーポイントを下にmax_bottom_displacement - max_compensationだけシフトする。
コーナーポイントをシフトすることは、ディスプレイがトリミングされたとしても無効領域が示されていたことを明らかにすることである(ボックス272)。
【0055】
上記すべてのシフト演算後、新たな4つのコーナーポイントは、(x1', y1')、(x2', y2')、(x3', y3')、(x4', y4')と表記することができる。次に、コンピューティングシステムは、制限された補償変換行列H_constrained_compensationを算出する。この行列は、以下のように、GL座標の単位正方形の4つのコーナー(x01, y01) = (-1, -1)、(x02, y02) = (1, -1)、(x03, y03) = (-1,1)、(x04, y04) = (1,1)を、4つの制限されたコーナーポイント(x1', y1')、(x2', y2')、(x3', y3')、(x4', y4')にマッピングする。
・zi' * [xi', yi', 1]' = H_constrained_compensation * [x0i, y0i, 1]'
この例において、[x0i, y0i, 1]'は、[x0i, y0i, 1]ベクトルの転置行列である3×1ベ
クトルである。[xi', yi', 1]'は、[xi', yi', 1]ベクトルの転置行列である3×1ベク
トルである。zi'はスケールファクタである。4対のポイント[x0i, y0i, 1]'および[xi',
yi', 1]'を想定した場合の、行列を推定するためのアルゴリズムの例は、ftp://vista.eng.tau.ac.il/dropbox/aviad/Hartley,%20Zisserman%20-%20Multiple%20View%20Geometry%20in%20Computer%20Vision.pdfから入手できるコンピュータビジョンの書籍「Hartley, R., Zisserman, A.: Multiple View Geometry in Computer Vision. Cambridge Universi
ty Press (2000)」のアルゴリズム4.1(91頁)に記載されている。
【0056】
次に、H_constrained_compensationを、H_previous_compensationとして保存する。こ
れは、ボックス230に関して先に述べたように、次のフレームを安定化するための計算で使用することができる。
【0057】
ボックス280で、コンピューティングシステムは、安定化された画像をズームして境界をトリミングするように、制限された補償行列を修正する。いくつかの例において、コンピューティングシステムは先ず以下のようにズームファクタ(zoom factor)を特定す
る。
・zoom_factor = 1 / (1 - 2 * cropping_ratio)
そうするときに、コンピューティングシステムは、トリミング比(crop ratio)を(たとえば15%値0.15を2倍にして0.3にすることにより)2倍にし、得られた値を1から減算し(たとえばその結果0.7を得る)、次にその結果で1を除算することによりズームファクタを得る(たとえば、1÷0.7=ズームファクタ1.42)。次に、コンピューティングシステムは、以下のように、一定量ディスプレイをズームインするために、制限補償行列の特定の特徴を分割することができる。
・H_constrained_compensation[3,1]=H_constrained_compensation[3,1]/zoom_factor
・H_constrained_compensation[3,2]=H_constrained_compensation[3,2]/zoom_factor
・H_constrained_compensation[3,3]=H_constrained_compensation[3,3]/zoom_factor
ボックス290で、コンピューティングシステムは、トリミングされ安定化された現在のフレームを生成するために、修正された制限補償行列を現在のフレームに適用する。入力フレームに対して制限補償行列(H_constrained_compensation)を適用して出力画像を生成する方法の1例は、次のように説明できる。
・z' * [x', y', 1]' = H_constrained_compensation * [x, y, 1]'
・[x, y, 1]'は、入力フレームにおける座標を表わす3×1ベクトル
・[x', y', 1]'は、出力フレームにおける座標を表わす3×1ベクトル
・z'はスケールファクタ
・H_constrained_compensationは、以下の9要素を含む3×3行列:
【0058】
【数2】
より詳細には、入力フレーム内の画素[x,y]ごとに、上記変換を用いて出力フレームにおける位置[x’,y’]を探し出し、入力フレームにおける[x,y]の画素値を出力フレームにおける[x’,y’]にコピーする。別の方法は、出力フレーム内の画素[x’,y’]ごとに、逆変換を用いて入力フレームにおける位置[x,y]を探し出し、入力画像における[x,y]の画素値を出力フレームにおける[x’,y’]にコピーする。これらの演算は、グラフィックプロセッシングユニット(Graphics Processing Unit:GPT)というコンピューティングシステムにおいて効率的に実施できる。
【0059】
次に、本明細書でボックス210〜290について記載されているプロセスを、次のフレームに対して繰返してもよく、そのときに、現在のフレームの処理の値のうちのいくつかを次のフレームに使用する。
【0060】
さまざまな実装例において、別の動作「に応じて」または別の動作の「結果として」実
行される動作(たとえば決定または特定)は、先行する動作が不成功の場合(たとえば決定がなされなかった場合)は、実行されない。「自動的に」実行される動作は、ユーザの介入(たとえば介入するユーザ入力)なしで実行される動作である。本明細書において条件の表現を用いて記載されている特徴は、任意である実装例を説明している場合がある。いくつかの例において、第1装置から第2装置への「送信」は、第1装置がデータを第2送信による受信のためにネットワークに置くことを含むが、第2装置が当該データを受信することを含まない場合がある。逆に、第1装置からの「受信」は、ネットワークからデータを受信することを含み得るが、第1装置がデータを送信することは含まない場合がある。
【0061】
コンピューティングシステムが「決定する」ことは、コンピューティングシステムが、別のデバイスに対し、その決定を行ない結果を当該コンピューティングシステムに提供することを要求することを、含み得る。加えて、コンピューティングシステムが「表示する」または「提示する」ことは、コンピューティングシステムが、参照された情報を別のデバイスが表示または提示するためのデータを送信することを含み得る。
【0062】
さまざまな実装例において、行列に対して実行されると記載されている演算は、当該行列に対して実行される演算、または、本開示に記載されている動作によって修正された当該行列に対して実行される演算、またはその均等物を意味する。
【0063】
図3は、本明細書に記載のシステムおよび方法を実現するために、クライアントまたはサーバまたは複数のサーバとして使用し得る、コンピューティングデバイス300、350のブロック図である。コンピューティングデバイス300は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、およびその他適切なコンピュータ等の、さまざまな形態のデジタルコンピュータを代表することを意図している。コンピューティングデバイス350は、携帯情報端末、携帯電話、スマートフォン、およびその他同様のコンピューティングデバイス等の、さまざまな形態のモバイルデバイスを代表することを意図している。本明細書に示される構成要素、それらの接続および関係、ならびに機能は、専ら例示を意図しているのであって、本明細書において記載されているおよび/またはクレームされている実装例を限定することを意図しているのではない。
【0064】
コンピューティングデバイス300は、プロセッサ302と、メモリ304と、記憶装置306と、メモリ304および高速拡張ポート310に接続している高速インターフェイス308と、低速バス314および記憶装置306に接続している低速インターフェイス312とを含む。これらのコンポーネント302、304、306、308、310、および312の各々は、さまざまなバスを使用して相互接続されており、共通のマザーボード上にまたは他の態様で適宜搭載されてもよい。プロセッサ302は、コンピューティングデバイス300内で実行される命令を処理可能であり、これらの命令は、GUIのためのグラフィック情報を、高速インターフェイス308に結合されたディスプレイ316等の外部入出力デバイス上に表示するために、メモリ304内または記憶装置306上に格納された命令を含む。他の実装例では、複数のプロセッサおよび/または複数のバスが、複数のメモリおよび複数のタイプのメモリとともに適宜使用されてもよい。加えて、複数のコンピューティングデバイス300が接続されてもよく、各デバイスは(たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)必要な動作の一部を提供する。
【0065】
メモリ304は、情報をコンピューティングデバイス300内に格納する。一実装例では、メモリ304は1つまたは複数の揮発性メモリユニットである。別の実装例では、メモリ304は1つまたは複数の不揮発性メモリユニットである。メモリ304はまた、磁
気ディスクまたは光ディスクといった別の形態のコンピュータ読取可能媒体であってもよい。
【0066】
記憶装置306は、コンピューティングデバイス300のための大容量記憶を提供可能である。一実装例では、記憶装置306は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、または、ストレージエリアネットワークもしくは他の構成におけるデバイスを含むデバイスのアレイといった、コンピュータ読取可能媒体であってもよく、または当該コンピュータ読取可能媒体を含んでいてもよい。コンピュータプログラムプロダクトが情報担体において有形に具体化され得る。コンピュータプログラムプロダクトはまた、実行されると上述のような1つ以上の方法を行なう命令を含んでいてもよい。情報担体は、メモリ304、記憶装置306、またはプロセッサ302上のメモリといった、コンピュータ読取可能媒体または機械読取可能媒体である。
【0067】
高速コントローラ308はコンピューティングデバイス300のための帯域幅集約的な動作を管理し、一方、低速コントローラ312はより低い帯域幅集約的な動作を管理する。機能のそのような割当ては例示にすぎない。一実装例では、高速コントローラ308は、メモリ304、ディスプレイ316に(たとえば、グラフィックスプロセッサまたはアクセラレータを介して)、および、さまざまな拡張カード(図示せず)を受付け得る高速拡張ポート310に結合される。この実装例では、低速コントローラ312は、記憶装置306および低速拡張ポート314に結合される。さまざまな通信ポート(たとえば、USB、Bluetooth(登録商標)、イーサネット(登録商標)、無線イーサネット)を含み得る低速拡張ポートは、キーボード、ポインティングデバイス、スキャナ等の1つ以上の入出力デバイスに、または、スイッチもしくはルータ等のネットワーキングデバイスに、たとえばネットワークアダプタを介して結合されてもよい。
【0068】
コンピューティングデバイス300は、図に示すように多くの異なる形態で実現されてもよい。たとえばそれは、標準サーバ320として、またはそのようなサーバのグループで複数回実現されてもよい。それはまた、ラックサーバシステム324の一部として実現されてもよい。加えて、それは、ラップトップコンピュータ322等のパーソナルコンピュータにおいて実現されてもよい。これに代えて、コンピューティングデバイス300からのコンポーネントは、デバイス350等のモバイルデバイス(図示せず)における他のコンポーネントと組合されてもよい。そのようなデバイスの各々は、コンピューティングデバイス300、350のうちの1つ以上を含んでいてもよく、システム全体が、互いに通信する複数のコンピューティングデバイス300、350で構成されてもよい。
【0069】
コンピューティングデバイス350は、数あるコンポーネントの中でも特に、プロセッサ352と、メモリ364と、ディスプレイ354等の入出力デバイスと、通信インターフェイス366と、トランシーバ368とを含む。デバイス350にはまた、追加の記憶容量を提供するために、マイクロドライブまたは他のデバイス等の記憶装置が設けられてもよい。コンポーネント350、352、364、354、366、および368の各々は、さまざまなバスを使用して相互接続されており、当該コンポーネントのうちのいくつかは、共通のマザーボード上にまたは他の態様で適宜搭載されてもよい。
【0070】
プロセッサ352は、メモリ364に格納された命令を含む、コンピューティングデバイス350内の命令を実行可能である。プロセッサは、別個の複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実現されてもよい。加えて、プロセッサは多数のアーキテクチャのうちのいずれかを用いて実現されてもよい。たとえば、プロセッサは、CISC(Complex Instruction Set Computer:複合命令セットコンピュータ
)プロセッサ、RISC(Reduced Instruction Set Computer:縮小命令セットコンピュータ)プロセッサ、またはMISC(Minimal Instruction Set Computer:最小命令セットコンピュータ)プロセッサであってもよい。プロセッサは、たとえば、ユーザインターフェイス、デバイス350が実行するアプリケーション、およびデバイス350による無線通信の制御といった、デバイス350の他のコンポーネント同士の連携を提供してもよい。
【0071】
プロセッサ352は、ディスプレイ354に結合された制御インターフェイス358およびディスプレイインターフェイス356を介してユーザと通信してもよい。ディスプレイ354は、たとえば、TFT LCD(Thin-Film-Transistor Liquid Crystal Display:薄膜トランジスタ液晶ディスプレイ)、またはOLED(Organic Light Emitting Diode:有機発光ダイオード)ディスプレイ、または他の適切なディスプレイ技術であって
もよい。ディスプレイインターフェイス356は、ディスプレイ354を駆動してグラフィカル情報および他の情報をユーザに提示するための適切な回路を含んでいてもよい。制御インターフェイス358は、ユーザからコマンドを受信し、それらをプロセッサ352に送出するために変換してもよい。加えて、デバイス350と他のデバイスとの近接エリア通信を可能にするために、外部インターフェイス362がプロセッサ352と通信した状態で設けられてもよい。外部インターフェイス362は、たとえば、ある実装例では有線通信を提供し、他の実装例では無線通信を提供してもよく、複数のインターフェイスが使用されてもよい。
【0072】
メモリ364は、情報をコンピューティングデバイス350内に格納する。メモリ364は、1つもしくは複数のコンピュータ読取可能媒体、1つもしくは複数の揮発性メモリユニット、または、1つもしくは複数の不揮発性メモリユニットのうちの1つ以上として実現されてもよい。拡張メモリ374が設けられて拡張インターフェイス372を介してデバイス350に接続されてもよく、拡張インターフェイス372は、たとえばSIMM(Single In Line Memory Module)カードインターフェイスを含んでいてもよい。そのような拡張メモリ374は、デバイス350に余分の格納スペースを提供してもよく、または、デバイス350のためのアプリケーションまたは他の情報も格納してもよい。具体的には、拡張メモリ374は、上述のプロセスを実行または補足するための命令を含んでいてもよく、安全な情報も含んでいてもよい。このため、たとえば、拡張メモリ374はデバイス350のためのセキュリティモジュールとして設けられてもよく、デバイス350の安全な使用を許可する命令でプログラミングされてもよい。加えて、ハッキング不可能な態様でSIMMカード上に識別情報を乗せるといったように、安全なアプリケーションが追加情報とともにSIMMカードを介して提供されてもよい。
【0073】
メモリはたとえば、以下に説明されるようなフラッシュメモリおよび/またはNVRAMメモリを含んでいてもよい。一実装例では、コンピュータプログラムプロダクトが情報担体において有形に具体化される。コンピュータプログラムプロダクトは、実行されると上述のような1つ以上の方法を実行する命令を含む。情報担体は、メモリ364、拡張メモリ374、またはプロセッサ352上のメモリといった、コンピュータ読取可能媒体または機械読取可能媒体であり、たとえばトランシーバ368または外部インターフェイス362を通して受信されてもよい。
【0074】
デバイス350は、必要に応じてデジタル信号処理回路を含み得る通信インターフェイス366を介して無線通信してもよい。通信インターフェイス366は、とりわけ、GSM(登録商標)音声通話、SMS、EMS、またはMMSメッセージング、CDMA、TDMA、PDC、WCDMA(登録商標)、CDMA2000、またはGPRSといった、さまざまなモードまたはプロトコル下での通信を提供してもよい。そのような通信は、たとえば無線周波数トランシーバ368を介して生じてもよい。加えて、Bluetoo
th、Wi−Fi(登録商標)、または他のそのようなトランシーバ(図示せず)等を使
用して、短距離通信が生じてもよい。加えて、GPS(Global Positioning System:全
地球測位システム)レシーバモジュール370が、追加のナビゲーション関連および位置関連無線データをデバイス350に提供してもよく、当該データは、デバイス350上で実行されるアプリケーションによって適宜使用されてもよい。
【0075】
デバイス350はまた、ユーザから口頭情報を受信してそれを使用可能なデジタル情報に変換し得る音声コーデック360を使用して、音声通信してもよい。音声コーデック360はまた、たとえばデバイス350のハンドセットにおいて、スピーカを介すなどして、ユーザに聞こえる音を生成してもよい。そのような音は、音声電話通話の音を含んでいてもよく、録音された音(たとえば、音声メッセージ、音楽ファイル等)を含んでいてもよく、デバイス350上で動作するアプリケーションが生成する音も含んでいてもよい。
【0076】
コンピューティングデバイス350は、図に示すように多くの異なる形態で実現し得る。たとえばそれは、携帯電話380として実現されてもよい。それはまた、スマートフォン382、携帯情報端末、または他の同様のモバイルデバイスの一部として実現されてもよい。
【0077】
加えて、コンピューティングデバイス300または350は、ユニバーサルシリアルバス(Universal Serial Bus:USB)フラッシュドライブを含み得る。USBフラッシュドライブは、オペレーティングシステムおよびその他のアプリケーションを格納し得る。USBフラッシュドライブは、別のコンピューティングデバイスのUSBポートに挿入し得るUSBコネクタまたは無線送信機等の入出力コンポーネントを含み得る。
【0078】
本明細書に記載のシステムおよび手法のさまざまな実装例は、デジタル電子回路、集積回路、特別に設計されたASIC(application specific integrated circuit:特定用
途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組合わせで実現することができる。これらのさまざまな実装例は、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムにおける実装例を含んでいてもよく、当該プロセッサは専用であっても汎用であってもよく、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信するとともに、これらにデータおよび命令を送信するように結合されてもよい。
【0079】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている)は、プログラマブルプロセッサのための機械命令を含み、高レベル手続き型および/またはオブジェクト指向プログラミング言語で、および/またはアセンブリ/機械言語で実現することができる。本明細書で使用する、「機械読取可能媒体」、「コンピュータ読取可能媒体」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラムプロダクト、装置および/またはデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(Programmable Logic Device:PL
D))を指し、機械命令を機械読取可能信号として受信する機械読取可能媒体を含む。「機械読取可能信号」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【0080】
ユーザとのインタラクションを提供するために、本明細書に記載のシステムおよび手法は、情報をユーザに表示するためのディスプレイデバイス(たとえば、CRT(cathode ray tube:陰極線管)またはLCD(liquid crystal display:液晶ディスプレイ)モニタ)と、ユーザが入力をコンピュータに提供できるようにするキーボードおよびポインテ
ィングデバイス(たとえば、マウスまたはトラックボール)とを有するコンピュータ上で実現することができる。他の種類のデバイスを使用してユーザとの対話を提供することもでき、たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であってもよく、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受信されてもよい。
【0081】
本明細書に記載のシステムおよび手法は、(たとえばデータサーバとしての)バックエンドコンポーネントを含む、またはミドルウェアコンポーネント(たとえばアプリケーションサーバ)を含む、またはフロントエンドコンポーネント(たとえば、ユーザが本明細書に記載のシステムおよび手法の実装例とやりとりできるようにするグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータ)を含む、もしくは、そのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの任意の組合わせを含む、コンピューティングシステムにおいて実現することができる。システムのコンポーネントは、任意の形態または媒体のデジタルデータ通信(たとえば通信ネットワーク)によって相互接続されてもよい。通信ネットワークの例は、ローカルエリアネットワーク(local area network:LAN)、ワイドエリアネットワーク(wide
area network:WAN)、ピアツーピアネットワーク(アドホックまたは静的メンバを
有する)、グリッドコンピューティングインフラストラクチャ、およびインターネットを含む。
【0082】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは一般に互いにリモートであり、典型的には通信ネットワークを介してやりとりする。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって生じる。
【0083】
ここまでいくつかの実装例を詳細に説明してきたが、その他の修正形態が可能である。また、本明細書に記載のシステムおよび方法を実施するためのその他の機構を使用することもできる。加えて、図面に示されている論理フローは、所望の結果を得るために、示されている通りの順序または一連の順序である必要はない。記載されているフローにその他のステップを設けるまたは記載されているフローからいくつかのステップを削除する場合もあり、記載されているシステムにその他のコンポーネントを追加するまたは記載されているシステムからコンポーネントを削除する場合もある。したがって、その他の実装例は、以下の特許請求の範囲に含まれる。
図1
図2A
図2B
図3