(58)【調査した分野】(Int.Cl.,DB名)
前記OIS位置データを受信することは、前記OISシステムの可動レンズの位置を示すレンズのシフトデータを受信することを含み、前記デバイス位置データを受信することは、前記記録デバイスのジャイロスコープまたは加速度計から方位または移動データを受信することを含む、請求項1に記載のビデオ安定化のための方法。
前記OIS位置データは、一連のフレーム内の各フレームに関する複数のOIS位置読み取り値を示し、前記デバイス位置データは、一連のフレーム内の各フレームに関する複数のデバイス位置測定値を示す、請求項1または2に記載のビデオ安定化のための方法。
一組の複数のフレームに亘る記録デバイスの一貫した移動中に発生する位置を表すカメラ位置を決定することをさらに含み、前記第2の変換は、カメラの一貫した移動中に発生する位置を表すカメラ位置に基づいて決定される、請求項1乃至9のいずれか1項に記載のビデオ安定化のための方法。
前記カメラ位置は、特定のフレームの前の1つまたは複数のフレームと、特定のフレームの後の1つまたは複数のフレームとを含む一組のフレームに対応するデータに対して安定したフィルタリングを適用することによって生成される、請求項10に記載のビデオ安定化のための方法。
特定のフレームの前の1つまたは複数のフレームと、特定のフレームの後の1つまたは複数のフレームとを含む一組のフレームに亘るカメラ位置の分析に基づいて、前記記録デバイスの一貫した移動の確率を決定すること、
(i)カメラの一貫した移動中に発生する位置を表すカメラ位置と、(ii)特定のフレームに関する第2のカメラ位置とをブレンドすること
をさらに含み、前記カメラ位置は、決定された前記確率に従ってブレンドされ、前記第2の変換は、前記カメラ位置および前記第2のカメラ位置をブレンドした結果に基づいて決定される、請求項10または11に記載のビデオ安定化のための方法。
特定のフレームのスキャンラインの適切なサブセットの各々について、出力フレームに関するスキャンラインのマッピングまたはスキャンラインに関する仮想カメラ位置を決定すること、
スキャンラインの適切なサブセットに関して決定されたマッピング間で補間することにより、またはスキャンラインの適切なサブセットに関して決定された仮想カメラ位置間で補間することにより、特定のフレームの各スキャンラインに関するマッピングを決定すること
をさらに含む、請求項1乃至16のいずれか1項に記載のビデオ安定化のための方法。
【発明の概要】
【0003】
ビデオ安定化システムは、OISとEISの組み合わせを使用してビデオを安定化することができる。OISモジュールは、ビデオキャプチャ中にフレームを安定させることができ、OISモジュールからの位置情報(例えば、レンズのシフト情報)をキャプチャして、EIS処理において使用することができる。OISレンズのシフト位置を使用することにより、安定化処理は、OISシステムによって生じる歪みを補正するとともに、OISシステムによってすでに補正された調整または動きを回避することができる。
【0004】
ビデオキャプチャ中に、システムは、記録デバイスのジャイロスコープから記録デバイスに関する位置データを取得することもできる。システムは、EIS処理中にデバイス位置データとOIS位置データとを使用して、キャプチャ中の記録デバイスの実際の姿勢と、OISによって生じるカメラビューの調整とを考慮することができる。結果として、EIS処理は、OISモジュールの動作(例えば、内部レンズの移動)に起因する画像シフトとともに、記録デバイス全体の動き(例えば、カメラのぶれまたは記録デバイスの他の外因性移動)を補正することができる。これにより、システムは、キャプチャされた画像データと実際のシーンとの間の関係をより正確に判断して、入力フレームから安定した出力フレームをより正確に生成することを可能にすることができる。
【0005】
ビデオ安定化システムは、他の様々な手法を使用して、高品質の安定化を提供することができる。例えば、フレームを処理するとき、システムは将来のフレーム(例えば、後でキャプチャされたフレームまたは先読みフレーム)を使用して、可能性のある大きな動きを検出し、大きな動きが発生する前でも、補正を開始することができる。これにより、一連のフレームにおける突発的な動き変化を回避することができる。ビデオキャプチャにより実質的にリアルタイムで安定化を実行する場合でも、フレームキャプチャとEIS処理との間にわずかな遅延を実行することにより、将来のフレームの分析を実行して、適切な数の後にキャプチャされたフレームを以前のキャプチャされたフレームの安定化に利用可能にすることが可能となるようにすることができる。別の例として、システムは、フレームの異なる領域がキャプチャされたときに、異なるカメラ位置を考慮することによってローリングシャッタ歪みを補正することができる。安定した出力フレームが異なる領域を正しく整列させるように、例えば、異なるスキャンラインなど、キャプチャされたフレームの異なる領域に対して異なる画像変換を適用することができる。別の例として、システムは、焦点の変化によるカメラレンズの動きを検出することができるとともに、焦点の変化に伴うことが多い有効焦点距離の変化によって生じる起因するパースペクティブ(perspective)の変化(例えば、フォーカスブリージング(focus breathing))を除去することができる。別の例として、システムは、カメラのモーションブラーを見積もり、EISを使用して推定されたモーションパスを、ブラーによって示される動きに整列することができる。
【0006】
概略的な一態様では、方法は、コンピューティングシステムが、光学式画像安定化(OIS)システムを使用して記録デバイスによってキャプチャされたビデオの一連のフレームを受信するステップと、コンピューティングシステムが、(i)一連のフレームのキャプチャ中のOISシステムの位置を示すOIS位置データ、および(ii)一連のフレームのキャプチャ中の記録デバイスの位置を示すデバイス位置データを受信するステップと、コンピューティングシステムが、一連のフレームにおける特定のフレームに関する第1の変換を決定するステップと、第1の変換は、特定のフレームに関するOIS位置データおよび特定のフレームに関するデバイス位置データに基づいて決定され、コンピューティングシステムが、特定のフレームの後にキャプチャされた一連のフレームにおける1つまたは複数のフレームについて、第1の変換と、デバイス位置データに基づいて決定された記録デバイスの位置とに基づいて特定のフレームに関する第2の変換を決定するステップと、コンピューティングシステムが、第2の変換を使用して特定のフレームの安定化バージョンを生成するステップとを含む。
【0007】
実施形態は、以下の特徴の1つまたは複数を含むことができる。例えば、記録デバイスおよびコンピューティングシステムは、単一のデバイスに統合されてもよい。
いくつかの実施形態では、コンピューティングシステムおよび記録デバイスは両方とも携帯電話の一部である。
【0008】
いくつかの実施形態では、OIS位置データを受信することは、OISシステムの可動レンズの位置を示すレンズのシフトデータを受信することを含み、デバイス位置データを受信することは、記録デバイスのジャイロスコープまたは加速度計から方位または移動データを受信することを含む。
【0009】
いくつかの実施形態では、OIS位置データは、一連のフレームにおける各フレームに関する複数のOIS位置読み取り値を示す。デバイス位置データは、一連のフレームにおける各フレームに関する複数のデバイス位置測定値を示す。
【0010】
いくつかの実施形態では、方法は、特定のフレームに対応するレンズの焦点位置を決定することを含む。特定のフレームに関する第1の変換は、レンズの焦点位置を使用して決定される。
【0011】
いくつかの実施形態では、方法は、OIS位置データによって示されるOISシステムの可動要素の位置に基づいて特定のフレームの画像オフセットを決定することを含む。特定のフレームに関する第1の変換は、画像オフセットを使用して決定される。
【0012】
いくつかの実施形態では、方法は、OIS位置データおよびデバイス位置データに基づいて、一組の複数のフレームに亘って発生する一組のカメラ位置を決定することと、一組の複数のフレームは、特定のフレームの前の1つまたは複数のフレームと、特定のフレームの後の1つまたは複数のフレームとを含み、一組のカメラ位置にフィルタリングを適用することとを含む。第2の変換は、一組のカメラ位置にフィルタリングを適用することに基づいて決定されたカメラ位置に基づいて決定される。
【0013】
いくつかの実施形態では、方法は、一組のカメラ位置にフィルタリングを適用した出力から特定のフレームに関する中間カメラ位置を決定することと、中間カメラ位置と特定のフレームの直前のフレームに関する仮想カメラ位置と比較することとを含む。第2の変換は、中間カメラ位置と特定のフレームの直前のフレームに関する仮想カメラ位置との比較に基づいて決定されたカメラ位置に基づいて決定される。
【0014】
いくつかの実施形態では、方法は、特定のフレームにおけるモーションブラーの量を特徴付けるデータを生成することを含む。第2の変換は、特定のフレームにおけるモーションブラーの量を特徴付けるデータを使用して決定されたカメラ位置に基づいて決定される。
【0015】
いくつかの実施形態では、特定のフレームにおけるモーションブラーを特徴付けるデータを生成することは、特定のフレームの露光の開始に対して決定された射影行列と、特定のフレームの露光の終了に対する射影行列とに基づいてモーションブラーカーネルを推定することを含む。
【0016】
いくつかの実施形態では、方法は、一組の複数のフレームに亘る記録デバイスの一貫した移動(consistent movement)中に発生する位置を表すカメラ位置を決定することを含む。第2の変換は、カメラの一貫した移動中に発生する位置を表すカメラ位置に基づいて決定される。
【0017】
いくつかの実施形態では、カメラ位置は、特定のフレームの前の1つまたは複数のフレームと、特定のフレームの後の1つまたは複数のフレームとを含む一組のフレームに対応するデータに対して安定したフィルタリングを適用することによって生成される。
【0018】
いくつかの実施形態では、この方法は、特定のフレームの前の1つまたは複数のフレームと、特定のフレームの後の1つまたは複数のフレームとを含む一組のフレームに亘るカメラ位置の分析に基づいて、記録デバイスの一貫した移動の確率を決定することと、(i)カメラの一貫した移動中に発生する位置を表すカメラ位置と、(ii)特定のフレームに関する第2のカメラ位置と、をブレンドすることとを含み、カメラ位置は、決定された確率に従ってブレンドされる。第2の変換は、カメラ位置および第2のカメラ位置をブレンドした結果に基づいて決定される。
【0019】
いくつかの実施形態では、一貫した移動の確率は、一組のフレームに対応するカメラ位置からサブサンプリングされた一組のカメラ位置に対する線形回帰を使用して決定される。第2のカメラ位置は、特定のフレームにおけるブラーの量を示すデータを使用して決定される。
【0020】
いくつかの実施形態では、特定のフレームに関する第2の変換を決定することは、特定のフレームおよび特定のフレームの後に発生する1つまたは複数のフレームを含む参照セット内の各参照フレームについて、フレームに対応するデバイス位置データおよびOIS位置データに基づいてフレームの画像データの射影を決定することと、特定のフレームの射影画像データを出力フレームにマッピングする特定のフレームに関する変換を決定することと、参照セット内の各参照フレームについて、特定のフレームに関して決定された変換が、参照フレームに適用されたときに、出力フレームのピクセルの各々を定義しているかどうかを判定することと、決定された変換を射影画像データに適用しても出力フレームのピクセルの各々が定義されない少なくとも1つの参照フレームを特定することと、特定のフレームに対して決定されたカメラ位置と、少なくとも1つの参照フレームに対して決定されたカメラ位置との間の最小遷移量を特定することと、特定された最小遷移量を使用して決定されたカメラ位置に関する第2の変換を決定することとを含み、第2の変換は、参照セット内の参照フレームの各々の射影に適用されたときに、第2の変換が画像データを出力フレームのピクセルの各々にマッピングするように決定される。
【0021】
いくつかの実施形態では、この方法は、特定のフレームに関する現在の遷移量を決定することと、現在の遷移量は、特定のフレームの直前のフレームに対して決定されたカメラ位置と、特定のフレームに対して決定されたカメラ位置との間の差を示しており、特定のフレームの後に発生する1つまたは複数の将来のフレームの各々に関する将来の遷移量を決定することと、各将来の遷移量は、特定のフレームに対して決定されたカメラ位置と、将来のフレームの1つに対して決定されたカメラ位置との間の差を示しており、現在の遷移量と将来の遷移量の中から、カメラ位置における最大の差を示す最大の遷移量を特定することと、特定された最大の遷移量に基づいてカメラ位置を決定することとを含む。第2の数学的変換は、決定されたカメラ位置を使用して決定される。
【0022】
いくつかの実施形態では、特定された最大の遷移量に基づいてカメラ位置を決定することは、最大の遷移量が、1つまたは複数の将来のフレームの特定の将来のフレームに対応していると判断することと、特定のフレームに関するカメラ位置を、特定の将来のフレームに関するカメラ位置に向けて調整することとを含み、特定のフレームに関するカメラ位置は、特定のフレームのキャプチャと、特定の将来のフレームのキャプチャとの間の時間量に応じてスケーリングされる量で調整される。
【0023】
いくつかの実施形態では、方法は、特定のフレームのスキャンラインの適切なサブセットの各々について、出力フレームに関するスキャンラインのマッピングまたはスキャンラインに関する仮想カメラ位置を決定することと、スキャンラインの適切なサブセットに関して決定されたマッピング間で補間することにより、またはスキャンラインの適切なサブセットに関して決定された仮想カメラ位置間で補間することにより、特定のフレームの各スキャンラインに関するマッピングを決定することとを含む。
【0024】
いくつかの実施形態では、第1の変換は、特定のフレームを画像にマッピングする第1の射影行列であり、第2の変換は、中間空間内の画像を特定のフレームの安定化バージョンに射影するための第2の射影行列である。
【0025】
これらの態様の他の実施形態は、非一時的な機械可読記憶デバイス上にエンコードされた、方法の動作を実行するように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。1つまたは複数のデバイスのシステムは、処理中にシステムに動作を実行させる、システム上にインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによって構成することができる。1つまたは複数のコンピュータプログラムは、データ処理装置による実行時に、装置に動作を実行させる命令を有するように構成することができる。
【0026】
様々な実施形態により、以下の利点の1つまたは複数が提供され得る。例えば、ビデオ映像の品質は、ぶれ、ブラー、およびその他の動きを低減することで向上させることができる。OIS技術とEIS技術を組み合わせることにより、安定化されたビデオは、いずれかの技術を単独で使用するよりも滑らかになる。OISは、個々のフレームのカメラのモーションブラーを大幅に削減し、複数のフレームに亘る動きを削減することができる。EISは、記録デバイスの移動を追跡するジャイロスコープセンサからのデータを使用して、一連のビデオフレームに見られる動きをさらに低減することができる。EIS処理は、またレンズのシフト情報などのOIS位置データを使用して、画像データを安定化された出力フレームにマッピングする際の精度を高めることができる。システムは、OIS位置データとデバイスジャイロスコープセンサとを併用して、カメラ位置を推定することができる。これにより、EIS処理は、OISモジュールによって既に相殺されたデバイスの動きに対する補正を回避することができ、また、EISが、望ましくないOISの移動(例えば、パンニングと干渉する移動、歪みを導入する移動、またはデバイスの動きに対応しない動き)を補正することも可能にする。
【0027】
いくつかの実施形態では、システムは、EIS処理の精度を高めるために先読みフレームを使用して、大きな動きや突発的な動きの影響を軽減することができる。後続のフレームの分析に基づいて、ビデオフレームを調整して、動きが発生する前に動きの大きな変化に漸次的に備えることができる。システムは、パンニングなどの一貫した移動が発生しているかどうかを算定し、一貫した移動を反映するようにビデオフレームを調整することができる。ローリングシャッタ歪みを軽減または除去することができる。フォーカスブリージングによるパースペクティブの変化を軽減または排除することができる。
【0028】
いくつか実施形態では、システムは、ビデオをキャプチャしながら、リアルタイムまたは実質的にリアルタイムの処理を提供することができる。例えば、記録された映像にEIS処理が適用されるように、ビデオ映像の記録中にEIS処理を発生させることができる。さらに、説明される技術は、計算的に実行可能で、かつ携帯電話などのバッテリ駆動のモバイル電子デバイス上で電力効率の良い方法で実行することができる。
【0029】
本明細書に記載される主題の1つまたは複数の実施形態の詳細は、添付の図面および以下の説明に記載される。本主題の他の特徴、態様、および利点は、明細書、図面、および特許請求の範囲から明らかになるであろう。
【発明を実施するための形態】
【0031】
様々な図面の同様の参照番号および部材名称は、同様の構成要素を示している。
図1は、ビデオ安定化のための一例のシステム100を示す図である。システム100は、OISモジュール115を有するカメラモジュール110を含む記録デバイス102を含む。記録デバイス102は、ビデオフレームをキャプチャしつつ、OISモジュール115を使用して、フレームキャプチャ中の記録デバイス102の動きを少なくとも部分的に相殺する(counteract)。記録デバイス102は、1つまたは複数のデバイス位置センサ120、1つまたは複数のデータ記憶デバイス130、およびEISモジュール155をも含む。
【0032】
記録デバイス102は、カメラモジュールを含む、携帯電話、タブレットコンピュータ、カメラなどの様々なタイプのいずれかとすることができる。記録デバイス102は、ソフトウェア、ハードウェア、またはそれらのいくつかの組み合わせで実行され得る、EISモジュール155の動作を実行するためのコンピューティングシステムを含むことができる。例えば、記録デバイス102は、例えば、1つまたは複数のプロセッサ、1つまたは複数の実行可能な命令を格納している1つまたは複数のデータ記憶デバイス、メモリ、入出力コンポーネントなどの様々な処理コンポーネントを含み得る。EIS処理を実行するプロセッサは、汎用プロセッサ(例えば、携帯電話またはその他のデバイスのメインCPU)、グラフィックプロセッサ、コプロセッサ、画像プロセッサ、固定機能EISプロセッサ、またはそれらの任意の組み合わせを含み得る。
【0033】
EISモジュール155は、デバイス位置センサ120およびOISモジュール115の両方からの位置データを使用して、記録デバイスによってキャプチャされたビデオを安定化させる。例えば、OISモジュール115からの位置データを使用して、デバイス位置データから推測される予想されるカメラビューに関して、OIS移動の効果を表すオフセットを決定することができる。これにより、OISモジュール115がデバイス位置に対してシーンのカメラのビューを変化させても、EISモジュール
155は画像センサの実際のビューを反映する有効なカメラ位置を推定することが可能となる。本明細書で説明する他の特徴とともに、これらの技術により、記録デバイス102がOISおよびEIS処理を同時に効果的に使用し、両方の技術の利点を実現することが可能となる。
【0034】
一般に、OISは、カメラのぶれによる個々のフレーム内のぶれを低減するのに非常に効果的であり、OISは、一連のフレームに亘って現れる動きを低減するのに幾分効果的である。しかしながら、OISを単独で使用すると、多くの場合、様々な制限が課される。OISモジュールは、動きに応答する速度と、補正できる動きの大きさとが制限され得る。さらに、OISモジュールの動作により、不安定なビデオなどの歪みが発生する場合があり、パンニングなどの所望の動きを不正確に相殺し得る。EISモジュール155は、OISモジュールの内部移動を記述する位置データを使用して、これらの制限の影響を軽減することができる。
【0035】
OISモジュール115は、記録デバイスの移動を補正しようと試みるため、デバイスの動きのみでは、ビデオキャプチャ中に使用される真のカメラビューを示し得ない。EIS処理がデバイスの動きのみに基づいて移動を補正しようと試みる場合、EIS処理は、OISシステムによってすでに補正された動きを補正し得る。さらに、OISは、通常、デバイスの動きの影響を部分的にのみ除去し、補正量がフレームごとに異なる。高品質の安定化を提供するために、EISモジュール155は、デバイスのレベル位置データとともにOIS位置データを使用して、各フレームに適用される安定化量を変更し、いくつかの実施形態では、フレームの個々のスキャンラインについても同様に変更する。この処理により、効果的な安定化を提供するとともに、ビデオ映像における歪みを低減または除去することが可能になる。例えば、フレームのキャプチャ中にOISレンズのシフト位置を変更すると、特に、多くのカメラモジュールで典型的なローリングシャッタと組み合わせた場合に、歪みが生じ得る。フレームキャプチャ中の異なる時点でのOISレンズのシフトに関する情報により、EISモジュール155は、フレームの異なる部分がキャプチャされたときのレンズ位置を推定して、画像を修正することができる。EISモジュール155は、パンニングと干渉するか、それ以外に望ましくないOISレンズのシフトの影響を低減するように補正することもできる。
【0036】
EISモジュール155がビデオを向上させることができる別の方法は、引き続きキャプチャされるフレームのデータの分析によるものである。特定のフレームを処理するために、EIS処理モジュールは、1つまたは複数の将来のフレームがキャプチャされた時間を含むタイムウィンドウ内の一組のカメラ位置を見積もり得る。将来のフレームおよび対応する位置に関する情報は、様々な形で使用することができる。第1に、EISモジュール155は、一組のカメラにフィルタリングを適用して、フレームを変更するための画像変換を定義するために使用される動きパターンを滑らかにすることができる。第2に、EISモジュール155は、一組のカメラを使用して、一貫性のある移動(例えば、パンニング)が存在するか、または一貫性のある移動の試みがなされた可能性を算定し、可能性があれば、この動きと一致するようにフレームを調整することができる。第3に、EISモジュール155は、将来のカメラ位置に対するフレーム用のカメラ位置を算定し、将来の大きな動きに合わせて調整することができる。例えば、将来のフレームについて大きく急速な移動が識別された場合、EISモジュール155は、動きが始まる前に、フレームのコンテンツの調整を開始することができる。EISモジュール155は、数フレームに亘って大きな見かけの動きを可能にするのではなく、動きをより大きなフレームに亘って広げることができ、それにより、初期フレーム中に増分画像シフト(incremental image shifts)が生じて、より多くのフレームに亘って移動が徐々に広がるようになる。
【0037】
EISモジュール155は、例えば、画像フレームの各スキャンラインに適用される変換を変更するなど、出力フレームの領域合成を実行する。これにより、システムは、ローリングシャッタ歪み、OISモジュール115の移動、および単一フレームのキャプチャ期間内に発生する様々なデバイスの動きを補正することができる。
【0038】
さらに
図1を参照すると、記録デバイス102は、ビデオデータをキャプチャするカメラを有する任意の適切なデバイス、例えば、カメラ、携帯電話、スマートフォン、タブレットコンピュータ、ウェアラブルコンピュータ、または他のデバイスとすることができる。
図1の例は、ビデオをキャプチャしてビデオを処理する単一のデバイスを示しているが、オプションで、機能が複数のデバイスまたはシステムに分散されてもよい。例えば、第1のデバイスは、ビデオフレームをキャプチャし、位置データやその他のパラメータをメタデータとして記録する。第1のデバイスは、ビデオフレームおよびメタデータを、本明細書で説明するEIS処理を実行することができる第2のデバイス、例えば、ローカルコンピューティングシステムまたはリモートサーバに提供することができる。
【0039】
カメラモジュール110は、レンズ素子、画像センサ、センサ読み取り回路、および他のコンポーネントを含むことができる。OISモジュール115は、センサ、可動要素、プロセッサ、および可動要素を移動させる駆動機構を含むことができる。可動要素は、カメラモジュール110の光路に配置されている。例えば、可動要素は、反射要素または屈折要素、例えば、レンズ、ミラー、プリズムであり得る。いくつかの実施形態では、可動要素はカメラモジュール110の画像センサである。センサは、動きを検出する1つまたは複数のジャイロスコープまたはその他のセンサを含むことができる。プロセッサは、可動要素がセンサによって示される動きを補正するために必要な移動の量および方位を決定し、次に、可動要素を移動させるように駆動機構に指示する。
【0040】
記録デバイス102は、記録デバイス102の方位の変化を測定する1つまたは複数の位置センサ120を含む。いくつかの実施形態では、記録デバイス102の位置センサ120は、OISモジュール115によって使用されるセンサとは別個のものである。位置センサ120は、1つまたは複数の軸を中心とした記録デバイス102の回転を検出することができる。例として、デバイス位置センサ120は、3軸ジャイロスコープまたは慣性測定ユニット(IMU:inertial measurement unit)であり得る。デバイスの位置を決定するために他のセンサが、追加的または代替的に使用され得る。例えば、1つまたは複数の加速度計、一軸ジャイロスコープ、二軸ジャイロスコープなどを使用して、記録デバイス102の位置を決定してもよい。一般に、記録デバイス102の回転位置を決定することを可能にする任意の適切なセンサまたはセンサの組み合わせを使用することができる。
【0041】
場合によっては、記録デバイス
102の別個の位置センサ120を使用することに加えて、またはその代わりに、OISモジュール115のジャイロスコープセンサからの位置データをキャプチャして格納してもよい。それでもなお、記録デバイス102がOISセンサとは異なる特性を有するジャイロスコープセンサを使用することは有益である。例えば、記録デバイス102用のジャイロスコープセンサは、毎秒100度を超える感知可能な回転範囲で約400Hzの速度で測定値を提供し得る。デバイスのレベルセンサと比較して、OISモジュールの典型的なジャイロスコープセンサは、異なる速度および異なる範囲、例えば、毎秒5000個の測定速度以上で、毎秒約10度の感知可能な回転範囲で測定値を提供し得る。いくつかの実施形態では、(例えば、小さな変化または高周波パターンを検出するための)OISモジュールセンサのより頻繁な測定と同様に、(例えば、大きな動きを記述するための)デバイスのレベルセンサのより大きな回転範囲を有することは、有益である。従って、両方のタイプのデータを共に使用して、記録デバイス102の位置を決定してもよい。
【0042】
記録デバイス102は、カメラモジュール110およびフレームキャプチャプロセスを特徴付ける情報を格納する1つまたは複数のデータ記憶デバイス130を含む。例えば、格納されたデータは、OISモジュール115の位置と画像データにおいて結果的に生じるオフセットとの間の関係を示す較正データ132を含むことができる。同様に、較正データ132は、システムがフォーカスブリージング(focus breathing)を考慮できるようにする、カメラモジュールレンズの焦点位置とそれらの焦点位置の有効焦点距離との対応を示すことができる。格納されたデータは、カメラモジュール110における画像センサのリードアウト特性を示すスキャンパターンデータ134を含むことができる。例えば、スキャンパターンデータ134は、例えば、スキャンニングの方向(例えば、上から下に読み取られるスキャンライン)、スキャンラインが個別に読み取られるか、またはグループで読み取られるか、およびその他、を示し得る。
【0043】
ビデオキャプチャ中に、カメラモジュール110、OISモジュール115、およびデバイス位置センサ120は、それぞれビデオキャプチャプロセスに関する情報を提供する。カメラモジュール110は、ビデオフレームデータ142、例えば、一連のビデオ画像フレームを提供する。また、カメラモジュール110は、フレーム露光データ144を提供し、フレーム露光データ144は、キャプチャされた各フレームに関して、露光期間の表示、および露光が発生した時期を示す基準時間(例えば、露光の開始時間または終了時間)を含むことができる。カメラモジュール110はまた、各キャプチャされたフレームに対するレンズ焦点位置を示すレンズ焦点位置データ146を提供する。
【0044】
OISモジュール115は、ビデオキャプチャ中の様々な時間におけるOISモジュール115の可動要素の位置を示すOIS位置データ148を提供する。例えば、可動要素が動きを補正するためにシフトする可動レンズである場合、OISモジュール115は、可動レンズの現在の位置を指定するレンズシフト読み出しを提供することができる。記録デバイス102は、レンズのシフト位置および位置が発生した時間を記録することができる。いくつかの実施形態では、OIS位置データ148は、各ビデオフレーム露光の期間に亘って複数の測定が行われるように、高頻度(例えば、ビデオキャプチャのフレームレートよりも高いレート)でキャプチャされる。
【0045】
デバイス位置センサ120は、ビデオキャプチャ中の記録デバイス102の回転および/または他の移動を示すデバイス位置データ150を提供する。デバイスの位置は、例えば、200Hz以上の高周波数で測定することができる。従って、多くの場合、各ビデオフレームのキャプチャ中に複数の異なる時間に関して測定値を取得することができる。
【0046】
レンズ焦点位置データ146、OIS位置データ148、およびデバイス位置データ150はすべて、指定された位置が発生した時間を示すタイムスタンプとともに記録することができる。タイムスタンプは、例えば、様々な位置測定値から得られたデータを時間内に整列することができるように、ミリ秒の単位で正確に作成することができる。さらに、測定値間の時間における値を決定するために、デバイス、OISシステム、またはレンズフォーカス機構の位置を補間することができる。
【0047】
データキャプチャの潜在的なタイミングの例をチャート152に示す。図示されるように、デバイスおよびOISシステムの複数の位置を各ビデオフレームに対して決定することができるように、デバイス位置データ150(例えば、ジャイロスコープデータ)およびOIS位置データ148(例えば、レンズのシフト位置データ)は、ビデオキャプチャフレームレート(例えば、毎秒30フレーム、毎秒60フレームなど)よりも高いレートでキャプチャされる。レンズ焦点位置データ146は、画像フレームごとに少なくとも1回キャプチャされ得る。位置データは、フレーム露光に対して非同期にキャプチャされる。例えば、ジャイロセンサデータおよびOIS位置データは、画像フレームの露光の開始または終了を超えるレートでサンプリングされ、かつ画像フレームの露光の開始または終了と必ずしも同期しないレートでサンプリングされる。
【0048】
カメラモジュール110および他のコンポーネントから取得されたデータは、処理のためにEISモジュール155に提供される。この処理は、ビデオキャプチャの進行中に生じ得る。例えば、EIS処理は実質的にリアルタイムで実行することができるため、ビデオキャプチャの終了時にユーザーがアクセスできるビデオファイルは、EISモジュール155によって安定化されている。いくつかの実施形態では、EIS処理は、例えば、ビデオキャプチャが完了した後、またはビデオを記録した時期以外の時期にデバイスによって、後で実行される。EISモジュール155は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせまたはそれらのサブコンビネーションで実施することができる。
【0049】
EISモジュール155は、更新されたデバイス位置データ150を
デバイス位置センサ(単数または複数)120から定期的または連続的に取得する動きデータハンドラ156を含む。動きデータハンドラは、デバイス位置データ150から現在のカメラの姿勢を推定する。例えば、ジャイロスコープ信号を取得し、使用して、例えば、200Hzなどの高周波数で記録デバイス102のデバイス位置を推定することができる。任意の時間tにおけるこのデバイスの位置は、以下にR(t)として参照される。このデバイス位置は、例えば、1軸、2軸、または3軸に対する記録デバイス102の回転位置を示し得る。デバイスの位置は、回転行列として、または座標系に関して、または他の形式で表され得る。各計算されたデバイスの位置は、記録デバイス102の位置が発生した時期を示す時間によってラベル付けすることができる。
【0050】
EISモジュール155は、OIS位置データ148として示されるOIS位置リードアウトを定期的または連続的に取得するOIS位置データハンドラ158を含む。OIS位置データハンドラ158は、OISリードアウト値をデバイス位置で使用することができるオフセットに変換する。例えば、OISレンズの位置は、2次元のピクセルオフセットに変換することができる。オフセットを生成するために、OIS位置データハンドラ158は、OIS位置から対応するオフセットに変換するための変換係数または変換行列を提供し得る格納された較正データ132を使用することができる。OIS位置によるオフセットの生成では、例えば、カメラモジュール110が光学ズームが可能な場合、レンズの焦点位置および/またはレンズズーム位置の変化による、カメラの有効焦点距離の経時的な変化を考慮することができる。動きデータハンドラ156と同様に、OIS位置データハンドラ158は、各測定値およびオフセットにデータが表す時間によってラベルを付ける。
【0051】
EISモジュールは、デバイス位置データハンドラ156によって計算されたデバイス位置と、OIS位置データハンドラ158によって計算されたOISオフセットとを受け取る動きモデルコンストラクター160を含む。このデータおよびフレーム露光データ142およびレンズ焦点位置データ146を用いて、動きモデルコンストラクター160は、フレームに関する第1の変換162を生成する。例えば、第1の変換162は、カメラの視野内の現実世界のシーンを、キャプチャされたフレームにマッピングする射影行列(projection matrix)とすることができる。このプロセスは、フレームごとに繰り返される。フレームについて第1の変換162を生成する際に、OISモジュール115の位置は、ジャイロスコープデータから決定された主要なデバイス位置からのオフセットとしてモデル化することができる。以下でさらに説明するように、オフセットは、その時間におけるレンズの焦点位置の有効焦点距離を参照することにより、キャプチャの時間におけるカメラの有効焦点距離を有効にすることができる。第1の変換162は、単一の画像フレームの異なるサブセットまたは異なる領域の関係を別々に記述することができる。例えば、第1の変換162の異なる部分または異なる成分は、フレームの異なるスキャンラインが実際のシーンにどのようにマッピングされるかを記述し得る。デバイス位置、OISモジュール位置、レンズの焦点位置はすべて、フレームの個々のスキャンラインの露光時に正確な位置を提供するために、測定タイムスタンプを使用して整列され、必要に応じて補間される。
【0052】
動きモデルコンストラクター160によって生成された第1の変換162は、第2の変換172を決定する非線形フィルタリングエンジン170に提供される。この第2の変換172は、フレームの画像データを、フレームの安定化バージョンを表す出力フレームに射影する第2の射影行列P’
i,jであり得る。具体的には、第2の変換172は、キャプチャされた画像データを処理するのではなく、初期変換162、P
i,jを使用して行われた画像射影を出力フレームにマッピングすることができる。いくつかの実施形態では、2つの変換162、172は、フレームの初期にキャプチャされた画像データを処理し、その処理した画像データを安定化された出力フレームに直接マッピングする単一の変換に合成されることができる。
【0053】
動きを効果的に安定させるために、非線形フィルタリングエンジン170は、処理中のフレームのキャプチャ後に、将来発生する動きを考慮するように第2の変換172を生成することができる。例えば、分析中の現在のフレームに関して、記録デバイスの位置は、前のフレームから大きく移動していない可能性がある。それでもなお、将来のフレームで大きな動きが発生するとエンジン170が判断した場合、第2の変換172が生成されて、現在のフレームをシフトまたは変更して、ビデオに見かけの移動を導入して、将来の大きな移動を、急激な変化ではなく、一連の緩やかな変化として、広げることができるようにする。同様に、将来のフレームの安定化が切り取りまたは他の変更を導入する場合、一連のフレームに亘るより緩やかで一貫した変化のために、第2の変換172が生成されて、それらの変更を以前のフレームに少なくとも部分的に伝播させることができる。
【0054】
非線形フィルタリングエンジン170は、フレームの仮想カメラ位置から第2の変換172を生成することができる。露光が発生したときのカメラの実際の位置を表すのではなく、仮想カメラ位置は、記録されているビデオを安定化させる記録デバイス102の調整された、または仮定の(hypothetical)姿勢を表すことができる。仮想位置は、仮想カメラを配置するための望ましい位置、例えば、シーンの特定のビューまたはパースペクティブ(perspective)をシミュレートする位置を表すことができる。一般に、任意のカメラ位置は、グローバル参照フレームに対する回転および平行移動によって表すことができる。仮想カメラ位置は、回転行列、例えば、基準位置に対する回転オフセットを示す行列として表現することができる。これは、3つの回転軸に関する回転オフセットを示す3x3行列であり得る。いくつかの実施形態では、EISモジュールの安定化処理は、回転成分に関してのみ位置を定義する。これは、回転成分が一般にハンドヘルドビデオの安定性に最大の影響を与えるからである。
【0055】
フレームに関する仮想カメラ位置は、推定カメラ位置に対する調整を反映して、ビデオの安定化を強化し、歪みおよび処理を修正し、パンニングを容易にし、それ以外にビデオを向上させることができる。フレームの仮想カメラ位置は、様々な因子に基づいて調整される初期カメラ位置を生成することにより決定することができる。例えば、仮想カメラ位置は、フレームの前後に検出された移動に基づいて、フレームにおけるぶれ量に基づいて、パンニングが発生している可能性に基づいて、デバイス位置をフィルタリングすることで調整されて、調整を介して、将来のフレームにおける動きに対して準備し、かつ/または画像データが出力フレーム全体をカバーすることを保証することができる。様々な要因は、変更される、ブレンドされる、またはそれ以外にフレームに関する最終的な仮想カメラ位置を決定するために使用される、フレームに関する一連の仮想カメラ位置を生成することにより、考慮することができる。
【0056】
変換162、172が異なるスキャンラインに対して異なるマッピングを有するのと同様に、フレームの異なるスキャンラインに対して異なる仮想カメラ位置を決定して、フレームキャプチャ中のデバイス位置、OISモジュール115の位置、および/またはレンズ焦点位置の変化を調整することができる。従って、フレームの異なる部分に対して異なる仮想カメラ位置を使用することができる。効率化のために、仮想カメラ位置および第2の変換172の対応する成分を画像センサのスキャンラインの適切なサブセットに対して計算し、残りのスキャンラインに対して適切なデータを補間することができる。以下の様々な例では、説明を簡潔にするために、画像センサの中央スキャンラインなどの単一のスキャンラインについて説明する。仮想カメラ位置および対応する射影行列成分を完全に計算する技術は、画像フレームの複数のスキャンラインに対して使用することができ、必要に応じて各スキャンラインに対して個別に使用することもできる。
【0057】
本明細書で使用される場合、デバイス位置とは、例えば、デバイス位置データ150(例えば、ジャイロスコープデータ)およびデバイス位置データハンドラ156の出力によって示されるような記録デバイス102の位置を指す。デバイスのレベル位置は、カメラモジュール110のレンズの内部移動またはOISモジュール115の移動を考慮することなく、記録デバイス102の姿勢または方位を示す。また、本明細書で使用される場合、カメラ位置は、カメラの有効なビューまたは推定ビューに対応する位置を示す。OISモジュール115の動作、レンズブリージング(lens breathing)、および他の要因によるシフトを考慮することにより、カメラ位置はデバイス位置と異なり得る。さらに、カメラ位置は、仮想位置(例えば、カメラの実際のビューではなく、カメラの向上されたビューまたは変更されたビューを反映する近似位置または仮定位置(hypothetical positions))であり得る。
【0058】
次に、EISモジュール155は、画像ワーピングエンジン180を使用して、非線形動きフィルタリングエンジン170の出力を使用し、各キャプチャされた画像フレームを出力フレームにマッピングする。第2の射影172は、フレームの各部分が出力空間にマッピングされ、出力フレームのピクセルの各々が定義されるように、フレームの各スキャンラインに対応する成分を含むことができる。EISモジュール155の処理は、ビデオのフレームごとに実行することができる。
【0059】
図2は、ビデオの安定化に使用されるデータの例を示す図である。この図は、記録デバイス102によってキャプチャされる一連のフレーム210を示している。各フレームは、対応する組のメタデータ212によってラベル付けされ、メタデータ212は、例えば、露光期間、露光基準時間(例えば、開始時間、停止時間、または露光に関する他の基準点)、レンズの焦点位置、およびその他を示す。図示されていないが、デバイス位置データおよびOISモジュールの位置データは、各露光中の様々な時間においてキャプチャされ、かつタイムスタンプが付与される。
【0060】
フレーム211に対する安定化処理を実行するために、フレーム211のキャプチャ前後の時間範囲が定義される。フレームのこの時間範囲またはウィンドウは、フレーム211を変換する方法を決定するために分析される。分析中のフレーム211の中央スキャンラインの露光時間Tは、範囲の中心として使用することができる。所定の時間オフセットLを使用して、範囲、例えば[T−L,T+L]からの時間範囲を設定することができる。一部の実施形態では、この時間オフセットLは約200ミリ秒である。その結果、範囲は、フレーム211の約7フレーム前および約7フレーム後を含むこととなる。より長い時間オフセットおよびより短い時間オフセットLを使用してもよい。EISモジュール155は、処理中に、将来のフレームのコンテキストを使用するため、フレームの処理は、適切な数の後続フレームがキャプチャされるまで遅延される。
【0061】
図2では、フレーム211は、画像センサによってキャプチャされたものとして示されている。上述したように、EISモジュール155は、フレーム211のキャプチャ中の記録デバイス102の実際の位置、ならびにOISモジュール要素などのカメラ要素の位置およびレンズ焦点位置を示すデータから第1の変換162を定義する。第1の変換162を適用した結果は、出力フレームターゲット235に関して示される射影画像230である。いくつかの実施形態では、第1の変換162は、フレーム211のキャプチャに対応するデータのみを使用して決定される。変換162は、カメラの実際のレンズ位置に対応しているため、射影画像230は、画像データとカメラの視野内の実際のシーンとの間のマッピングを推定する。
【0062】
EISモジュール155は、第2の変換162を使用して、フレーム211の画像データをさらに調整する。この第2の変換162は、仮想レンズ位置(例えば、フレーム211をキャプチャするために使用された場合に、より安定したビデオを生じさせる仮定位置)に対応する。この第2の変換162は、フレーム211に適用されると、出力フレーム235のデータを完全に定義する射影画像240を生成する。
【0063】
射影画像240を生成する第2の変換172は、[T−L,T+L]からの時間範囲内の各フレームに対応するデータから生成され得る。この期間に亘る記録デバイス102の位置R(t)は、例えば、ガウスフィルタを使用して、範囲に亘る動きを滑らかにするためにフィルタリングされる。フレーム211の中央スキャンラインの露光である時間Tにおけるフィルタリングの結果は、初期仮想カメラ位置V
0(T)として使用することができる。フィルタリングを行っても、デバイス位置における望ましくない移動または望ましくない動きを生じさせるその他の要因が存在し得る。結果として、初期仮想カメラ位置V
0(T)は、一連のさらなる処理を通じて更新されることができる。いくつかの実施形態では、フィルタリングされる位置R(t)は、OISの動きがないと想定される位置であり、従って、位置は、OIS位置データ148を考慮することのないデバイス位置データ150に基づくものとすることができる。他の実施形態では、OISの動きおよびオフセットを、フィルタリングされる一組の位置に組み込んで、初期仮想カメラ位置V
0(T)を生成することができる。
【0064】
例えば、第2の仮想カメラ位置V
1(T)は、将来のフレームに亘って発生する動きの量に基づいて、位置V
0(T)を、前のフレームに対するカメラ位置V
F(T_pre)で補間することによって生成することができる。前のフレームに対するカメラ位置は、最終的な仮想カメラ位置(例えば、前のフレームの安定化された出力バージョンを生成するために使用される変換に対応する位置)とすることができる。補間は、フレーム211と前のフレームとの間の動きの見かけの変化を、フレーム211と将来のフレームとの間の動きにおける見かけの変化に整列することができる。
【0065】
第3の仮想カメラ位置V
2(T)は、フレーム211に存在するカメラのモーションブラーの量に基づいて、V
1(T)を、実際のデバイス位置R(T)で補間することによって生成することができる。これにより、適用される安定化の量を低減して、視聴者のブラーの知覚を低減することができる。モーションブラーは、通常、消去することができないため、モーションブラーにより、より自然な結果を得るために、必要に応じてビデオの安定性を低減することができる。
【0066】
第4の仮想カメラ位置V
3(T)は、時間範囲[T−L,T+L]に亘る記録デバイス102の一貫した動き(consistent motion)中に生じる位置をシミュレートするか、または表すように生成することができる。この位置は、ドメイン変換フィルタなどの安定したフィルタを、推定された実際のデバイス位置R(t)に時間範囲に亘って適用することにより決定され得る。フィルタは、V
0(T)の生成に使用される同じ組のデバイス位置に適用されるが、このステップは異なるタイプのフィルタリングを表す。例えば、V
0(T)は、所定の形状または所定のパターンを強制することなく、平滑化するが、経時的に推定された実際のデバイス位置の変化に全体的に追従するフィルタリングにより生成され得る。対照的に、V
3(T)は、記録デバイス102のユーザーが潜在的に意図する実質的に線形のパンニングまたは他の動きなどの所定の一貫した動きパターンに一致するようにデバイスパターンをフィルタリングすることによって生成される。
【0067】
第5の仮想カメラ位置V
4(T)は、V
3(T)とV
2(T)の補間として生成することができる。EISモジュール155は、経時的なデバイス位置の変化が記録デバイス102のパンニングを表す可能性が高いかどうかを見積もることができ、かつそれに応じて補間に重み付けすることができる。パンニングの可能性が高いと判断された場合、V
4(T)は、推定されたパンニング位置V
3(T)に近いものとなる。パンニングの可能性が低いと判断された場合、V
4(T)は位置V
2(T)に近いものとなる。
【0068】
第5の仮想カメラ位置V
4(T)により、EISモジュール155は、対応する変換が出力フレーム235に提供するカバレッジを見積もることができる。出力フレーム235全体を満たし、ピクセルを未定義のままにしないことが望ましいため、EISモジュール155は、仮想カメラ位置V
4(T)からのシーンのビューを表す、射影行列などの変換を決定し、射影された画像が出力フレーム235をカバーすることを検証することができる。将来のフレームにおける動きを確認するために、将来の画像フレームによってキャプチャされたシーンの一部に変換を適用することができる。変換および対応する仮想カメラ位置V
4(T)は、現在のフレームおよび一組の将来のフレームの各々が、変換を使用してマッピングされたときに、出力フレーム235を完全に定義するように、調整することができる。結果として生じる変換は、変換172として設定され得、かつフレーム211に対する安定化された出力フレーム235を生成するために使用することができる。
【0069】
いくつかの実施形態では、フレーム211に対する安定化された出力フレーム235を生成することは、フレーム211の1つまたは複数の他のスキャンラインに対して、時間Tにおいて露光されたスキャンラインに関して説明したEIS処理技術を実行することを含む。例えば、処理は、特定の間隔(例えば、100スキャンラインごと、500スキャンラインごとなど)における、または特定の参照点(例えば、フレーム全体の4分の1および4分の3、またはフレームの上部およびフレームの下部)におけるスキャンラインに対して実行され得る。フレーム211のスキャンラインの適切なサブセットのみに関して仮想カメラ位置および第2の変換172が決定されると、計算された位置間でスキャンラインの変換(例えば、射影行列の対応する部分)が補間される。このようにして、適切な変換が各スキャンラインに対して決定され、各スキャンラインは、異なる変換が結果として適用され得る。いくつかの実施形態では、仮想カメラ位置および第2の変換172を生成する完全な処理は、異なるスキャンラインのデータ間の補間に依存することなく、各フレームの各スキャンラインに対して行われ得る。
【0070】
フレーム211が出力フレーム235にマッピングされると、結果は保存され、EISモジュール155は、次のフレームの処理を開始する。このプロセスは、ビデオの各フレームが処理されるまで続く。
【0071】
仮想カメラ位置を生成するために使用される様々な因子および結果的に得られた変換は、組み合わせて、または別々に使用することができる。例えば、実施形態によっては、仮想カメラ位置V
0(T)からV
4(T)を作成するために使用される補間および調整の一部が省略され得る。例えば、異なる実施形態では、その目的でV
4(T)を使用する代わりに、フィルタリング処理されたカメラ位置V
0(T)からV
3(T)のいずれかを使用して、出力フレームにデータを射影するための変換を決定することができる。従って、フィルタリング処理されたカメラ位置V
0(T)、V
1(T)、およびV
2(T)のいずれかを使用して安定化する変換を生成しても、ビデオの安定性を向上し得る。同様に、V
3(T)は、パンニングが発生しているビデオを安定化させるのに効果的であり得る。説明された様々な要因のサブセットを考慮に入れたとしても、他の多くのバリエーションが本開示の範囲内にある。
【0072】
説明した手法は、様々な方法で適用することができる。例えば、2つの変換162、172を順次画像データに適用するのではなく、記録デバイスは、両方の組み合わされた効果を反映する単一の合成された変換を生成することができる。従って、変換162、172を使用して安定化された画像データを生成することは、変換162、172を直接適用するのではなく、画像データを安定化するために最終的に使用されるさらなる変換または関係の生成を包含し得る。
【0073】
図3A〜3Cは、ビデオ安定化のための一例のプロセス300を示すフロー図を示す。プロセス300は、
図1および
図2で説明した技術のより詳細な例を示している。プロセス300の動作は、記録デバイス102(例えば、カメラ、携帯電話、タブレットコンピュータ、その他)などのコンピューティングシステムによって実行することができる。プロセス300の動作は、単一のコンピューティングデバイスまたは複数のコンピューティングデバイスによって実行され得る。
【0074】
プロセス300では、一連のビデオフレームがキャプチャされる(301)。フレームがキャプチャされると、他の様々なタイプのデータもキャプチャされる。露光時間、露光期間、レンズの焦点位置、該当する場合はズーム位置、カメラ識別子(例えば、使用する複数のカメラまたはレンズを指定する必要がある場合)、およびその他などのメタデータが各フレームに関してキャプチャされる(302)。記録デバイスの方位を示すジャイロスコープセンサデータまたはその他のデータなどのデバイス位置データがキャプチャされる(303)。OISモジュールの可動要素の位置(例えば、レンズのシフト位置)を示すOIS位置データがキャプチャされる(304)。デバイス位置およびOISの位置に関する測定は、フレームレートよりも高い周波数で行うことができるため、キャプチャされる各フレームに対して1つまたは複数の測定が行われる。様々な実施形態において、位置測定は200Hz以上で行うことができる。
【0075】
デバイス位置データを処理して一連のフレームに亘って発生するデバイス位置が決定される(305)。位置は、座標系における記録デバイスの姿勢または方位を示し得る。例えば、時間tにおける位置は、回転行列R(t)によって示され得る。各フレームに対して、フレームの異なる部分がキャプチャされたときのデバイス位置を表す、デバイスのいくつかの位置を推定することができる。特定のフレームを処理する場合、分析中のフレームの前後のフレームに対するデバイス位置も決定することができるように、複数のフレームの範囲に亘って発生するデバイス位置が使用される。いくつかの実施形態では、コンピューティングシステムは、ジャイロスコープ信号を連続的にフェッチして、高周波数(例えば、200Hz)で最新のカメラ位置R(t)を推定する。
【0076】
OIS位置データを使用してOISオフセットが生成される(306)。保存された較正データは、OISの位置をオフセットにマッピングするテーブル、関数、またはその他のデータを示すことができる。例えば、OISリードアウトは、2Dピクセルオフセットに変換することができる。一例として、オフセットは、オフセットに各時間tに対してx成分およびy成分があることを示す、O_len(t)=(O_len(x,t),O_len(y,t))として参照することができる。
【0077】
記録デバイスの製造業者は、1つまたは複数のコンピュータで実行される効率的な較正プロセスを使用して、線形変換により生のOISリードアウトデータをピクセルオフセットに変換する較正データを生成することができる。較正プロセスは、OIS可動要素(例えば、レンズ)が様々な所定の位置にある間に、スクリプトによって制御される、ビデオをキャプチャするための自動データキャプチャプロセスを含むことができる。このプロセスでは、位置の増分変化でビデオフレームをキャプチャしつつ、OIS動きフィールド全体をカバーする所定のパターンで可動要素を移動させることができる。可動レンズを備えたOISモジュールの場合、動きは、可動レンズの中心位置の周りの螺旋状の一連の動きであり得る。次いで、1つまたは複数のコンピュータは、例えば、駆動機構の位置の増分変化を表すフレームを自動的にマーキングすることにより、キーフレームを検出する。次に、キーフレームの時間は、キーフレームに関するタイムスタンプおよびOISリードアウトデータに基づいて、対応するOIS位置リードアウトにマッチングされる。1つまたは複数のコンピュータは、特徴検出アルゴリズムを使用して、キーフレーム間の画像シフトをピクセル単位で測定する。例えば、1つまたは複数のコンピュータは、1つのキーフレーム画像を別のキーフレーム画像と比較して、2つのキーフレームに関するOISリードアウト位置の変化に対応するx方向およびy方向のピクセルシフトを決定することができる。1つまたは複数のコンピュータは、線形回帰を使用して、OISの未加工リードアウトを画像シフトにピクセル単位でマッピングする変換係数またはその他のデータを決定することができる。通常、較正プロセスは、特定のタイプのすべてのカメラモジュールに対して実行でき、かつ個々のデバイスごとに実行する必要はない。
【0078】
安定化処理を実行するために、コンピューティングシステムは、処理するための特定のフレームを識別する。コンピューティングシステムは、特定のフレームに対するターゲット時間を定義する(307)。例えば、中央スキャンラインの露光が生じる時間Tをターゲット時間として使用することができる。通常、これは特定のフレームの露光時間の中間である。各フレームのフレームメタデータは、基準時間(例えば、露光の開始時間および/または終了時間)および露光期間を示すため、中央スキャンラインに対応する時間は、フレームごとに決定することができる。
【0079】
コンピューティングシステムは、ターゲット時間に露光されたスキャンラインに対する変換を決定する(308)。変換は、実世界のシーンを画像にマッピングする射影行列とすることができる。この射影行列は、P
i,jとして参照される。iは、フレームインデックスであり、jは、スキャンラインインデックスである。中央スキャンラインに対応する行列の成分は、P
i,j_Tである。この変換は、デバイス位置R(T)およびOIS位置オフセットを使用して生成することができる。
【0080】
OISレンズのシフトデータは、フレーム内の主点(例えば、フレーム内の中心点または原点)に対する追加のオフセットとしてモデル化することができる。これは、記録中にOISレンズが原点の周りを移動するという物理的直感に合致する。射影行列を決定するために、コンピューティングシステムは、デバイス位置データからステップ(305)において決定されたカメラ外部行列(extrinsic matrix)(例えば、回転行列)であるR
i,j_Tを使用することができる。コンピューティングシステムは、カメラ固有行列(intrinsic matrix)K
i,j_Tを決定することもできる(309)。例えば、カメラ固有行列は、その時間におけるレンズの焦点位置を考慮して、時間Tにおけるカメラの有効焦点距離fを使用して生成され得る。較正データを使用して、レンズの焦点位置のリードアウト値に対応する焦点距離を参照することができる。カメラ固有行列K
i,j_Tは、3x3行列、例えば、
【0081】
【数1】
として決定できる。
ここで、fは、現在のフレームの焦点距離であり、Ptは、画像中心に設定された2D主点であり、O_len(j_T)は、Tで露光されたスキャンラインでのピクセルにおける変換されたOISリードアウトである。射影行列は、次の方程式、P
i,j_T=R
i,j_T*K
i,j_Tに従って、カメラ固有行列およびカメラ外部行列を使用して生成することができる(310)。第1の変換を中央スキャンラインに関する画像データに適用して、中央スキャンラインを射影することができる(311)。
【0082】
さらに、コンピューティングシステムは、タイムウィンドウの間に生じる実際のデバイス位置R(t)をフィルタリングすることにより、第1の仮想カメラ位置V
0(T)を決定することができる(312)。第1の変換は、分析中の特定のフレームにおける画像データを座標系にマッピングする。仮想カメラ位置は、このマッピングされた画像データの仮定のビューまたはパースペクティブを表し、これにより、画像データのフレームへのマッピングが調整される。コンピューティングシステムは、ターゲット時間Tの前後の時間範囲を定義する(313)。例えば、範囲は、ターゲット時間Tの前後の所定の時間量Lを含むことができる。例えば、Lは、200ms、500msなどであり得る。結果として、定義された時間範囲[T−L,T+L]は、特定のフレームが処理される前の1つまたは複数のフレームと、特定のフレームの後の1つまたは複数のフレームとに関する露光時間を含むことができる。コンピューティングシステムは、定義された時間範囲に亘って発生するデバイス位置R(t)(例えば、回転行列)をフィルタリングする(314)。このステップでは、記録デバイスの実際の動きを表す記録デバイス位置が使用されるため、フィルタリングされる位置は、通常、OIS操作による調整を反映しない。例えば、このステップでは、コンピューティングシステムは、仮想カメラのOISの動きが常にゼロであると想定する。O_len_virtual(x,y)=(0,0)。それでもなお、いくつかの実施形態では、このプロセス中にフィルタリングされた位置を生成するために、OIS位置の変化を使用し得る。フィルタリングは、大きなカーネル(例えば、シグマ=6)を有するガウスフィルタを使用して実行することができる。このフィルタリングにより、デバイス位置における経時的な変化が滑らかになり、位置のランダムな変化または短時間の変化の影響が軽減され得る。時間Tに対応するフィルタリングされたデバイス位置は、第1の仮想カメラ位置V
0(T)として設定される。
【0083】
第2の仮想カメラ位置V
1(T)は、時間Tの後の記録デバイスの動きに関する情報を使用して生成することができる(315)。将来の動きは、時間Tから時間T+Lまでに発生するデバイス位置を算定することにより見積もることができる。将来発生する移動の量を使用して、初期の仮想カメラ位置V
0(T)を、フレーム211の直前にキャプチャされたフレームの中央スキャンラインに関する最終的な仮想カメラ位置V(T_pre)で補間することにより、第2の仮想カメラ位置V
1(T)を計算することができる。この例では、仮想カメラ位置を回転行列で表すことができるため、球面補間(spherical interpolation)を使用することができる。コンピューティングシステムは、前のフレームの中央スキャンラインに関する仮想カメラ位置V(T_pre)にアクセスする(316)。次に、コンピューティングシステムは、特定のフレームが処理された後に発生するデバイス位置の変化に基づいて遷移量(transition measure)を決定する。例えば、時間Tの後に生じる記録デバイス102の移動量を使用して、補間結果がV
0(T)またはV(T_pre)により近くなるかどうかを設定する遷移係数Aを決定することができる。特に、Tの後のデバイス位置の変動性を見積もることができる。「突出(protrusion)」の量を使用して、変動性を測定することができる。直観的に、突出は、前の仮想カメラ姿勢V
F(T_pre)が未変化状態に維持されている場合、ワープされたフレームが現在のフレームおよび将来のフレームから突出する量を指す。突出がより大きいほど、遷移比率または遷移量がより大きくなり、逆もまた同様である。コンピューティングシステムは、T+Lまでの将来の各フレームに関する現在のフレームの突出値を取得し、対応する遷移比率を算出し、最終遷移比率または最終遷移量として遷移比率を平均化することができる。
【0084】
補間は、関数Slerp(p
0,p
1,α)=sin((1−α)*θ)/sin(θ)*p
0+sin(α*θ)/sin(θ)*p
1として本明細書で参照される球面線形補間を使用して実行することができる。ここで、αは、遷移量または遷移係数であり、0<=α<=1は、点p
0と点p
1との間の比率であり、θ=arccos(p
0・p
1)は、点p
0から点p
1で形成される弧によって範囲が定められた角度である。従って、カメラ位置は、V
1(T)=Slerp(V
F(T_pre),V
0(T),A)として決定することができる。動きが、一貫性を維持するか、または緩慢に変化する場合、係数は小さくなり、結果的に生じるカメラ位置は、V(T_pre)に近くなる。将来の動きが大きい場合、係数は大きくなり、結果的に生じるカメラ位置はV
0(T)に近くなる。コンピューティングシステムは、補間を実行し(318)、これにより、第2の仮想カメラ位置V
1(T)を、フレーム間で明らかな変化率を滑らかにする位置に設定することができ、動きが変化するように見える割合が急激に増加または減少することはない。
【0085】
第3の仮想カメラ姿勢V
2(T)は、フレームキャプチャ中に存在する動きの量、または処理中のフレームに存在するモーションブラーの量に基づいてV
1(T)から生成することができる(319)。仮想カメラ位置V
1(T)は、実際のカメラ位置R(T)とより密接に整列するように調整され、かつ前のフレームとフレーム211との間で発生した動きを反映する。(例えば、被写体の動きではなく、カメラの移動による)かなりの量のモーションブラーがフレーム211に存在し、かつ処理されたビデオが非常に安定すると、モーションブラーは、非常に目立ち、かつ不自然になる。視聴者のブラーの知覚を低減するために、あるフレームから次のフレームへの仮想カメラ位置の変化が、実際のカメラ位置を少なくとも部分的に追跡し、画像の自然なブラーと一致させるように許可され得る。これにより、ブラーをある程度隠すことができる。従って、フレーム211内の画像ブラーの量の決定に基づいて、記録デバイス102の実際の動きの少なくとも一部を使用して、例えば、検出された画像ブラーの量に応じてV
1(T)およびR(T)の間を補間することにより、仮想カメラ位置V
1(T)を調整することができる。
【0086】
フレームのモーションブラーの量を推定するために、コンピューティングシステムは、ターゲット時間Tにおけるスキャンラインのホモグラフィ(homographies)を決定することができる(320)。次いで、コンピューティングシステムは、モーションブラーカーネルを推定する(321)。ブラーを特徴付ける1つの手法は、フレームに沿った2つの異なる位置に関する射影行列成分を比較することである。例えば、露光期間Eのフレームの場合、特定のフレームの最初と最後のスキャンラインに対応する射影行列を表す射影行列成分P
i,T−E/2およびP
i,T+E/2を決定することができる。射影行列は、OIS位置データとレンズの焦点距離とを使用して生成されるため、これらのパラメータの変更によって生じるブラーは変換に反映される。次に、コンピューティングシステムは、2つの射影行列間の変換を計算し、結果的に生じる変換を画像の中心点を表す原点に適用する。変換を適用することにより、射影点が射影空間内の実際の原点からのオフセットに移動する。原点からのオフセットの大きさは、ブラーの推定値として使用され得る。
【0087】
次いで、コンピューティングシステムは、第2の仮想カメラ位置V
1(T)を実際のデバイス位置R(T)に向けて、特定されたブラーの量に基づいて決定された程度にまで、調整する(322)。例えば、コンピューティングシステムは、モーションブラーカーネルに基づいて係数を決定し、その係数を使用して、位置V
1(T)とR(T)との間の球面補間に重みを付けることができる。この係数は、上記のオフセットに基づくものであり得る。いくつかの実施形態では、ブラー量のしきい値が設定され、R(T)による補間は、ブラー量がしきい値により表される最小量を超える場合にのみ実行される。例えば、オフセットがOIS操作で通常補正することができるものを超える動きを表す場合にのみ、補間が実行され得る。
【0088】
コンピューティングシステムは、一連のフレームに亘る記録デバイスの一貫した動きを表す第4の仮想カメラ位置V
3(T)を決定する(323)。仮想カメラ位置V
3(T)は、位置V
3(T)が安定したモーションパスに沿った状態となるように、ユーザーが時間範囲[TL,T+L]に亘ってカメラをパンニングしているか、または別の一貫した動きを行っていると仮定して生成することができる。従って、安定したフィルタリングが、実際のデバイス位置R(t)に対して時間範囲[T−L,T+L]に亘って適用され得る(324)。一例として、ドメイン変換フィルタを使用することができる。例えば、これは、パンニングの最適な軌道を推測し、軌道に沿った対応する位置V
3(T)を示すことができる。
【0089】
コンピューティングシステムは、時間範囲に亘って記録デバイスの一貫した動き(例えば、パンニング)が発生する確率Sを決定する(325)。この時間範囲は、特定のフレームの後にキャプチャされる1つまたは複数の将来のフレームのキャプチャ時間に対応することができる。例えば、見積もられるデータの時間範囲は、[T+L−K,T+L]とすることができる。ここで、K>Lである。一般に、時間Tよりも前の大量のコンテキストは、パンニングの確率を見積もるのに有益である。例えば、パンニングは、1秒または数秒に亘って発生し得、通常、Lの値よりも大幅に大きくなる。その結果、Kの値は、例えば1秒、2秒、3秒などに設定することができる。コンピューティングシステムは、ビデオキャプチャの過程で決定されたデバイス位置の比較的長い履歴を利用することができる。いくつかの実施形態では、分析では、T+L時間より前のビデオ全体の全体的な動きのパターンを見積もることができるように、時間範囲の開始をビデオの開始時に設定することができる。
【0090】
確率Sを生成するとき、コンピューティングシステムは、デバイス位置データR(t)をダウンサンプリングする(326)。例えば、回転位置R(t)は、30fpsのフレームレートでサンプリングすることができる。これは、人間が知覚するレートに近いため、確率の計算は遅い動きやノイズに対してより堅牢なものとなる。コンピューティングシステムは、期間に亘って一連のダウンサンプリングされた位置を分析して、確率を決定する(327)。例えば、線形回帰を使用して、ダウンサンプリングされた位置が線形軌道にどの程度よく一致するかの尺度を生成することができる。他のアプローチを分析に使用することができる。例えば、機械学習モデルをトレーニングして、パンニングを示すビデオの例とパンニングを反映しないビデオの例とに基づいてパンニングの可能性を予測することができる。一般に、ジャイロスコープ信号は、信頼性の高いパターンを機械学習モデルに学習させることができる高品質の位置情報を提供する。一例として、シグモイド関数をトレーニングして、パンニング確率Sを生成することができる。
【0091】
コンピューティングシステムは、第5の仮想カメラ位置V
4(T)を決定する(32
8)。この位置は、第3の仮想カメラ位置V
2(T)と第4の仮想カメラ位置V
3(T)とをブレンドすることによって生成することができる(329)。例えば、ブレンディングは、一貫した動きの決定された確率に基づいて位置V
2(T)と位置V
3(T)との間を補間することによって達成することができる(330)。パンニングの可能性が高いと判断された場合、V
4(T)は、推定されたパンニング位置V
3(T)に近いものとなる。パンニングの可能性が低いと判断された場合、V
4(T)は位置V
2(T)に近いものとなる。
【0092】
プロセス300におけるこの時点までに、仮想カメラ位置V
4(T)は、デバイス位置の範囲に亘るフィルタリングおよび将来の移動の算定による安定化された動きを提供する。位置は、モーションブラーを隠し、かつパンニングが存在する可能性がある場合はパンニングに関して許容するようにも調整される。しかしながら、この位置に対して決定された射影を直接適用すると、出力フレームの一部が未定義のままになる場合がある。例えば、特定のフレームからの画像情報が出力フレームにマッピングされない場合がある。さらなる処理により、出力フレームの各部分が特定のフレームの一部にマッピングされることを確実にするために、仮想カメラ位置を実際のカメラ位置R(T)に向けてさらに調整することができる。
【0093】
コンピューティングシステムは、第5の仮想カメラ位置V
4(T)に基づいて、変換(例えば、第2の射影行列P
r(t))を決定する(331)。次いで、コンピューティングシステムは、(実際のデバイス位置R(T)に基づく)第1の射影行列P
i,jと第2の射影行列との間の基準変換(reference transformation)を決定する(332)。コンピューティングシステムは、基準変換が現在のビデオフレームまたは期間中にキャプチャされた後のビデオフレームに使用された場合、未定義のピクセルを生じさせるかどうかを判断する(333)。例えば、時間範囲[T,T+L]の間にキャプチャされた各フレームに関して、フレームのP
i,jの対応する部分を使用して射影画像を決定することができ、基準変換をフレームに関する射影画像に適用することができる。変換された射影画像は、出力フレームに対してチェックされて、出力フレームの各ピクセルが定義されているかどうかが判断される。このチェックは、時間範囲[T,T+L]の間にキャプチャされた各フレームに対して実行することができる。いくつかの実施形態では、出力フレームが時間範囲の間にキャプチャされた各フレームに対して定義されている場合、特定のフレームの安定化されたバージョンを生成するために、第5の仮想カメラ位置V
4(T)に対応する第2の射影行列P
r(t)を使用することができる。
【0094】
時間範囲[T,T+L]の間にキャプチャされた任意のフレームの射影バージョンへの基準変換の適用が、出力フレームのすべてのピクセルを定義しない場合、コンピューティングシステムは、期間[T,T+L]の終了までに各フレームに対する有効なピクセルマッピングを維持するように最小遷移を決定する(334)。例えば、T’において中央スキャンラインを有するフレームが参照変換を使用して完全に定義されない場合、すべての射影ピクセルが有効に定義されるように、バイナリ検索を使用して、V
4(T)およびR(T’)から最小遷移係数を発見することができる。
【0095】
コンピューティングシステムは、期間の後のフレームの各々に関して、第5の遷移行列V
4(T)に対する遷移量を決定する(335)。T’において中央スキャンラインを有するフレームに関する遷移量は、位置V
4(T)に適用されたときに、位置V
4(T)から実際のデバイス位置R(T’)にシフトする遷移係数であり得る。コンピューティングシステムは、決定された様々な遷移量の中から遷移量を選択する(336)。コンピューティングシステムは、一組の中から最高の遷移量を選択することができる。一組の遷移量は、[T,T+L]から発生するフレームに関して各中央スキャンラインの実際のカメラ位置に対する実際のデバイス位置V
4(T)の比較を表し得る。従って、一組は、次の遷移量を含むことができる。V
4(T)→R(T),V
4(T)→R(T+1),...,V
4(T)→R(T+L))。
【0096】
例えば、現在の遷移量が特定のフレームから将来のフレームへの遷移に使用される遷移量よりも高い場合、現在の遷移量(例えば、カメラ位置V
F(T)から現在の実際のデバイス位置R(T))を選択することができる。そうでない場合、V
4(T)から将来のフレームT”への遷移について遷移量が最高であるとき、コンピューティングシステムは現在の遷移量を増加させる(337)。現在の遷移量が増加する量は、時間Tと時間T’’との間の時間量に応じて変化し得る。時間量がより短いほど、現在の遷移量を増加させることができる。(例えば、現在の遷移量が、V
4(T)からR(T’’)への遷移量により近いほど)。
【0097】
ステップ336および337は、以下のように表現することができる。上記の手法を使用すると、現在のフレームおよび将来のフレームに関する遷移比率を一つのセット(tr
(T+0),tr
(T+1),…,tr
(T+L))にすることができる。最初に、一連のフレーム内の位置を示すインデックスi(0<=i<=L)とともに、最大比率が検出される。最大比率が現在のフレーム(i=0)にある場合、最終遷移比率をこの値(例えば、tr=tr
(T+0))に設定する。それ以外の場合、比率は、例えば、tr=tr
(T+0)+(tr
(T+i)−tr
(T+0))/(i+1)のように補間される。このプロセスに示されているように、計算でのインデックスiの使用によって、現在のフレームに関連して最も高い遷移フレームが将来どの程度発生するかに応じて補間に重みが付けられる。
【0098】
コンピューティングシステムは、最終的な仮想位置V
F(T)を生成する(338)。これは、V
4(T)とR(T)との間の補間、即ちSlerp(V
4(T)、R(T)、tr)を使用して実行することができる。ここで、trはステップ337で決定された遷移比率または遷移量である。これは、範囲[T,T+L]のフレームの出力を完全に定義するために必要な最小遷移係数によって第5の仮想カメラ位置V
4(T)を修正することにより、かつ選択された遷移量を使用して、現在の実際のデバイス位置R(T)に関して補間を設定することによって実行することができる。
【0099】
コンピューティングシステムは、最終的な仮想位置V
F(T)を使用して、最終的な射影行列P’
i,jを決定する(339)。初期射影行列P
i,jによって示される第1の変換と、最終的な射影行列P’
i,jによって示される第2の変換とは、共に、キャプチャされた特定のフレームの画像データを出力フレームにマッピングする。換言すれば、第1の変換は実際のデバイス位置R(T)に基づいて画像データを中間空間にマッピングし、第2の変換は最終的な仮想カメラ位置V
F(T)に基づいて中間空間から出力フレームに画像データをマッピングする。第1の変換と第2の変換とを組み合わせるか、またはそれ以外に使用して、特定のフレームに適用して画像データを出力フレームに直接マッピングすることができる単一のマッピングを生成するようにすることができる。
【0100】
プロセス300の様々なステップは、特定のスキャンライン(例えば、時間Tで露光されたスキャンライン)に特有の変換および仮想カメラ位置の決定に関する。同じ技術が、処理される特定のフレーム内の他のスキャンラインの変換および仮想カメラ位置を決定するために使用することができる。一般に、フレームのスキャンラインの適切なサブセットのみが上記の手法を使用して処理される。例えば、上部、下部、および中間のスキャンラインのみを個別に見積もることができる。別の例として、中央スキャンラインと、50スキャンライン毎、200スキャンライン毎、または500スキャンライン毎に発生する他のスキャンラインとを分離して処理することができる。スキャンラインの残りの部分では、別々に計算されるいくつかのスキャンライン間で補間が行われてもよい。
【0101】
コンピューティングシステムは、各スキャンラインに対して決定された成分を有する最終的な変換を使用して、処理中の特定のフレームに対して安定化された出力フレームを生成する(340)。フレームの安定化された出力バージョンは、記録されているビデオの一部として記憶デバイスに保存される。プロセス300は、処理されるキャプチャされた一連のフレーム内の次のフレームに対して繰り返され、その後、ビデオキャプチャが終了し、全てのキャプチャされたフレームが処理されるまで次のフレームについて繰り返される。ビデオの追加フレームのキャプチャ、および対応する位置情報は、キャプチャされたフレームの処理中に続行することができる。
【0102】
本発明の実施形態および本明細書で説明されるすべての機能動作は、本明細書で開示される構造およびそれらの構造的均等物を含むデジタル電子回路、またはコンピュータソフトウェア、ファームウェア、またはハードウェア、またはそれらの1つまたは複数の組み合わせで実施され得る。本発明の実施形態は、1つまたは複数のコンピュータプログラム製品、即ち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するためにコンピュータ可読媒体上にエンコードされたコンピュータプログラム命令の1つまたは複数のモジュールとして実施され得る。コンピュータ可読媒体は、非一時的コンピュータ可読記憶媒体、機械可読記憶デバイス、機械可読記憶基板、メモリデバイス、機械可読伝播信号に影響を与える物質の組成物、またはこれらの一つまたは複数の組み合わせであり得る。「データ処理装置」という用語は、例として、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む、データを処理するためのすべての装置、デバイス、および機械を包含する。装置は、ハードウェアに加えて、当該のコンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つまたは複数の組み合わせを構成するコードを含み得る。伝播信号は、人工的に生成された信号、例えば、適切な受信装置への送信のために情報をエンコードするために生成される機械生成の電気、光学、または電磁信号である。
【0103】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとして既知である)は、コンパイルまたは解釈された言語を含む、あらゆる形式のプログラミング言語で記述されてよく、また、スタンドアロンプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチン、またはその他のユニットとして、任意の形式で展開されてもよい。コンピュータプログラムは、必ずしもファイルシステム内のファイルに対応するとは限らない。プログラムは、他のプログラムまたはデータを保持するファイルの一部(例えば、マークアップ言語文書に格納された1つまたは複数のスクリプト)、当該のプログラム専用の単一ファイル、または複数の調整済みファイル(例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を格納するファイル)に格納することができる。コンピュータプログラムは、1つのサイトに配置されているか、または複数のサイトに分散され、かつ通信ネットワークによって相互接続された1つのコンピュータ上で、または複数のコンピュータ上で実行されるように展開され得る。
【0104】
本明細書で説明されるプロセスおよび論理フローは、入力データを処理して出力を生成することにより機能を実行するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラム可能なプロセッサによって実行され得る。プロセスおよび論理フローはまた、特殊用途の論理回路(例えば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路))によって実行されてもよく、また、装置は、特殊用途の論理回路として実施されてもよい。
【0105】
コンピュータプログラムの実行に適したプロセッサは、例として、汎用および特殊用途のマイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般的に、プロセッサは、読み取り専用メモリまたはランダムアクセスメモリ、あるいはその両方から命令およびデータを受け取る。コンピュータの重要な要素は、命令を実行するプロセッサと、命令およびデータを格納する1つまたは複数のメモリデバイスである。一般に、コンピュータは、データを格納するための1つまたは複数の大容量記憶デバイス(例えば、磁気ディスク、磁気光ディスク、または光ディスク)を含むか、1つまたは複数の大容量記憶デバイスからデータを受信するか、またはそれらにデータを転送するか、またはその両方を行うように動作可能に接続される。しかしながら、コンピュータにそのようなデバイスを備える必要はない。さらに、コンピュータは、別のデバイス、例えば、ほんの数例を挙げると、タブレットコンピュータ、携帯電話、携帯情報端末(PDA)、モバイルオーディオプレーヤー、全地球測位システム(GPS)受信機に組み込まれてもよい。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ可読媒体は、例えば、EPROM、EEPROM、およびフラッシュメモリデバイスなどの半導体メモリデバイスを含む、すべての形態の不揮発性メモリ、媒体、およびメモリデバイス、磁気ディスク(例えば、内蔵ハードディスクまたはリムーバブルディスク)、光磁気ディスク、およびCD ROMおよびDVD−ROMディスクを含む。プロセッサおよびメモリは、特殊用途の論理回路によって補完されるか、または組み込まれてもよい。
【0106】
ユーザーとの対話を提供するために、本発明の実施形態は、ユーザー情報を表示するためのディスプレイデバイス(例えば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ)、およびユーザーがコンピュータに入力を提供することができるキーボードおよびポインティングデバイス(例えば、マウスまたはトラックボール)を有するコンピュータ上で実施され得る。他の種類のデバイスを使用して、ユーザーとの対話を提供することもできる。例えば、ユーザーに提供されるフィードバックは、任意の形態の感覚フィードバック(例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック)であり得る。また、ユーザーからの入力は、音響入力、音声入力、または触覚の入力を含む任意の形態で受信することができる。
【0107】
本発明の実施形態は、例えばデータサーバとしてのバックエンドコンポーネントを含むコンピューティングシステム、またはアプリケーションサーバなどのミドルウェアコンポーネントを含むコンピューティングシステム、またはユーザーが本発明の実施形態と対話するためのグラフィカルユーザーインターフェースまたはウェブブラウザを有するクライアントコンピュータなどのフロントエンドコンポーネントを含むコンピューティングシステム、またはそのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの1つまたは複数の任意の組み合わせで実施することができる。システムのコンポーネントは、任意の形式または媒体のデジタルデータ通信(例えば、通信ネットワーク)によって相互接続されてもよい。通信ネットワークの例には、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)(例えば、インターネット)が含まれる。
【0108】
コンピューティングシステムには、クライアントおよびサーバが含まれ得る。通常、クライアントとサーバとは互いにリモートであり、通常は通信ネットワークを介して対話する。クライアントとサーバの関係は、個々のコンピュータで実行され、相互にクライアントとサーバとの関係を有するコンピュータプログラムによって発生する。
【0109】
本明細書は多くの詳細を含むが、これらは本発明の範囲または請求され得るものに対する制限として解釈されるべきではなく、むしろ本発明の特定の実施形態に特有の特徴の説明として解釈されるべきである。個別の実施形態に関連して本明細書に記載される特定の特徴は、単一の実施形態において組み合わせて実施され得る。逆に、単一の実施形態に関連して説明される様々な特徴は、複数の実施形態において別々に、または任意の適切なサブコンビネーションで実施され得る。さらに、特徴は、特定の組み合わせにおいて作用するものとして上述され得、また、最初にそのように特許請求されてもよいが、特許請求された組み合わせからの1つまたは複数の特徴は、場合によっては、組み合わせから切り出され得、特許請求された組み合わせは、サブコンビネーション又はサブコンビネーションの変形に向けられ得る。
【0110】
同様に、処理が特定の順序で図面に示されているが、これは、所望の結果を達成するために、そのような処理が示されている特定の順序で実行されること、または示されているすべての処理が実行されることを必要とするものとして理解されるべきではない。特定の状況では、マルチタスク処理および並列処理が有利であり得る。さらに、上述の実施形態における様々なシステムコンポーネントの分離は、全ての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に統合され得るか、または複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【0111】
HTMLファイルが記述される各インスタンスにおいて、他のファイルタイプまたはフォーマットが代用されてもよい。例えば、HTMLファイルは、XML、JSON、プレーンテキスト、またはその他の種類のファイルに置き換えられ得る。さらに、テーブルまたはハッシュテーブルが言及される場合、他のデータ構造(スプレッドシート、リレーショナル・データベース、構造化ファイルなど)が使用されてもよい。
【0112】
従って、本発明の特定の実施形態が説明されている。他の実施形態は、添付の特許請求の範囲内にある。例えば、請求項に記載された動作は、異なる順序で実行され、それでも所望の結果を達成することができる。