(57)【特許請求の範囲】
【請求項１】
ビデオ安定化のための方法であって、
コンピューティングシステムが、光学式画像安定化（ＯＩＳ）システムを使用して記録デバイスによってキャプチャされたビデオの一連のフレームを受信すること、
前記コンピューティングシステムが、（ｉ）一連のフレームのキャプチャ中のＯＩＳシステムの位置を示すＯＩＳ位置データ、および（ｉｉ）一連のフレームのキャプチャ中の前記記録デバイスの位置を示すデバイス位置データを受信すること、
前記コンピューティングシステムが、一連のフレームにおける特定のフレームに関する第１の変換を決定すること
を含み、前記第１の変換は、特定のフレームに関する前記ＯＩＳ位置データおよび特定のフレームに関する前記デバイス位置データに基づいて決定され、
前記方法は、さらに、
前記コンピューティングシステムが、特定のフレームの後にキャプチャされた一連のフレームにおける１つまたは複数のフレームについて、前記第１の変換と、前記デバイス位置データに基づいて決定された前記記録デバイスの位置とに基づいて、特定のフレームに関する第２の変換を決定すること、
前記コンピューティングシステムが、前記第２の変換を使用して特定のフレームの安定化バージョンを生成すること
を含む、ビデオ安定化のための方法。
【請求項２】
前記ＯＩＳ位置データを受信することは、前記ＯＩＳシステムの可動レンズの位置を示すレンズのシフトデータを受信することを含み、前記デバイス位置データを受信することは、前記記録デバイスのジャイロスコープまたは加速度計から方位または移動データを受信することを含む、請求項１に記載のビデオ安定化のための方法。
【請求項３】
前記ＯＩＳ位置データは、一連のフレーム内の各フレームに関する複数のＯＩＳ位置読み取り値を示し、前記デバイス位置データは、一連のフレーム内の各フレームに関する複数のデバイス位置測定値を示す、請求項１または２に記載のビデオ安定化のための方法。
【請求項４】
特定のフレームに対応するレンズ焦点位置を決定することをさらに含み、特定のフレームに関する前記第１の変換は、前記レンズ焦点位置を使用して決定される、請求項１乃至３のいずれか１項に記載のビデオ安定化のための方法。
【請求項５】
前記ＯＩＳ位置データによって示される前記ＯＩＳシステムの可動要素の位置に基づいて特定のフレームの画像オフセットを決定することをさらに含み、特定のフレームに関する前記第１の変換が前記画像オフセットを使用して決定される、請求項１乃至４のいずれか１項に記載のビデオ安定化のための方法。
【請求項６】
前記方法は、前記ＯＩＳ位置データおよびデバイス位置データに基づいて、一組の複数のフレームに亘って発生する一組のカメラ位置を決定することをさらに含み、前記一組の複数のフレームは、特定のフレームの前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームを含み、
前記方法は、前記一組のカメラ位置にフィルタリングを適用することをさらに含み、前記第２の変換は、前記一組のカメラ位置にフィルタリングを適用することに基づいて決定されたカメラ位置に基づいて決定される、請求項１乃至５のいずれか１項に記載のビデオ安定化のための方法。
【請求項７】
前記一組のカメラ位置にフィルタリングを適用した出力から特定のフレームに関する中間カメラ位置を決定すること、
前記中間カメラ位置と特定のフレームの直前のフレームに関する仮想カメラ位置とを比較すること
をさらに含み、前記第２の変換は、前記中間カメラ位置と特定のフレームの直前のフレームに関する前記仮想カメラ位置との比較に基づいて決定されたカメラ位置に基づいて決定される、請求項６に記載のビデオ安定化のための方法。
【請求項８】
特定のフレームにおけるモーションブラーの量を特徴付けるデータを生成することをさらに含み、前記第２の変換は、特定のフレームにおけるモーションブラーの量を特徴付ける前記データを使用して決定されたカメラ位置に基づいて決定される、請求項１乃至７のいずれか１項に記載のビデオ安定化のための方法。
【請求項９】
特定のフレームにおけるモーションブラーを特徴付ける前記データを生成することは、特定のフレームの露光の開始に対して決定された射影行列と、特定のフレームの露光の終了に対する射影行列とに基づいてモーションブラーカーネルを推定することを含む、請求項８に記載のビデオ安定化のための方法。
【請求項１０】
一組の複数のフレームに亘る記録デバイスの一貫した移動中に発生する位置を表すカメラ位置を決定することをさらに含み、前記第２の変換は、カメラの一貫した移動中に発生する位置を表すカメラ位置に基づいて決定される、請求項１乃至９のいずれか１項に記載のビデオ安定化のための方法。
【請求項１１】
前記カメラ位置は、特定のフレームの前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームとを含む一組のフレームに対応するデータに対して安定したフィルタリングを適用することによって生成される、請求項１０に記載のビデオ安定化のための方法。
【請求項１２】
特定のフレームの前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームとを含む一組のフレームに亘るカメラ位置の分析に基づいて、前記記録デバイスの一貫した移動の確率を決定すること、
（ｉ）カメラの一貫した移動中に発生する位置を表すカメラ位置と、（ｉｉ）特定のフレームに関する第２のカメラ位置とをブレンドすること
をさらに含み、前記カメラ位置は、決定された前記確率に従ってブレンドされ、前記第２の変換は、前記カメラ位置および前記第２のカメラ位置をブレンドした結果に基づいて決定される、請求項１０または１１に記載のビデオ安定化のための方法。
【請求項１３】
前記一貫した移動の確率は、一連のフレームに対応するカメラ位置からサブサンプリングされた一組のカメラ位置に対する線形回帰を使用して決定され、
前記第２のカメラ位置は、特定のフレームにおけるブラーの量を示すデータを使用して決定される、請求項１２に記載のビデオ安定化のための方法。
【請求項１４】
特定のフレームに関する前記第２の変換を決定することは、
特定のフレームおよび特定のフレームの後に発生する１つまたは複数のフレームを含む参照セット内の各参照フレームについて、フレームに対応する前記デバイス位置データおよび前記ＯＩＳ位置データに基づいてフレームの画像データの射影を決定すること、
特定のフレームの射影画像データを出力フレームにマッピングする特定のフレームに関する変換を決定すること、
前記参照セット内の各参照フレームについて、特定のフレームに関して決定された前記変換が、前記参照フレームに適用されたときに、出力フレームのピクセルの各々を定義しているかどうかを判定すること、
決定された前記変換を前記射影画像データに適用しても出力フレームのピクセルの各々が定義されない少なくとも１つの参照フレームを特定すること、
特定のフレームに対して決定されたカメラ位置と、前記少なくとも１つの参照フレームに対して決定されたカメラ位置との間の最小遷移量を特定すること、
特定された前記最小遷移量を使用して決定されたカメラ位置に関する第２の変換を決定すること
を含み、前記第２の変換は、前記参照セット内の参照フレームの各々の射影に適用されたときに、前記第２の変換が画像データを出力フレームのピクセルの各々にマッピングするように決定される、請求項１乃至１３のいずれか１項に記載のビデオ安定化のための方法。
【請求項１５】
前記方法は、特定のフレームに関する現在の遷移量を決定することをさらに含み、前記現在の遷移量は、特定のフレームの直前のフレームに対して決定されたカメラ位置と、特定のフレームに対して決定されたカメラ位置との間の差を示しており、
前記方法は、特定のフレームの後に発生する１つまたは複数の将来のフレームの各々に関する将来の遷移量を決定することをさらに含み、各将来の遷移量は、特定のフレームに対して決定されたカメラ位置と、将来のフレームの１つに対して決定されたカメラ位置との間の差を示しており、
前記方法は、前記現在の遷移量と前記将来の遷移量の中から、カメラ位置における最大の差を示す最大の遷移量を特定すること、
特定された前記最大の遷移量に基づいてカメラ位置を決定すること
をさらに含み、
前記第２の変換は、決定された前記カメラ位置を使用して決定される、請求項１乃至１４のいずれか１項に記載のビデオ安定化のための方法。
【請求項１６】
特定された前記最大の遷移量に基づいて前記カメラ位置を決定することは、
前記最大の遷移量が、１つまたは複数の将来のフレームの特定の将来のフレームに対応していると判断すること、
特定のフレームに関するカメラ位置を、前記特定の将来のフレームに関するカメラ位置に向けて調整すること
を含み、特定のフレームに関するカメラ位置は、特定のフレームのキャプチャと、特定の将来のフレームのキャプチャとの間の時間量に応じてスケーリングされる量で調整される、請求項１５に記載のビデオ安定化のための方法。
【請求項１７】
特定のフレームのスキャンラインの適切なサブセットの各々について、出力フレームに関するスキャンラインのマッピングまたはスキャンラインに関する仮想カメラ位置を決定すること、
スキャンラインの適切なサブセットに関して決定されたマッピング間で補間することにより、またはスキャンラインの適切なサブセットに関して決定された仮想カメラ位置間で補間することにより、特定のフレームの各スキャンラインに関するマッピングを決定すること
をさらに含む、請求項１乃至１６のいずれか１項に記載のビデオ安定化のための方法。
【請求項１８】
前記第１の変換は、特定のフレームを画像にマッピングする第１の射影行列であり、
前記第２の変換は、中間空間内の画像を特定のフレームの安定化バージョンに射影するための第２の射影行列である、請求項１乃至１７のいずれか１項に記載のビデオ安定化のための方法。
【請求項１９】
記録デバイスであって、
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによる実行時に、処理を行わせる命令を含む１つまたは複数の非一時的なコンピュータ可読デバイスと
を備え、前記処理は、
前記記録デバイスの１つまたは複数のプロセッサが、光学式画像安定化（ＯＩＳ）システムを使用して記録デバイスによってキャプチャされたビデオの一連のフレームを受信すること、
前記記録デバイスの前記１つまたは複数のプロセッサが、（ｉ）一連のフレームのキャプチャ中のＯＩＳシステムの位置を示すＯＩＳ位置データ、および（ｉｉ）一連のフレームのキャプチャ中の前記記録デバイスの位置を示すデバイス位置データを受信すること、
前記記録デバイスの前記１つまたは複数のプロセッサが、一連のフレームにおける特定のフレームに関する第１の変換を決定すること
を含み、前記第１の変換は、特定のフレームに関するＯＩＳ位置データおよび特定のフレームに関するデバイス位置データに基づいて決定され、
前記処理は、さらに、
前記記録デバイスの前記１つまたは複数のプロセッサが、特定のフレームの後にキャプチャされた一連のフレームにおける１つまたは複数のフレームについて、前記第１の変換と、前記デバイス位置データに基づいて決定された前記記録デバイスの位置とに基づいて特定のフレームに関する第２の変換を決定すること、
前記記録デバイスの前記１つまたは複数のプロセッサが、前記第２の変換を使用して特定のフレームの安定化バージョンを生成すること
を含む、記録デバイス。
【請求項２０】
１つまたは複数のプロセッサによる実行時に、処理を行わせる命令を含むコンピュータプログラムであって、前記処理は、
前記１つまたは複数のプロセッサが、光学式画像安定化（ＯＩＳ）システムを使用して記録デバイスによってキャプチャされたビデオの一連のフレームを受信すること、
前記１つまたは複数のプロセッサが、（ｉ）一連のフレームのキャプチャ中のＯＩＳシステムの位置を示すＯＩＳ位置データ、および（ｉｉ）一連のフレームのキャプチャ中の前記記録デバイスの位置を示すデバイス位置データを受信すること、
前記１つまたは複数のプロセッサが、一連のフレームにおける特定のフレームに関する第１の変換を決定すること
を含み、前記第１の変換は、特定のフレームに関するＯＩＳ位置データおよび特定のフレームに関するデバイス位置データに基づいて決定され、
前記処理は、さらに、
前記１つまたは複数のプロセッサが、特定のフレームの後にキャプチャされる一連のフレームにおける１つまたは複数のフレームについて、前記第１の変換と、前記デバイス位置データに基づいて決定された前記記録デバイスの位置とに基づいて特定のフレームに関する第２の変換を決定すること、
前記１つまたは複数のプロセッサが、前記第２の変換を使用して特定のフレームの安定化バージョンを生成すること
を含む、コンピュータプログラム。
【請求項２１】
ビデオ安定化のための装置であって、
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによる実行時に、前記装置に請求項１乃至１８のいずれか１項に記載の方法を実行させるコンピュータ可読命令を含むメモリと
を備える装置。
【請求項２２】
コンピュータによる実行時に、前記コンピュータに請求項１乃至１８のいずれか１項に記載の方法を実行させるコンピュータ可読命令を含むコンピュータプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
ビデオ記録は、一般的に、カメラ、携帯電話、タブレットコンピュータ、およびその他の記録デバイスを使用して行われる。多くの場合、ハンドヘルド記録デバイスを使用して記録されたビデオは、ビデオ品質を低下させる意図しない動きの影響を受ける。動きの主な原因の１つは、手ぶれである。例えば、ユーザーが記録デバイスを保持しているときに意図しない、または不本意な動きが、ビデオの品質に影響を与える。一貫性のないパンニングおよびその他の動き（ｍｏｔｉｏｎｓ）も、ビデオ品質を低下させる。これらの望ましくない動きは、記録されたビデオ映像にブラー、ぶれ、およびその他の視認可能な欠陥を引き起こす。
【０００２】
記録デバイスのぶれは、例えば、画像安定化機構によってぶれが補正されない限り、同様にぶれのあるビデオが生成される。光学式画像安定化（ＯＩＳ：ｏｐｔｉｃａｌ  ｉｍａｇｅ  ｓｔａｂｉｌｉｚａｔｉｏｎ）は、レンズまたは画像センサなどの記録デバイスのコンポーネントを機械的に移動することにより、ビデオに存在するぶれおよびブラーを低減することができる。しかしながら、ＯＩＳシステムの動作によってアーティファクトが発生する場合があり、ＯＩＳシステムは一般に、補正することができる動きの量に制限がある。同様に、ＯＩＳシステムは、ユーザーによるパンニングなど、記録デバイスの意図的な動きを不正確に補正する場合がある。電子画像安定化（ＥＩＳ：Ｅｌｅｃｔｒｏｎｉｃ  ｉｍａｇｅ  ｓｔａｂｉｌｉｚａｔｉｏｎ）は、例えば、画像の分析に基づいて画像フレームを整列およびシフトすることにより、ビデオに存在するぶれを低減することもできる。しかしながら、被写体の動き、ノイズ、およびキャプチャされたビデオにおけるカメラのモーションブラーによって処理が混乱することがあるため、すべてのＥＩＳ技術が信頼できるわけではない。
【発明の概要】
【０００３】
ビデオ安定化システムは、ＯＩＳとＥＩＳの組み合わせを使用してビデオを安定化することができる。ＯＩＳモジュールは、ビデオキャプチャ中にフレームを安定させることができ、ＯＩＳモジュールからの位置情報（例えば、レンズのシフト情報）をキャプチャして、ＥＩＳ処理において使用することができる。ＯＩＳレンズのシフト位置を使用することにより、安定化処理は、ＯＩＳシステムによって生じる歪みを補正するとともに、ＯＩＳシステムによってすでに補正された調整または動きを回避することができる。
【０００４】
ビデオキャプチャ中に、システムは、記録デバイスのジャイロスコープから記録デバイスに関する位置データを取得することもできる。システムは、ＥＩＳ処理中にデバイス位置データとＯＩＳ位置データとを使用して、キャプチャ中の記録デバイスの実際の姿勢と、ＯＩＳによって生じるカメラビューの調整とを考慮することができる。結果として、ＥＩＳ処理は、ＯＩＳモジュールの動作（例えば、内部レンズの移動）に起因する画像シフトとともに、記録デバイス全体の動き（例えば、カメラのぶれまたは記録デバイスの他の外因性移動）を補正することができる。これにより、システムは、キャプチャされた画像データと実際のシーンとの間の関係をより正確に判断して、入力フレームから安定した出力フレームをより正確に生成することを可能にすることができる。
【０００５】
ビデオ安定化システムは、他の様々な手法を使用して、高品質の安定化を提供することができる。例えば、フレームを処理するとき、システムは将来のフレーム（例えば、後でキャプチャされたフレームまたは先読みフレーム）を使用して、可能性のある大きな動きを検出し、大きな動きが発生する前でも、補正を開始することができる。これにより、一連のフレームにおける突発的な動き変化を回避することができる。ビデオキャプチャにより実質的にリアルタイムで安定化を実行する場合でも、フレームキャプチャとＥＩＳ処理との間にわずかな遅延を実行することにより、将来のフレームの分析を実行して、適切な数の後にキャプチャされたフレームを以前のキャプチャされたフレームの安定化に利用可能にすることが可能となるようにすることができる。別の例として、システムは、フレームの異なる領域がキャプチャされたときに、異なるカメラ位置を考慮することによってローリングシャッタ歪みを補正することができる。安定した出力フレームが異なる領域を正しく整列させるように、例えば、異なるスキャンラインなど、キャプチャされたフレームの異なる領域に対して異なる画像変換を適用することができる。別の例として、システムは、焦点の変化によるカメラレンズの動きを検出することができるとともに、焦点の変化に伴うことが多い有効焦点距離の変化によって生じる起因するパースペクティブ（ｐｅｒｓｐｅｃｔｉｖｅ）の変化（例えば、フォーカスブリージング（ｆｏｃｕｓ  ｂｒｅａｔｈｉｎｇ））を除去することができる。別の例として、システムは、カメラのモーションブラーを見積もり、ＥＩＳを使用して推定されたモーションパスを、ブラーによって示される動きに整列することができる。
【０００６】
概略的な一態様では、方法は、コンピューティングシステムが、光学式画像安定化（ＯＩＳ）システムを使用して記録デバイスによってキャプチャされたビデオの一連のフレームを受信するステップと、コンピューティングシステムが、（ｉ）一連のフレームのキャプチャ中のＯＩＳシステムの位置を示すＯＩＳ位置データ、および（ｉｉ）一連のフレームのキャプチャ中の記録デバイスの位置を示すデバイス位置データを受信するステップと、コンピューティングシステムが、一連のフレームにおける特定のフレームに関する第１の変換を決定するステップと、第１の変換は、特定のフレームに関するＯＩＳ位置データおよび特定のフレームに関するデバイス位置データに基づいて決定され、コンピューティングシステムが、特定のフレームの後にキャプチャされた一連のフレームにおける１つまたは複数のフレームについて、第１の変換と、デバイス位置データに基づいて決定された記録デバイスの位置とに基づいて特定のフレームに関する第２の変換を決定するステップと、コンピューティングシステムが、第２の変換を使用して特定のフレームの安定化バージョンを生成するステップとを含む。
【０００７】
実施形態は、以下の特徴の１つまたは複数を含むことができる。例えば、記録デバイスおよびコンピューティングシステムは、単一のデバイスに統合されてもよい。
いくつかの実施形態では、コンピューティングシステムおよび記録デバイスは両方とも携帯電話の一部である。
【０００８】
いくつかの実施形態では、ＯＩＳ位置データを受信することは、ＯＩＳシステムの可動レンズの位置を示すレンズのシフトデータを受信することを含み、デバイス位置データを受信することは、記録デバイスのジャイロスコープまたは加速度計から方位または移動データを受信することを含む。
【０００９】
いくつかの実施形態では、ＯＩＳ位置データは、一連のフレームにおける各フレームに関する複数のＯＩＳ位置読み取り値を示す。デバイス位置データは、一連のフレームにおける各フレームに関する複数のデバイス位置測定値を示す。
【００１０】
いくつかの実施形態では、方法は、特定のフレームに対応するレンズの焦点位置を決定することを含む。特定のフレームに関する第１の変換は、レンズの焦点位置を使用して決定される。
【００１１】
いくつかの実施形態では、方法は、ＯＩＳ位置データによって示されるＯＩＳシステムの可動要素の位置に基づいて特定のフレームの画像オフセットを決定することを含む。特定のフレームに関する第１の変換は、画像オフセットを使用して決定される。
【００１２】
いくつかの実施形態では、方法は、ＯＩＳ位置データおよびデバイス位置データに基づいて、一組の複数のフレームに亘って発生する一組のカメラ位置を決定することと、一組の複数のフレームは、特定のフレームの前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームとを含み、一組のカメラ位置にフィルタリングを適用することとを含む。第２の変換は、一組のカメラ位置にフィルタリングを適用することに基づいて決定されたカメラ位置に基づいて決定される。
【００１３】
いくつかの実施形態では、方法は、一組のカメラ位置にフィルタリングを適用した出力から特定のフレームに関する中間カメラ位置を決定することと、中間カメラ位置と特定のフレームの直前のフレームに関する仮想カメラ位置と比較することとを含む。第２の変換は、中間カメラ位置と特定のフレームの直前のフレームに関する仮想カメラ位置との比較に基づいて決定されたカメラ位置に基づいて決定される。
【００１４】
いくつかの実施形態では、方法は、特定のフレームにおけるモーションブラーの量を特徴付けるデータを生成することを含む。第２の変換は、特定のフレームにおけるモーションブラーの量を特徴付けるデータを使用して決定されたカメラ位置に基づいて決定される。
【００１５】
いくつかの実施形態では、特定のフレームにおけるモーションブラーを特徴付けるデータを生成することは、特定のフレームの露光の開始に対して決定された射影行列と、特定のフレームの露光の終了に対する射影行列とに基づいてモーションブラーカーネルを推定することを含む。
【００１６】
いくつかの実施形態では、方法は、一組の複数のフレームに亘る記録デバイスの一貫した移動（ｃｏｎｓｉｓｔｅｎｔ  ｍｏｖｅｍｅｎｔ）中に発生する位置を表すカメラ位置を決定することを含む。第２の変換は、カメラの一貫した移動中に発生する位置を表すカメラ位置に基づいて決定される。
【００１７】
いくつかの実施形態では、カメラ位置は、特定のフレームの前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームとを含む一組のフレームに対応するデータに対して安定したフィルタリングを適用することによって生成される。
【００１８】
いくつかの実施形態では、この方法は、特定のフレームの前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームとを含む一組のフレームに亘るカメラ位置の分析に基づいて、記録デバイスの一貫した移動の確率を決定することと、（ｉ）カメラの一貫した移動中に発生する位置を表すカメラ位置と、（ｉｉ）特定のフレームに関する第２のカメラ位置と、をブレンドすることとを含み、カメラ位置は、決定された確率に従ってブレンドされる。第２の変換は、カメラ位置および第２のカメラ位置をブレンドした結果に基づいて決定される。
【００１９】
いくつかの実施形態では、一貫した移動の確率は、一組のフレームに対応するカメラ位置からサブサンプリングされた一組のカメラ位置に対する線形回帰を使用して決定される。第２のカメラ位置は、特定のフレームにおけるブラーの量を示すデータを使用して決定される。
【００２０】
いくつかの実施形態では、特定のフレームに関する第２の変換を決定することは、特定のフレームおよび特定のフレームの後に発生する１つまたは複数のフレームを含む参照セット内の各参照フレームについて、フレームに対応するデバイス位置データおよびＯＩＳ位置データに基づいてフレームの画像データの射影を決定することと、特定のフレームの射影画像データを出力フレームにマッピングする特定のフレームに関する変換を決定することと、参照セット内の各参照フレームについて、特定のフレームに関して決定された変換が、参照フレームに適用されたときに、出力フレームのピクセルの各々を定義しているかどうかを判定することと、決定された変換を射影画像データに適用しても出力フレームのピクセルの各々が定義されない少なくとも１つの参照フレームを特定することと、特定のフレームに対して決定されたカメラ位置と、少なくとも１つの参照フレームに対して決定されたカメラ位置との間の最小遷移量を特定することと、特定された最小遷移量を使用して決定されたカメラ位置に関する第２の変換を決定することとを含み、第２の変換は、参照セット内の参照フレームの各々の射影に適用されたときに、第２の変換が画像データを出力フレームのピクセルの各々にマッピングするように決定される。
【００２１】
いくつかの実施形態では、この方法は、特定のフレームに関する現在の遷移量を決定することと、現在の遷移量は、特定のフレームの直前のフレームに対して決定されたカメラ位置と、特定のフレームに対して決定されたカメラ位置との間の差を示しており、特定のフレームの後に発生する１つまたは複数の将来のフレームの各々に関する将来の遷移量を決定することと、各将来の遷移量は、特定のフレームに対して決定されたカメラ位置と、将来のフレームの１つに対して決定されたカメラ位置との間の差を示しており、現在の遷移量と将来の遷移量の中から、カメラ位置における最大の差を示す最大の遷移量を特定することと、特定された最大の遷移量に基づいてカメラ位置を決定することとを含む。第２の数学的変換は、決定されたカメラ位置を使用して決定される。
【００２２】
いくつかの実施形態では、特定された最大の遷移量に基づいてカメラ位置を決定することは、最大の遷移量が、１つまたは複数の将来のフレームの特定の将来のフレームに対応していると判断することと、特定のフレームに関するカメラ位置を、特定の将来のフレームに関するカメラ位置に向けて調整することとを含み、特定のフレームに関するカメラ位置は、特定のフレームのキャプチャと、特定の将来のフレームのキャプチャとの間の時間量に応じてスケーリングされる量で調整される。
【００２３】
いくつかの実施形態では、方法は、特定のフレームのスキャンラインの適切なサブセットの各々について、出力フレームに関するスキャンラインのマッピングまたはスキャンラインに関する仮想カメラ位置を決定することと、スキャンラインの適切なサブセットに関して決定されたマッピング間で補間することにより、またはスキャンラインの適切なサブセットに関して決定された仮想カメラ位置間で補間することにより、特定のフレームの各スキャンラインに関するマッピングを決定することとを含む。
【００２４】
いくつかの実施形態では、第１の変換は、特定のフレームを画像にマッピングする第１の射影行列であり、第２の変換は、中間空間内の画像を特定のフレームの安定化バージョンに射影するための第２の射影行列である。
【００２５】
これらの態様の他の実施形態は、非一時的な機械可読記憶デバイス上にエンコードされた、方法の動作を実行するように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。１つまたは複数のデバイスのシステムは、処理中にシステムに動作を実行させる、システム上にインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによって構成することができる。１つまたは複数のコンピュータプログラムは、データ処理装置による実行時に、装置に動作を実行させる命令を有するように構成することができる。
【００２６】
様々な実施形態により、以下の利点の１つまたは複数が提供され得る。例えば、ビデオ映像の品質は、ぶれ、ブラー、およびその他の動きを低減することで向上させることができる。ＯＩＳ技術とＥＩＳ技術を組み合わせることにより、安定化されたビデオは、いずれかの技術を単独で使用するよりも滑らかになる。ＯＩＳは、個々のフレームのカメラのモーションブラーを大幅に削減し、複数のフレームに亘る動きを削減することができる。ＥＩＳは、記録デバイスの移動を追跡するジャイロスコープセンサからのデータを使用して、一連のビデオフレームに見られる動きをさらに低減することができる。ＥＩＳ処理は、またレンズのシフト情報などのＯＩＳ位置データを使用して、画像データを安定化された出力フレームにマッピングする際の精度を高めることができる。システムは、ＯＩＳ位置データとデバイスジャイロスコープセンサとを併用して、カメラ位置を推定することができる。これにより、ＥＩＳ処理は、ＯＩＳモジュールによって既に相殺されたデバイスの動きに対する補正を回避することができ、また、ＥＩＳが、望ましくないＯＩＳの移動（例えば、パンニングと干渉する移動、歪みを導入する移動、またはデバイスの動きに対応しない動き）を補正することも可能にする。
【００２７】
いくつかの実施形態では、システムは、ＥＩＳ処理の精度を高めるために先読みフレームを使用して、大きな動きや突発的な動きの影響を軽減することができる。後続のフレームの分析に基づいて、ビデオフレームを調整して、動きが発生する前に動きの大きな変化に漸次的に備えることができる。システムは、パンニングなどの一貫した移動が発生しているかどうかを算定し、一貫した移動を反映するようにビデオフレームを調整することができる。ローリングシャッタ歪みを軽減または除去することができる。フォーカスブリージングによるパースペクティブの変化を軽減または排除することができる。
【００２８】
いくつか実施形態では、システムは、ビデオをキャプチャしながら、リアルタイムまたは実質的にリアルタイムの処理を提供することができる。例えば、記録された映像にＥＩＳ処理が適用されるように、ビデオ映像の記録中にＥＩＳ処理を発生させることができる。さらに、説明される技術は、計算的に実行可能で、かつ携帯電話などのバッテリ駆動のモバイル電子デバイス上で電力効率の良い方法で実行することができる。
【００２９】
本明細書に記載される主題の１つまたは複数の実施形態の詳細は、添付の図面および以下の説明に記載される。本主題の他の特徴、態様、および利点は、明細書、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００３０】
【図１】一例のビデオ安定化システムを示す図である。
【図２】ビデオの安定化に使用されるデータの例を示す図である。
【図３Ａ】は、ビデオ安定化のための一例のプロセスを示すフロー図である。
【図３Ｂ】は、ビデオ安定化のための一例のプロセスを示すフロー図である。
【図３Ｃ】は、ビデオ安定化のための一例のプロセスを示すフロー図である。
【発明を実施するための形態】
【００３１】
様々な図面の同様の参照番号および部材名称は、同様の構成要素を示している。
図１は、ビデオ安定化のための一例のシステム１００を示す図である。システム１００は、ＯＩＳモジュール１１５を有するカメラモジュール１１０を含む記録デバイス１０２を含む。記録デバイス１０２は、ビデオフレームをキャプチャしつつ、ＯＩＳモジュール１１５を使用して、フレームキャプチャ中の記録デバイス１０２の動きを少なくとも部分的に相殺する（ｃｏｕｎｔｅｒａｃｔ）。記録デバイス１０２は、１つまたは複数のデバイス位置センサ１２０、１つまたは複数のデータ記憶デバイス１３０、およびＥＩＳモジュール１５５をも含む。
【００３２】
記録デバイス１０２は、カメラモジュールを含む、携帯電話、タブレットコンピュータ、カメラなどの様々なタイプのいずれかとすることができる。記録デバイス１０２は、ソフトウェア、ハードウェア、またはそれらのいくつかの組み合わせで実行され得る、ＥＩＳモジュール１５５の動作を実行するためのコンピューティングシステムを含むことができる。例えば、記録デバイス１０２は、例えば、１つまたは複数のプロセッサ、１つまたは複数の実行可能な命令を格納している１つまたは複数のデータ記憶デバイス、メモリ、入出力コンポーネントなどの様々な処理コンポーネントを含み得る。ＥＩＳ処理を実行するプロセッサは、汎用プロセッサ（例えば、携帯電話またはその他のデバイスのメインＣＰＵ）、グラフィックプロセッサ、コプロセッサ、画像プロセッサ、固定機能ＥＩＳプロセッサ、またはそれらの任意の組み合わせを含み得る。
【００３３】
ＥＩＳモジュール１５５は、デバイス位置センサ１２０およびＯＩＳモジュール１１５の両方からの位置データを使用して、記録デバイスによってキャプチャされたビデオを安定化させる。例えば、ＯＩＳモジュール１１５からの位置データを使用して、デバイス位置データから推測される予想されるカメラビューに関して、ＯＩＳ移動の効果を表すオフセットを決定することができる。これにより、ＯＩＳモジュール１１５がデバイス位置に対してシーンのカメラのビューを変化させても、ＥＩＳモジュール１５５は画像センサの実際のビューを反映する有効なカメラ位置を推定することが可能となる。本明細書で説明する他の特徴とともに、これらの技術により、記録デバイス１０２がＯＩＳおよびＥＩＳ処理を同時に効果的に使用し、両方の技術の利点を実現することが可能となる。
【００３４】
一般に、ＯＩＳは、カメラのぶれによる個々のフレーム内のぶれを低減するのに非常に効果的であり、ＯＩＳは、一連のフレームに亘って現れる動きを低減するのに幾分効果的である。しかしながら、ＯＩＳを単独で使用すると、多くの場合、様々な制限が課される。ＯＩＳモジュールは、動きに応答する速度と、補正できる動きの大きさとが制限され得る。さらに、ＯＩＳモジュールの動作により、不安定なビデオなどの歪みが発生する場合があり、パンニングなどの所望の動きを不正確に相殺し得る。ＥＩＳモジュール１５５は、ＯＩＳモジュールの内部移動を記述する位置データを使用して、これらの制限の影響を軽減することができる。
【００３５】
ＯＩＳモジュール１１５は、記録デバイスの移動を補正しようと試みるため、デバイスの動きのみでは、ビデオキャプチャ中に使用される真のカメラビューを示し得ない。ＥＩＳ処理がデバイスの動きのみに基づいて移動を補正しようと試みる場合、ＥＩＳ処理は、ＯＩＳシステムによってすでに補正された動きを補正し得る。さらに、ＯＩＳは、通常、デバイスの動きの影響を部分的にのみ除去し、補正量がフレームごとに異なる。高品質の安定化を提供するために、ＥＩＳモジュール１５５は、デバイスのレベル位置データとともにＯＩＳ位置データを使用して、各フレームに適用される安定化量を変更し、いくつかの実施形態では、フレームの個々のスキャンラインについても同様に変更する。この処理により、効果的な安定化を提供するとともに、ビデオ映像における歪みを低減または除去することが可能になる。例えば、フレームのキャプチャ中にＯＩＳレンズのシフト位置を変更すると、特に、多くのカメラモジュールで典型的なローリングシャッタと組み合わせた場合に、歪みが生じ得る。フレームキャプチャ中の異なる時点でのＯＩＳレンズのシフトに関する情報により、ＥＩＳモジュール１５５は、フレームの異なる部分がキャプチャされたときのレンズ位置を推定して、画像を修正することができる。ＥＩＳモジュール１５５は、パンニングと干渉するか、それ以外に望ましくないＯＩＳレンズのシフトの影響を低減するように補正することもできる。
【００３６】
ＥＩＳモジュール１５５がビデオを向上させることができる別の方法は、引き続きキャプチャされるフレームのデータの分析によるものである。特定のフレームを処理するために、ＥＩＳ処理モジュールは、１つまたは複数の将来のフレームがキャプチャされた時間を含むタイムウィンドウ内の一組のカメラ位置を見積もり得る。将来のフレームおよび対応する位置に関する情報は、様々な形で使用することができる。第１に、ＥＩＳモジュール１５５は、一組のカメラにフィルタリングを適用して、フレームを変更するための画像変換を定義するために使用される動きパターンを滑らかにすることができる。第２に、ＥＩＳモジュール１５５は、一組のカメラを使用して、一貫性のある移動（例えば、パンニング）が存在するか、または一貫性のある移動の試みがなされた可能性を算定し、可能性があれば、この動きと一致するようにフレームを調整することができる。第３に、ＥＩＳモジュール１５５は、将来のカメラ位置に対するフレーム用のカメラ位置を算定し、将来の大きな動きに合わせて調整することができる。例えば、将来のフレームについて大きく急速な移動が識別された場合、ＥＩＳモジュール１５５は、動きが始まる前に、フレームのコンテンツの調整を開始することができる。ＥＩＳモジュール１５５は、数フレームに亘って大きな見かけの動きを可能にするのではなく、動きをより大きなフレームに亘って広げることができ、それにより、初期フレーム中に増分画像シフト（ｉｎｃｒｅｍｅｎｔａｌ  ｉｍａｇｅ  ｓｈｉｆｔｓ）が生じて、より多くのフレームに亘って移動が徐々に広がるようになる。
【００３７】
ＥＩＳモジュール１５５は、例えば、画像フレームの各スキャンラインに適用される変換を変更するなど、出力フレームの領域合成を実行する。これにより、システムは、ローリングシャッタ歪み、ＯＩＳモジュール１１５の移動、および単一フレームのキャプチャ期間内に発生する様々なデバイスの動きを補正することができる。
【００３８】
さらに図１を参照すると、記録デバイス１０２は、ビデオデータをキャプチャするカメラを有する任意の適切なデバイス、例えば、カメラ、携帯電話、スマートフォン、タブレットコンピュータ、ウェアラブルコンピュータ、または他のデバイスとすることができる。図１の例は、ビデオをキャプチャしてビデオを処理する単一のデバイスを示しているが、オプションで、機能が複数のデバイスまたはシステムに分散されてもよい。例えば、第１のデバイスは、ビデオフレームをキャプチャし、位置データやその他のパラメータをメタデータとして記録する。第１のデバイスは、ビデオフレームおよびメタデータを、本明細書で説明するＥＩＳ処理を実行することができる第２のデバイス、例えば、ローカルコンピューティングシステムまたはリモートサーバに提供することができる。
【００３９】
カメラモジュール１１０は、レンズ素子、画像センサ、センサ読み取り回路、および他のコンポーネントを含むことができる。ＯＩＳモジュール１１５は、センサ、可動要素、プロセッサ、および可動要素を移動させる駆動機構を含むことができる。可動要素は、カメラモジュール１１０の光路に配置されている。例えば、可動要素は、反射要素または屈折要素、例えば、レンズ、ミラー、プリズムであり得る。いくつかの実施形態では、可動要素はカメラモジュール１１０の画像センサである。センサは、動きを検出する１つまたは複数のジャイロスコープまたはその他のセンサを含むことができる。プロセッサは、可動要素がセンサによって示される動きを補正するために必要な移動の量および方位を決定し、次に、可動要素を移動させるように駆動機構に指示する。
【００４０】
記録デバイス１０２は、記録デバイス１０２の方位の変化を測定する１つまたは複数の位置センサ１２０を含む。いくつかの実施形態では、記録デバイス１０２の位置センサ１２０は、ＯＩＳモジュール１１５によって使用されるセンサとは別個のものである。位置センサ１２０は、１つまたは複数の軸を中心とした記録デバイス１０２の回転を検出することができる。例として、デバイス位置センサ１２０は、３軸ジャイロスコープまたは慣性測定ユニット（ＩＭＵ：ｉｎｅｒｔｉａｌ  ｍｅａｓｕｒｅｍｅｎｔ  ｕｎｉｔ）であり得る。デバイスの位置を決定するために他のセンサが、追加的または代替的に使用され得る。例えば、１つまたは複数の加速度計、一軸ジャイロスコープ、二軸ジャイロスコープなどを使用して、記録デバイス１０２の位置を決定してもよい。一般に、記録デバイス１０２の回転位置を決定することを可能にする任意の適切なセンサまたはセンサの組み合わせを使用することができる。
【００４１】
場合によっては、記録デバイス１０２の別個の位置センサ１２０を使用することに加えて、またはその代わりに、ＯＩＳモジュール１１５のジャイロスコープセンサからの位置データをキャプチャして格納してもよい。それでもなお、記録デバイス１０２がＯＩＳセンサとは異なる特性を有するジャイロスコープセンサを使用することは有益である。例えば、記録デバイス１０２用のジャイロスコープセンサは、毎秒１００度を超える感知可能な回転範囲で約４００Ｈｚの速度で測定値を提供し得る。デバイスのレベルセンサと比較して、ＯＩＳモジュールの典型的なジャイロスコープセンサは、異なる速度および異なる範囲、例えば、毎秒５０００個の測定速度以上で、毎秒約１０度の感知可能な回転範囲で測定値を提供し得る。いくつかの実施形態では、（例えば、小さな変化または高周波パターンを検出するための）ＯＩＳモジュールセンサのより頻繁な測定と同様に、（例えば、大きな動きを記述するための）デバイスのレベルセンサのより大きな回転範囲を有することは、有益である。従って、両方のタイプのデータを共に使用して、記録デバイス１０２の位置を決定してもよい。
【００４２】
記録デバイス１０２は、カメラモジュール１１０およびフレームキャプチャプロセスを特徴付ける情報を格納する１つまたは複数のデータ記憶デバイス１３０を含む。例えば、格納されたデータは、ＯＩＳモジュール１１５の位置と画像データにおいて結果的に生じるオフセットとの間の関係を示す較正データ１３２を含むことができる。同様に、較正データ１３２は、システムがフォーカスブリージング（ｆｏｃｕｓ  ｂｒｅａｔｈｉｎｇ）を考慮できるようにする、カメラモジュールレンズの焦点位置とそれらの焦点位置の有効焦点距離との対応を示すことができる。格納されたデータは、カメラモジュール１１０における画像センサのリードアウト特性を示すスキャンパターンデータ１３４を含むことができる。例えば、スキャンパターンデータ１３４は、例えば、スキャンニングの方向（例えば、上から下に読み取られるスキャンライン）、スキャンラインが個別に読み取られるか、またはグループで読み取られるか、およびその他、を示し得る。
【００４３】
ビデオキャプチャ中に、カメラモジュール１１０、ＯＩＳモジュール１１５、およびデバイス位置センサ１２０は、それぞれビデオキャプチャプロセスに関する情報を提供する。カメラモジュール１１０は、ビデオフレームデータ１４２、例えば、一連のビデオ画像フレームを提供する。また、カメラモジュール１１０は、フレーム露光データ１４４を提供し、フレーム露光データ１４４は、キャプチャされた各フレームに関して、露光期間の表示、および露光が発生した時期を示す基準時間（例えば、露光の開始時間または終了時間）を含むことができる。カメラモジュール１１０はまた、各キャプチャされたフレームに対するレンズ焦点位置を示すレンズ焦点位置データ１４６を提供する。
【００４４】
ＯＩＳモジュール１１５は、ビデオキャプチャ中の様々な時間におけるＯＩＳモジュール１１５の可動要素の位置を示すＯＩＳ位置データ１４８を提供する。例えば、可動要素が動きを補正するためにシフトする可動レンズである場合、ＯＩＳモジュール１１５は、可動レンズの現在の位置を指定するレンズシフト読み出しを提供することができる。記録デバイス１０２は、レンズのシフト位置および位置が発生した時間を記録することができる。いくつかの実施形態では、ＯＩＳ位置データ１４８は、各ビデオフレーム露光の期間に亘って複数の測定が行われるように、高頻度（例えば、ビデオキャプチャのフレームレートよりも高いレート）でキャプチャされる。
【００４５】
デバイス位置センサ１２０は、ビデオキャプチャ中の記録デバイス１０２の回転および／または他の移動を示すデバイス位置データ１５０を提供する。デバイスの位置は、例えば、２００Ｈｚ以上の高周波数で測定することができる。従って、多くの場合、各ビデオフレームのキャプチャ中に複数の異なる時間に関して測定値を取得することができる。
【００４６】
レンズ焦点位置データ１４６、ＯＩＳ位置データ１４８、およびデバイス位置データ１５０はすべて、指定された位置が発生した時間を示すタイムスタンプとともに記録することができる。タイムスタンプは、例えば、様々な位置測定値から得られたデータを時間内に整列することができるように、ミリ秒の単位で正確に作成することができる。さらに、測定値間の時間における値を決定するために、デバイス、ＯＩＳシステム、またはレンズフォーカス機構の位置を補間することができる。
【００４７】
データキャプチャの潜在的なタイミングの例をチャート１５２に示す。図示されるように、デバイスおよびＯＩＳシステムの複数の位置を各ビデオフレームに対して決定することができるように、デバイス位置データ１５０（例えば、ジャイロスコープデータ）およびＯＩＳ位置データ１４８（例えば、レンズのシフト位置データ）は、ビデオキャプチャフレームレート（例えば、毎秒３０フレーム、毎秒６０フレームなど）よりも高いレートでキャプチャされる。レンズ焦点位置データ１４６は、画像フレームごとに少なくとも１回キャプチャされ得る。位置データは、フレーム露光に対して非同期にキャプチャされる。例えば、ジャイロセンサデータおよびＯＩＳ位置データは、画像フレームの露光の開始または終了を超えるレートでサンプリングされ、かつ画像フレームの露光の開始または終了と必ずしも同期しないレートでサンプリングされる。
【００４８】
カメラモジュール１１０および他のコンポーネントから取得されたデータは、処理のためにＥＩＳモジュール１５５に提供される。この処理は、ビデオキャプチャの進行中に生じ得る。例えば、ＥＩＳ処理は実質的にリアルタイムで実行することができるため、ビデオキャプチャの終了時にユーザーがアクセスできるビデオファイルは、ＥＩＳモジュール１５５によって安定化されている。いくつかの実施形態では、ＥＩＳ処理は、例えば、ビデオキャプチャが完了した後、またはビデオを記録した時期以外の時期にデバイスによって、後で実行される。ＥＩＳモジュール１５５は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせまたはそれらのサブコンビネーションで実施することができる。
【００４９】
ＥＩＳモジュール１５５は、更新されたデバイス位置データ１５０をデバイス位置センサ（単数または複数）１２０から定期的または連続的に取得する動きデータハンドラ１５６を含む。動きデータハンドラは、デバイス位置データ１５０から現在のカメラの姿勢を推定する。例えば、ジャイロスコープ信号を取得し、使用して、例えば、２００Ｈｚなどの高周波数で記録デバイス１０２のデバイス位置を推定することができる。任意の時間ｔにおけるこのデバイスの位置は、以下にＲ（ｔ）として参照される。このデバイス位置は、例えば、１軸、２軸、または３軸に対する記録デバイス１０２の回転位置を示し得る。デバイスの位置は、回転行列として、または座標系に関して、または他の形式で表され得る。各計算されたデバイスの位置は、記録デバイス１０２の位置が発生した時期を示す時間によってラベル付けすることができる。
【００５０】
ＥＩＳモジュール１５５は、ＯＩＳ位置データ１４８として示されるＯＩＳ位置リードアウトを定期的または連続的に取得するＯＩＳ位置データハンドラ１５８を含む。ＯＩＳ位置データハンドラ１５８は、ＯＩＳリードアウト値をデバイス位置で使用することができるオフセットに変換する。例えば、ＯＩＳレンズの位置は、２次元のピクセルオフセットに変換することができる。オフセットを生成するために、ＯＩＳ位置データハンドラ１５８は、ＯＩＳ位置から対応するオフセットに変換するための変換係数または変換行列を提供し得る格納された較正データ１３２を使用することができる。ＯＩＳ位置によるオフセットの生成では、例えば、カメラモジュール１１０が光学ズームが可能な場合、レンズの焦点位置および／またはレンズズーム位置の変化による、カメラの有効焦点距離の経時的な変化を考慮することができる。動きデータハンドラ１５６と同様に、ＯＩＳ位置データハンドラ１５８は、各測定値およびオフセットにデータが表す時間によってラベルを付ける。
【００５１】
ＥＩＳモジュールは、デバイス位置データハンドラ１５６によって計算されたデバイス位置と、ＯＩＳ位置データハンドラ１５８によって計算されたＯＩＳオフセットとを受け取る動きモデルコンストラクター１６０を含む。このデータおよびフレーム露光データ１４２およびレンズ焦点位置データ１４６を用いて、動きモデルコンストラクター１６０は、フレームに関する第１の変換１６２を生成する。例えば、第１の変換１６２は、カメラの視野内の現実世界のシーンを、キャプチャされたフレームにマッピングする射影行列（ｐｒｏｊｅｃｔｉｏｎ  ｍａｔｒｉｘ）とすることができる。このプロセスは、フレームごとに繰り返される。フレームについて第１の変換１６２を生成する際に、ＯＩＳモジュール１１５の位置は、ジャイロスコープデータから決定された主要なデバイス位置からのオフセットとしてモデル化することができる。以下でさらに説明するように、オフセットは、その時間におけるレンズの焦点位置の有効焦点距離を参照することにより、キャプチャの時間におけるカメラの有効焦点距離を有効にすることができる。第１の変換１６２は、単一の画像フレームの異なるサブセットまたは異なる領域の関係を別々に記述することができる。例えば、第１の変換１６２の異なる部分または異なる成分は、フレームの異なるスキャンラインが実際のシーンにどのようにマッピングされるかを記述し得る。デバイス位置、ＯＩＳモジュール位置、レンズの焦点位置はすべて、フレームの個々のスキャンラインの露光時に正確な位置を提供するために、測定タイムスタンプを使用して整列され、必要に応じて補間される。
【００５２】
動きモデルコンストラクター１６０によって生成された第１の変換１６２は、第２の変換１７２を決定する非線形フィルタリングエンジン１７０に提供される。この第２の変換１７２は、フレームの画像データを、フレームの安定化バージョンを表す出力フレームに射影する第２の射影行列Ｐ’ｉ，ｊであり得る。具体的には、第２の変換１７２は、キャプチャされた画像データを処理するのではなく、初期変換１６２、Ｐｉ，ｊを使用して行われた画像射影を出力フレームにマッピングすることができる。いくつかの実施形態では、２つの変換１６２、１７２は、フレームの初期にキャプチャされた画像データを処理し、その処理した画像データを安定化された出力フレームに直接マッピングする単一の変換に合成されることができる。
【００５３】
動きを効果的に安定させるために、非線形フィルタリングエンジン１７０は、処理中のフレームのキャプチャ後に、将来発生する動きを考慮するように第２の変換１７２を生成することができる。例えば、分析中の現在のフレームに関して、記録デバイスの位置は、前のフレームから大きく移動していない可能性がある。それでもなお、将来のフレームで大きな動きが発生するとエンジン１７０が判断した場合、第２の変換１７２が生成されて、現在のフレームをシフトまたは変更して、ビデオに見かけの移動を導入して、将来の大きな移動を、急激な変化ではなく、一連の緩やかな変化として、広げることができるようにする。同様に、将来のフレームの安定化が切り取りまたは他の変更を導入する場合、一連のフレームに亘るより緩やかで一貫した変化のために、第２の変換１７２が生成されて、それらの変更を以前のフレームに少なくとも部分的に伝播させることができる。
【００５４】
非線形フィルタリングエンジン１７０は、フレームの仮想カメラ位置から第２の変換１７２を生成することができる。露光が発生したときのカメラの実際の位置を表すのではなく、仮想カメラ位置は、記録されているビデオを安定化させる記録デバイス１０２の調整された、または仮定の（ｈｙｐｏｔｈｅｔｉｃａｌ）姿勢を表すことができる。仮想位置は、仮想カメラを配置するための望ましい位置、例えば、シーンの特定のビューまたはパースペクティブ（ｐｅｒｓｐｅｃｔｉｖｅ）をシミュレートする位置を表すことができる。一般に、任意のカメラ位置は、グローバル参照フレームに対する回転および平行移動によって表すことができる。仮想カメラ位置は、回転行列、例えば、基準位置に対する回転オフセットを示す行列として表現することができる。これは、３つの回転軸に関する回転オフセットを示す３ｘ３行列であり得る。いくつかの実施形態では、ＥＩＳモジュールの安定化処理は、回転成分に関してのみ位置を定義する。これは、回転成分が一般にハンドヘルドビデオの安定性に最大の影響を与えるからである。
【００５５】
フレームに関する仮想カメラ位置は、推定カメラ位置に対する調整を反映して、ビデオの安定化を強化し、歪みおよび処理を修正し、パンニングを容易にし、それ以外にビデオを向上させることができる。フレームの仮想カメラ位置は、様々な因子に基づいて調整される初期カメラ位置を生成することにより決定することができる。例えば、仮想カメラ位置は、フレームの前後に検出された移動に基づいて、フレームにおけるぶれ量に基づいて、パンニングが発生している可能性に基づいて、デバイス位置をフィルタリングすることで調整されて、調整を介して、将来のフレームにおける動きに対して準備し、かつ／または画像データが出力フレーム全体をカバーすることを保証することができる。様々な要因は、変更される、ブレンドされる、またはそれ以外にフレームに関する最終的な仮想カメラ位置を決定するために使用される、フレームに関する一連の仮想カメラ位置を生成することにより、考慮することができる。
【００５６】
変換１６２、１７２が異なるスキャンラインに対して異なるマッピングを有するのと同様に、フレームの異なるスキャンラインに対して異なる仮想カメラ位置を決定して、フレームキャプチャ中のデバイス位置、ＯＩＳモジュール１１５の位置、および／またはレンズ焦点位置の変化を調整することができる。従って、フレームの異なる部分に対して異なる仮想カメラ位置を使用することができる。効率化のために、仮想カメラ位置および第２の変換１７２の対応する成分を画像センサのスキャンラインの適切なサブセットに対して計算し、残りのスキャンラインに対して適切なデータを補間することができる。以下の様々な例では、説明を簡潔にするために、画像センサの中央スキャンラインなどの単一のスキャンラインについて説明する。仮想カメラ位置および対応する射影行列成分を完全に計算する技術は、画像フレームの複数のスキャンラインに対して使用することができ、必要に応じて各スキャンラインに対して個別に使用することもできる。
【００５７】
本明細書で使用される場合、デバイス位置とは、例えば、デバイス位置データ１５０（例えば、ジャイロスコープデータ）およびデバイス位置データハンドラ１５６の出力によって示されるような記録デバイス１０２の位置を指す。デバイスのレベル位置は、カメラモジュール１１０のレンズの内部移動またはＯＩＳモジュール１１５の移動を考慮することなく、記録デバイス１０２の姿勢または方位を示す。また、本明細書で使用される場合、カメラ位置は、カメラの有効なビューまたは推定ビューに対応する位置を示す。ＯＩＳモジュール１１５の動作、レンズブリージング（ｌｅｎｓ  ｂｒｅａｔｈｉｎｇ）、および他の要因によるシフトを考慮することにより、カメラ位置はデバイス位置と異なり得る。さらに、カメラ位置は、仮想位置（例えば、カメラの実際のビューではなく、カメラの向上されたビューまたは変更されたビューを反映する近似位置または仮定位置（ｈｙｐｏｔｈｅｔｉｃａｌ  ｐｏｓｉｔｉｏｎｓ））であり得る。
【００５８】
次に、ＥＩＳモジュール１５５は、画像ワーピングエンジン１８０を使用して、非線形動きフィルタリングエンジン１７０の出力を使用し、各キャプチャされた画像フレームを出力フレームにマッピングする。第２の射影１７２は、フレームの各部分が出力空間にマッピングされ、出力フレームのピクセルの各々が定義されるように、フレームの各スキャンラインに対応する成分を含むことができる。ＥＩＳモジュール１５５の処理は、ビデオのフレームごとに実行することができる。
【００５９】
図２は、ビデオの安定化に使用されるデータの例を示す図である。この図は、記録デバイス１０２によってキャプチャされる一連のフレーム２１０を示している。各フレームは、対応する組のメタデータ２１２によってラベル付けされ、メタデータ２１２は、例えば、露光期間、露光基準時間（例えば、開始時間、停止時間、または露光に関する他の基準点）、レンズの焦点位置、およびその他を示す。図示されていないが、デバイス位置データおよびＯＩＳモジュールの位置データは、各露光中の様々な時間においてキャプチャされ、かつタイムスタンプが付与される。
【００６０】
フレーム２１１に対する安定化処理を実行するために、フレーム２１１のキャプチャ前後の時間範囲が定義される。フレームのこの時間範囲またはウィンドウは、フレーム２１１を変換する方法を決定するために分析される。分析中のフレーム２１１の中央スキャンラインの露光時間Ｔは、範囲の中心として使用することができる。所定の時間オフセットＬを使用して、範囲、例えば［Ｔ−Ｌ，Ｔ＋Ｌ］からの時間範囲を設定することができる。一部の実施形態では、この時間オフセットＬは約２００ミリ秒である。その結果、範囲は、フレーム２１１の約７フレーム前および約７フレーム後を含むこととなる。より長い時間オフセットおよびより短い時間オフセットＬを使用してもよい。ＥＩＳモジュール１５５は、処理中に、将来のフレームのコンテキストを使用するため、フレームの処理は、適切な数の後続フレームがキャプチャされるまで遅延される。
【００６１】
図２では、フレーム２１１は、画像センサによってキャプチャされたものとして示されている。上述したように、ＥＩＳモジュール１５５は、フレーム２１１のキャプチャ中の記録デバイス１０２の実際の位置、ならびにＯＩＳモジュール要素などのカメラ要素の位置およびレンズ焦点位置を示すデータから第１の変換１６２を定義する。第１の変換１６２を適用した結果は、出力フレームターゲット２３５に関して示される射影画像２３０である。いくつかの実施形態では、第１の変換１６２は、フレーム２１１のキャプチャに対応するデータのみを使用して決定される。変換１６２は、カメラの実際のレンズ位置に対応しているため、射影画像２３０は、画像データとカメラの視野内の実際のシーンとの間のマッピングを推定する。
【００６２】
ＥＩＳモジュール１５５は、第２の変換１６２を使用して、フレーム２１１の画像データをさらに調整する。この第２の変換１６２は、仮想レンズ位置（例えば、フレーム２１１をキャプチャするために使用された場合に、より安定したビデオを生じさせる仮定位置）に対応する。この第２の変換１６２は、フレーム２１１に適用されると、出力フレーム２３５のデータを完全に定義する射影画像２４０を生成する。
【００６３】
射影画像２４０を生成する第２の変換１７２は、［Ｔ−Ｌ，Ｔ＋Ｌ］からの時間範囲内の各フレームに対応するデータから生成され得る。この期間に亘る記録デバイス１０２の位置Ｒ（ｔ）は、例えば、ガウスフィルタを使用して、範囲に亘る動きを滑らかにするためにフィルタリングされる。フレーム２１１の中央スキャンラインの露光である時間Ｔにおけるフィルタリングの結果は、初期仮想カメラ位置Ｖ０（Ｔ）として使用することができる。フィルタリングを行っても、デバイス位置における望ましくない移動または望ましくない動きを生じさせるその他の要因が存在し得る。結果として、初期仮想カメラ位置Ｖ０（Ｔ）は、一連のさらなる処理を通じて更新されることができる。いくつかの実施形態では、フィルタリングされる位置Ｒ（ｔ）は、ＯＩＳの動きがないと想定される位置であり、従って、位置は、ＯＩＳ位置データ１４８を考慮することのないデバイス位置データ１５０に基づくものとすることができる。他の実施形態では、ＯＩＳの動きおよびオフセットを、フィルタリングされる一組の位置に組み込んで、初期仮想カメラ位置Ｖ０（Ｔ）を生成することができる。
【００６４】
例えば、第２の仮想カメラ位置Ｖ１（Ｔ）は、将来のフレームに亘って発生する動きの量に基づいて、位置Ｖ０（Ｔ）を、前のフレームに対するカメラ位置ＶＦ（Ｔ＿ｐｒｅ）で補間することによって生成することができる。前のフレームに対するカメラ位置は、最終的な仮想カメラ位置（例えば、前のフレームの安定化された出力バージョンを生成するために使用される変換に対応する位置）とすることができる。補間は、フレーム２１１と前のフレームとの間の動きの見かけの変化を、フレーム２１１と将来のフレームとの間の動きにおける見かけの変化に整列することができる。
【００６５】
第３の仮想カメラ位置Ｖ２（Ｔ）は、フレーム２１１に存在するカメラのモーションブラーの量に基づいて、Ｖ１（Ｔ）を、実際のデバイス位置Ｒ（Ｔ）で補間することによって生成することができる。これにより、適用される安定化の量を低減して、視聴者のブラーの知覚を低減することができる。モーションブラーは、通常、消去することができないため、モーションブラーにより、より自然な結果を得るために、必要に応じてビデオの安定性を低減することができる。
【００６６】
第４の仮想カメラ位置Ｖ３（Ｔ）は、時間範囲［Ｔ−Ｌ，Ｔ＋Ｌ］に亘る記録デバイス１０２の一貫した動き（ｃｏｎｓｉｓｔｅｎｔ  ｍｏｔｉｏｎ）中に生じる位置をシミュレートするか、または表すように生成することができる。この位置は、ドメイン変換フィルタなどの安定したフィルタを、推定された実際のデバイス位置Ｒ（ｔ）に時間範囲に亘って適用することにより決定され得る。フィルタは、Ｖ０（Ｔ）の生成に使用される同じ組のデバイス位置に適用されるが、このステップは異なるタイプのフィルタリングを表す。例えば、Ｖ０（Ｔ）は、所定の形状または所定のパターンを強制することなく、平滑化するが、経時的に推定された実際のデバイス位置の変化に全体的に追従するフィルタリングにより生成され得る。対照的に、Ｖ３（Ｔ）は、記録デバイス１０２のユーザーが潜在的に意図する実質的に線形のパンニングまたは他の動きなどの所定の一貫した動きパターンに一致するようにデバイスパターンをフィルタリングすることによって生成される。
【００６７】
第５の仮想カメラ位置Ｖ４（Ｔ）は、Ｖ３（Ｔ）とＶ２（Ｔ）の補間として生成することができる。ＥＩＳモジュール１５５は、経時的なデバイス位置の変化が記録デバイス１０２のパンニングを表す可能性が高いかどうかを見積もることができ、かつそれに応じて補間に重み付けすることができる。パンニングの可能性が高いと判断された場合、Ｖ４（Ｔ）は、推定されたパンニング位置Ｖ３（Ｔ）に近いものとなる。パンニングの可能性が低いと判断された場合、Ｖ４（Ｔ）は位置Ｖ２（Ｔ）に近いものとなる。
【００６８】
第５の仮想カメラ位置Ｖ４（Ｔ）により、ＥＩＳモジュール１５５は、対応する変換が出力フレーム２３５に提供するカバレッジを見積もることができる。出力フレーム２３５全体を満たし、ピクセルを未定義のままにしないことが望ましいため、ＥＩＳモジュール１５５は、仮想カメラ位置Ｖ４（Ｔ）からのシーンのビューを表す、射影行列などの変換を決定し、射影された画像が出力フレーム２３５をカバーすることを検証することができる。将来のフレームにおける動きを確認するために、将来の画像フレームによってキャプチャされたシーンの一部に変換を適用することができる。変換および対応する仮想カメラ位置Ｖ４（Ｔ）は、現在のフレームおよび一組の将来のフレームの各々が、変換を使用してマッピングされたときに、出力フレーム２３５を完全に定義するように、調整することができる。結果として生じる変換は、変換１７２として設定され得、かつフレーム２１１に対する安定化された出力フレーム２３５を生成するために使用することができる。
【００６９】
いくつかの実施形態では、フレーム２１１に対する安定化された出力フレーム２３５を生成することは、フレーム２１１の１つまたは複数の他のスキャンラインに対して、時間Ｔにおいて露光されたスキャンラインに関して説明したＥＩＳ処理技術を実行することを含む。例えば、処理は、特定の間隔（例えば、１００スキャンラインごと、５００スキャンラインごとなど）における、または特定の参照点（例えば、フレーム全体の４分の１および４分の３、またはフレームの上部およびフレームの下部）におけるスキャンラインに対して実行され得る。フレーム２１１のスキャンラインの適切なサブセットのみに関して仮想カメラ位置および第２の変換１７２が決定されると、計算された位置間でスキャンラインの変換（例えば、射影行列の対応する部分）が補間される。このようにして、適切な変換が各スキャンラインに対して決定され、各スキャンラインは、異なる変換が結果として適用され得る。いくつかの実施形態では、仮想カメラ位置および第２の変換１７２を生成する完全な処理は、異なるスキャンラインのデータ間の補間に依存することなく、各フレームの各スキャンラインに対して行われ得る。
【００７０】
フレーム２１１が出力フレーム２３５にマッピングされると、結果は保存され、ＥＩＳモジュール１５５は、次のフレームの処理を開始する。このプロセスは、ビデオの各フレームが処理されるまで続く。
【００７１】
仮想カメラ位置を生成するために使用される様々な因子および結果的に得られた変換は、組み合わせて、または別々に使用することができる。例えば、実施形態によっては、仮想カメラ位置Ｖ０（Ｔ）からＶ４（Ｔ）を作成するために使用される補間および調整の一部が省略され得る。例えば、異なる実施形態では、その目的でＶ４（Ｔ）を使用する代わりに、フィルタリング処理されたカメラ位置Ｖ０（Ｔ）からＶ３（Ｔ）のいずれかを使用して、出力フレームにデータを射影するための変換を決定することができる。従って、フィルタリング処理されたカメラ位置Ｖ０（Ｔ）、Ｖ１（Ｔ）、およびＶ２（Ｔ）のいずれかを使用して安定化する変換を生成しても、ビデオの安定性を向上し得る。同様に、Ｖ３（Ｔ）は、パンニングが発生しているビデオを安定化させるのに効果的であり得る。説明された様々な要因のサブセットを考慮に入れたとしても、他の多くのバリエーションが本開示の範囲内にある。
【００７２】
説明した手法は、様々な方法で適用することができる。例えば、２つの変換１６２、１７２を順次画像データに適用するのではなく、記録デバイスは、両方の組み合わされた効果を反映する単一の合成された変換を生成することができる。従って、変換１６２、１７２を使用して安定化された画像データを生成することは、変換１６２、１７２を直接適用するのではなく、画像データを安定化するために最終的に使用されるさらなる変換または関係の生成を包含し得る。
【００７３】
図３Ａ〜３Ｃは、ビデオ安定化のための一例のプロセス３００を示すフロー図を示す。プロセス３００は、図１および図２で説明した技術のより詳細な例を示している。プロセス３００の動作は、記録デバイス１０２（例えば、カメラ、携帯電話、タブレットコンピュータ、その他）などのコンピューティングシステムによって実行することができる。プロセス３００の動作は、単一のコンピューティングデバイスまたは複数のコンピューティングデバイスによって実行され得る。
【００７４】
プロセス３００では、一連のビデオフレームがキャプチャされる（３０１）。フレームがキャプチャされると、他の様々なタイプのデータもキャプチャされる。露光時間、露光期間、レンズの焦点位置、該当する場合はズーム位置、カメラ識別子（例えば、使用する複数のカメラまたはレンズを指定する必要がある場合）、およびその他などのメタデータが各フレームに関してキャプチャされる（３０２）。記録デバイスの方位を示すジャイロスコープセンサデータまたはその他のデータなどのデバイス位置データがキャプチャされる（３０３）。ＯＩＳモジュールの可動要素の位置（例えば、レンズのシフト位置）を示すＯＩＳ位置データがキャプチャされる（３０４）。デバイス位置およびＯＩＳの位置に関する測定は、フレームレートよりも高い周波数で行うことができるため、キャプチャされる各フレームに対して１つまたは複数の測定が行われる。様々な実施形態において、位置測定は２００Ｈｚ以上で行うことができる。
【００７５】
デバイス位置データを処理して一連のフレームに亘って発生するデバイス位置が決定される（３０５）。位置は、座標系における記録デバイスの姿勢または方位を示し得る。例えば、時間ｔにおける位置は、回転行列Ｒ（ｔ）によって示され得る。各フレームに対して、フレームの異なる部分がキャプチャされたときのデバイス位置を表す、デバイスのいくつかの位置を推定することができる。特定のフレームを処理する場合、分析中のフレームの前後のフレームに対するデバイス位置も決定することができるように、複数のフレームの範囲に亘って発生するデバイス位置が使用される。いくつかの実施形態では、コンピューティングシステムは、ジャイロスコープ信号を連続的にフェッチして、高周波数（例えば、２００Ｈｚ）で最新のカメラ位置Ｒ（ｔ）を推定する。
【００７６】
ＯＩＳ位置データを使用してＯＩＳオフセットが生成される（３０６）。保存された較正データは、ＯＩＳの位置をオフセットにマッピングするテーブル、関数、またはその他のデータを示すことができる。例えば、ＯＩＳリードアウトは、２Ｄピクセルオフセットに変換することができる。一例として、オフセットは、オフセットに各時間ｔに対してｘ成分およびｙ成分があることを示す、Ｏ＿ｌｅｎ（ｔ）＝（Ｏ＿ｌｅｎ（ｘ，ｔ），Ｏ＿ｌｅｎ（ｙ，ｔ））として参照することができる。
【００７７】
記録デバイスの製造業者は、１つまたは複数のコンピュータで実行される効率的な較正プロセスを使用して、線形変換により生のＯＩＳリードアウトデータをピクセルオフセットに変換する較正データを生成することができる。較正プロセスは、ＯＩＳ可動要素（例えば、レンズ）が様々な所定の位置にある間に、スクリプトによって制御される、ビデオをキャプチャするための自動データキャプチャプロセスを含むことができる。このプロセスでは、位置の増分変化でビデオフレームをキャプチャしつつ、ＯＩＳ動きフィールド全体をカバーする所定のパターンで可動要素を移動させることができる。可動レンズを備えたＯＩＳモジュールの場合、動きは、可動レンズの中心位置の周りの螺旋状の一連の動きであり得る。次いで、１つまたは複数のコンピュータは、例えば、駆動機構の位置の増分変化を表すフレームを自動的にマーキングすることにより、キーフレームを検出する。次に、キーフレームの時間は、キーフレームに関するタイムスタンプおよびＯＩＳリードアウトデータに基づいて、対応するＯＩＳ位置リードアウトにマッチングされる。１つまたは複数のコンピュータは、特徴検出アルゴリズムを使用して、キーフレーム間の画像シフトをピクセル単位で測定する。例えば、１つまたは複数のコンピュータは、１つのキーフレーム画像を別のキーフレーム画像と比較して、２つのキーフレームに関するＯＩＳリードアウト位置の変化に対応するｘ方向およびｙ方向のピクセルシフトを決定することができる。１つまたは複数のコンピュータは、線形回帰を使用して、ＯＩＳの未加工リードアウトを画像シフトにピクセル単位でマッピングする変換係数またはその他のデータを決定することができる。通常、較正プロセスは、特定のタイプのすべてのカメラモジュールに対して実行でき、かつ個々のデバイスごとに実行する必要はない。
【００７８】
安定化処理を実行するために、コンピューティングシステムは、処理するための特定のフレームを識別する。コンピューティングシステムは、特定のフレームに対するターゲット時間を定義する（３０７）。例えば、中央スキャンラインの露光が生じる時間Ｔをターゲット時間として使用することができる。通常、これは特定のフレームの露光時間の中間である。各フレームのフレームメタデータは、基準時間（例えば、露光の開始時間および／または終了時間）および露光期間を示すため、中央スキャンラインに対応する時間は、フレームごとに決定することができる。
【００７９】
コンピューティングシステムは、ターゲット時間に露光されたスキャンラインに対する変換を決定する（３０８）。変換は、実世界のシーンを画像にマッピングする射影行列とすることができる。この射影行列は、Ｐｉ，ｊとして参照される。ｉは、フレームインデックスであり、ｊは、スキャンラインインデックスである。中央スキャンラインに対応する行列の成分は、Ｐｉ，ｊ＿Ｔである。この変換は、デバイス位置Ｒ（Ｔ）およびＯＩＳ位置オフセットを使用して生成することができる。
【００８０】
ＯＩＳレンズのシフトデータは、フレーム内の主点（例えば、フレーム内の中心点または原点）に対する追加のオフセットとしてモデル化することができる。これは、記録中にＯＩＳレンズが原点の周りを移動するという物理的直感に合致する。射影行列を決定するために、コンピューティングシステムは、デバイス位置データからステップ（３０５）において決定されたカメラ外部行列（ｅｘｔｒｉｎｓｉｃ  ｍａｔｒｉｘ）（例えば、回転行列）であるＲｉ，ｊ＿Ｔを使用することができる。コンピューティングシステムは、カメラ固有行列（ｉｎｔｒｉｎｓｉｃ  ｍａｔｒｉｘ）Ｋｉ，ｊ＿Ｔを決定することもできる（３０９）。例えば、カメラ固有行列は、その時間におけるレンズの焦点位置を考慮して、時間Ｔにおけるカメラの有効焦点距離ｆを使用して生成され得る。較正データを使用して、レンズの焦点位置のリードアウト値に対応する焦点距離を参照することができる。カメラ固有行列Ｋｉ，ｊ＿Ｔは、３ｘ３行列、例えば、
【００８１】
【数１】
0006818912.tif 000002
として決定できる。
ここで、ｆは、現在のフレームの焦点距離であり、Ｐｔは、画像中心に設定された２Ｄ主点であり、Ｏ＿ｌｅｎ（ｊ＿Ｔ）は、Ｔで露光されたスキャンラインでのピクセルにおける変換されたＯＩＳリードアウトである。射影行列は、次の方程式、Ｐｉ，ｊ＿Ｔ＝Ｒｉ，ｊ＿Ｔ＊Ｋｉ，ｊ＿Ｔに従って、カメラ固有行列およびカメラ外部行列を使用して生成することができる（３１０）。第１の変換を中央スキャンラインに関する画像データに適用して、中央スキャンラインを射影することができる（３１１）。
【００８２】
さらに、コンピューティングシステムは、タイムウィンドウの間に生じる実際のデバイス位置Ｒ（ｔ）をフィルタリングすることにより、第１の仮想カメラ位置Ｖ０（Ｔ）を決定することができる（３１２）。第１の変換は、分析中の特定のフレームにおける画像データを座標系にマッピングする。仮想カメラ位置は、このマッピングされた画像データの仮定のビューまたはパースペクティブを表し、これにより、画像データのフレームへのマッピングが調整される。コンピューティングシステムは、ターゲット時間Ｔの前後の時間範囲を定義する（３１３）。例えば、範囲は、ターゲット時間Ｔの前後の所定の時間量Ｌを含むことができる。例えば、Ｌは、２００ｍｓ、５００ｍｓなどであり得る。結果として、定義された時間範囲［Ｔ−Ｌ，Ｔ＋Ｌ］は、特定のフレームが処理される前の１つまたは複数のフレームと、特定のフレームの後の１つまたは複数のフレームとに関する露光時間を含むことができる。コンピューティングシステムは、定義された時間範囲に亘って発生するデバイス位置Ｒ（ｔ）（例えば、回転行列）をフィルタリングする（３１４）。このステップでは、記録デバイスの実際の動きを表す記録デバイス位置が使用されるため、フィルタリングされる位置は、通常、ＯＩＳ操作による調整を反映しない。例えば、このステップでは、コンピューティングシステムは、仮想カメラのＯＩＳの動きが常にゼロであると想定する。Ｏ＿ｌｅｎ＿ｖｉｒｔｕａｌ（ｘ，ｙ）＝（０，０）。それでもなお、いくつかの実施形態では、このプロセス中にフィルタリングされた位置を生成するために、ＯＩＳ位置の変化を使用し得る。フィルタリングは、大きなカーネル（例えば、シグマ＝６）を有するガウスフィルタを使用して実行することができる。このフィルタリングにより、デバイス位置における経時的な変化が滑らかになり、位置のランダムな変化または短時間の変化の影響が軽減され得る。時間Ｔに対応するフィルタリングされたデバイス位置は、第１の仮想カメラ位置Ｖ０（Ｔ）として設定される。
【００８３】
第２の仮想カメラ位置Ｖ１（Ｔ）は、時間Ｔの後の記録デバイスの動きに関する情報を使用して生成することができる（３１５）。将来の動きは、時間Ｔから時間Ｔ＋Ｌまでに発生するデバイス位置を算定することにより見積もることができる。将来発生する移動の量を使用して、初期の仮想カメラ位置Ｖ０（Ｔ）を、フレーム２１１の直前にキャプチャされたフレームの中央スキャンラインに関する最終的な仮想カメラ位置Ｖ（Ｔ＿ｐｒｅ）で補間することにより、第２の仮想カメラ位置Ｖ１（Ｔ）を計算することができる。この例では、仮想カメラ位置を回転行列で表すことができるため、球面補間（ｓｐｈｅｒｉｃａｌ  ｉｎｔｅｒｐｏｌａｔｉｏｎ）を使用することができる。コンピューティングシステムは、前のフレームの中央スキャンラインに関する仮想カメラ位置Ｖ（Ｔ＿ｐｒｅ）にアクセスする（３１６）。次に、コンピューティングシステムは、特定のフレームが処理された後に発生するデバイス位置の変化に基づいて遷移量（ｔｒａｎｓｉｔｉｏｎ  ｍｅａｓｕｒｅ）を決定する。例えば、時間Ｔの後に生じる記録デバイス１０２の移動量を使用して、補間結果がＶ０（Ｔ）またはＶ（Ｔ＿ｐｒｅ）により近くなるかどうかを設定する遷移係数Ａを決定することができる。特に、Ｔの後のデバイス位置の変動性を見積もることができる。「突出（ｐｒｏｔｒｕｓｉｏｎ）」の量を使用して、変動性を測定することができる。直観的に、突出は、前の仮想カメラ姿勢ＶＦ（Ｔ＿ｐｒｅ）が未変化状態に維持されている場合、ワープされたフレームが現在のフレームおよび将来のフレームから突出する量を指す。突出がより大きいほど、遷移比率または遷移量がより大きくなり、逆もまた同様である。コンピューティングシステムは、Ｔ＋Ｌまでの将来の各フレームに関する現在のフレームの突出値を取得し、対応する遷移比率を算出し、最終遷移比率または最終遷移量として遷移比率を平均化することができる。
【００８４】
補間は、関数Ｓｌｅｒｐ（ｐ０，ｐ１，α）＝ｓｉｎ（（１−α）＊θ）／ｓｉｎ（θ）＊ｐ０＋ｓｉｎ（α＊θ）／ｓｉｎ（θ）＊ｐ１として本明細書で参照される球面線形補間を使用して実行することができる。ここで、αは、遷移量または遷移係数であり、０＜＝α＜＝１は、点ｐ０と点ｐ１との間の比率であり、θ＝ａｒｃｃｏｓ（ｐ０・ｐ１）は、点ｐ０から点ｐ１で形成される弧によって範囲が定められた角度である。従って、カメラ位置は、Ｖ１（Ｔ）＝Ｓｌｅｒｐ（ＶＦ（Ｔ＿ｐｒｅ），Ｖ０（Ｔ），Ａ）として決定することができる。動きが、一貫性を維持するか、または緩慢に変化する場合、係数は小さくなり、結果的に生じるカメラ位置は、Ｖ（Ｔ＿ｐｒｅ）に近くなる。将来の動きが大きい場合、係数は大きくなり、結果的に生じるカメラ位置はＶ０（Ｔ）に近くなる。コンピューティングシステムは、補間を実行し（３１８）、これにより、第２の仮想カメラ位置Ｖ１（Ｔ）を、フレーム間で明らかな変化率を滑らかにする位置に設定することができ、動きが変化するように見える割合が急激に増加または減少することはない。
【００８５】
第３の仮想カメラ姿勢Ｖ２（Ｔ）は、フレームキャプチャ中に存在する動きの量、または処理中のフレームに存在するモーションブラーの量に基づいてＶ１（Ｔ）から生成することができる（３１９）。仮想カメラ位置Ｖ１（Ｔ）は、実際のカメラ位置Ｒ（Ｔ）とより密接に整列するように調整され、かつ前のフレームとフレーム２１１との間で発生した動きを反映する。（例えば、被写体の動きではなく、カメラの移動による）かなりの量のモーションブラーがフレーム２１１に存在し、かつ処理されたビデオが非常に安定すると、モーションブラーは、非常に目立ち、かつ不自然になる。視聴者のブラーの知覚を低減するために、あるフレームから次のフレームへの仮想カメラ位置の変化が、実際のカメラ位置を少なくとも部分的に追跡し、画像の自然なブラーと一致させるように許可され得る。これにより、ブラーをある程度隠すことができる。従って、フレーム２１１内の画像ブラーの量の決定に基づいて、記録デバイス１０２の実際の動きの少なくとも一部を使用して、例えば、検出された画像ブラーの量に応じてＶ１（Ｔ）およびＲ（Ｔ）の間を補間することにより、仮想カメラ位置Ｖ１（Ｔ）を調整することができる。
【００８６】
フレームのモーションブラーの量を推定するために、コンピューティングシステムは、ターゲット時間Ｔにおけるスキャンラインのホモグラフィ（ｈｏｍｏｇｒａｐｈｉｅｓ）を決定することができる（３２０）。次いで、コンピューティングシステムは、モーションブラーカーネルを推定する（３２１）。ブラーを特徴付ける１つの手法は、フレームに沿った２つの異なる位置に関する射影行列成分を比較することである。例えば、露光期間Ｅのフレームの場合、特定のフレームの最初と最後のスキャンラインに対応する射影行列を表す射影行列成分Ｐｉ，Ｔ−Ｅ／２およびＰｉ，Ｔ＋Ｅ／２を決定することができる。射影行列は、ＯＩＳ位置データとレンズの焦点距離とを使用して生成されるため、これらのパラメータの変更によって生じるブラーは変換に反映される。次に、コンピューティングシステムは、２つの射影行列間の変換を計算し、結果的に生じる変換を画像の中心点を表す原点に適用する。変換を適用することにより、射影点が射影空間内の実際の原点からのオフセットに移動する。原点からのオフセットの大きさは、ブラーの推定値として使用され得る。
【００８７】
次いで、コンピューティングシステムは、第２の仮想カメラ位置Ｖ１（Ｔ）を実際のデバイス位置Ｒ（Ｔ）に向けて、特定されたブラーの量に基づいて決定された程度にまで、調整する（３２２）。例えば、コンピューティングシステムは、モーションブラーカーネルに基づいて係数を決定し、その係数を使用して、位置Ｖ１（Ｔ）とＲ（Ｔ）との間の球面補間に重みを付けることができる。この係数は、上記のオフセットに基づくものであり得る。いくつかの実施形態では、ブラー量のしきい値が設定され、Ｒ（Ｔ）による補間は、ブラー量がしきい値により表される最小量を超える場合にのみ実行される。例えば、オフセットがＯＩＳ操作で通常補正することができるものを超える動きを表す場合にのみ、補間が実行され得る。
【００８８】
コンピューティングシステムは、一連のフレームに亘る記録デバイスの一貫した動きを表す第４の仮想カメラ位置Ｖ３（Ｔ）を決定する（３２３）。仮想カメラ位置Ｖ３（Ｔ）は、位置Ｖ３（Ｔ）が安定したモーションパスに沿った状態となるように、ユーザーが時間範囲［ＴＬ，Ｔ＋Ｌ］に亘ってカメラをパンニングしているか、または別の一貫した動きを行っていると仮定して生成することができる。従って、安定したフィルタリングが、実際のデバイス位置Ｒ（ｔ）に対して時間範囲［Ｔ−Ｌ，Ｔ＋Ｌ］に亘って適用され得る（３２４）。一例として、ドメイン変換フィルタを使用することができる。例えば、これは、パンニングの最適な軌道を推測し、軌道に沿った対応する位置Ｖ３（Ｔ）を示すことができる。
【００８９】
コンピューティングシステムは、時間範囲に亘って記録デバイスの一貫した動き（例えば、パンニング）が発生する確率Ｓを決定する（３２５）。この時間範囲は、特定のフレームの後にキャプチャされる１つまたは複数の将来のフレームのキャプチャ時間に対応することができる。例えば、見積もられるデータの時間範囲は、［Ｔ＋Ｌ−Ｋ，Ｔ＋Ｌ］とすることができる。ここで、Ｋ＞Ｌである。一般に、時間Ｔよりも前の大量のコンテキストは、パンニングの確率を見積もるのに有益である。例えば、パンニングは、１秒または数秒に亘って発生し得、通常、Ｌの値よりも大幅に大きくなる。その結果、Ｋの値は、例えば１秒、２秒、３秒などに設定することができる。コンピューティングシステムは、ビデオキャプチャの過程で決定されたデバイス位置の比較的長い履歴を利用することができる。いくつかの実施形態では、分析では、Ｔ＋Ｌ時間より前のビデオ全体の全体的な動きのパターンを見積もることができるように、時間範囲の開始をビデオの開始時に設定することができる。
【００９０】
確率Ｓを生成するとき、コンピューティングシステムは、デバイス位置データＲ（ｔ）をダウンサンプリングする（３２６）。例えば、回転位置Ｒ（ｔ）は、３０ｆｐｓのフレームレートでサンプリングすることができる。これは、人間が知覚するレートに近いため、確率の計算は遅い動きやノイズに対してより堅牢なものとなる。コンピューティングシステムは、期間に亘って一連のダウンサンプリングされた位置を分析して、確率を決定する（３２７）。例えば、線形回帰を使用して、ダウンサンプリングされた位置が線形軌道にどの程度よく一致するかの尺度を生成することができる。他のアプローチを分析に使用することができる。例えば、機械学習モデルをトレーニングして、パンニングを示すビデオの例とパンニングを反映しないビデオの例とに基づいてパンニングの可能性を予測することができる。一般に、ジャイロスコープ信号は、信頼性の高いパターンを機械学習モデルに学習させることができる高品質の位置情報を提供する。一例として、シグモイド関数をトレーニングして、パンニング確率Ｓを生成することができる。
【００９１】
コンピューティングシステムは、第５の仮想カメラ位置Ｖ４（Ｔ）を決定する（３２８）。この位置は、第３の仮想カメラ位置Ｖ２（Ｔ）と第４の仮想カメラ位置Ｖ３（Ｔ）とをブレンドすることによって生成することができる（３２９）。例えば、ブレンディングは、一貫した動きの決定された確率に基づいて位置Ｖ２（Ｔ）と位置Ｖ３（Ｔ）との間を補間することによって達成することができる（３３０）。パンニングの可能性が高いと判断された場合、Ｖ４（Ｔ）は、推定されたパンニング位置Ｖ３（Ｔ）に近いものとなる。パンニングの可能性が低いと判断された場合、Ｖ４（Ｔ）は位置Ｖ２（Ｔ）に近いものとなる。
【００９２】
プロセス３００におけるこの時点までに、仮想カメラ位置Ｖ４（Ｔ）は、デバイス位置の範囲に亘るフィルタリングおよび将来の移動の算定による安定化された動きを提供する。位置は、モーションブラーを隠し、かつパンニングが存在する可能性がある場合はパンニングに関して許容するようにも調整される。しかしながら、この位置に対して決定された射影を直接適用すると、出力フレームの一部が未定義のままになる場合がある。例えば、特定のフレームからの画像情報が出力フレームにマッピングされない場合がある。さらなる処理により、出力フレームの各部分が特定のフレームの一部にマッピングされることを確実にするために、仮想カメラ位置を実際のカメラ位置Ｒ（Ｔ）に向けてさらに調整することができる。
【００９３】
コンピューティングシステムは、第５の仮想カメラ位置Ｖ４（Ｔ）に基づいて、変換（例えば、第２の射影行列Ｐｒ（ｔ））を決定する（３３１）。次いで、コンピューティングシステムは、（実際のデバイス位置Ｒ（Ｔ）に基づく）第１の射影行列Ｐｉ，ｊと第２の射影行列との間の基準変換（ｒｅｆｅｒｅｎｃｅ  ｔｒａｎｓｆｏｒｍａｔｉｏｎ）を決定する（３３２）。コンピューティングシステムは、基準変換が現在のビデオフレームまたは期間中にキャプチャされた後のビデオフレームに使用された場合、未定義のピクセルを生じさせるかどうかを判断する（３３３）。例えば、時間範囲［Ｔ，Ｔ＋Ｌ］の間にキャプチャされた各フレームに関して、フレームのＰｉ，ｊの対応する部分を使用して射影画像を決定することができ、基準変換をフレームに関する射影画像に適用することができる。変換された射影画像は、出力フレームに対してチェックされて、出力フレームの各ピクセルが定義されているかどうかが判断される。このチェックは、時間範囲［Ｔ，Ｔ＋Ｌ］の間にキャプチャされた各フレームに対して実行することができる。いくつかの実施形態では、出力フレームが時間範囲の間にキャプチャされた各フレームに対して定義されている場合、特定のフレームの安定化されたバージョンを生成するために、第５の仮想カメラ位置Ｖ４（Ｔ）に対応する第２の射影行列Ｐｒ（ｔ）を使用することができる。
【００９４】
時間範囲［Ｔ，Ｔ＋Ｌ］の間にキャプチャされた任意のフレームの射影バージョンへの基準変換の適用が、出力フレームのすべてのピクセルを定義しない場合、コンピューティングシステムは、期間［Ｔ，Ｔ＋Ｌ］の終了までに各フレームに対する有効なピクセルマッピングを維持するように最小遷移を決定する（３３４）。例えば、Ｔ’において中央スキャンラインを有するフレームが参照変換を使用して完全に定義されない場合、すべての射影ピクセルが有効に定義されるように、バイナリ検索を使用して、Ｖ４（Ｔ）およびＲ（Ｔ’）から最小遷移係数を発見することができる。
【００９５】
コンピューティングシステムは、期間の後のフレームの各々に関して、第５の遷移行列Ｖ４（Ｔ）に対する遷移量を決定する（３３５）。Ｔ’において中央スキャンラインを有するフレームに関する遷移量は、位置Ｖ４（Ｔ）に適用されたときに、位置Ｖ４（Ｔ）から実際のデバイス位置Ｒ（Ｔ’）にシフトする遷移係数であり得る。コンピューティングシステムは、決定された様々な遷移量の中から遷移量を選択する（３３６）。コンピューティングシステムは、一組の中から最高の遷移量を選択することができる。一組の遷移量は、［Ｔ，Ｔ＋Ｌ］から発生するフレームに関して各中央スキャンラインの実際のカメラ位置に対する実際のデバイス位置Ｖ４（Ｔ）の比較を表し得る。従って、一組は、次の遷移量を含むことができる。Ｖ４（Ｔ）→Ｒ（Ｔ），Ｖ４（Ｔ）→Ｒ（Ｔ＋１），．．．，Ｖ４（Ｔ）→Ｒ（Ｔ＋Ｌ））。
【００９６】
例えば、現在の遷移量が特定のフレームから将来のフレームへの遷移に使用される遷移量よりも高い場合、現在の遷移量（例えば、カメラ位置ＶＦ（Ｔ）から現在の実際のデバイス位置Ｒ（Ｔ））を選択することができる。そうでない場合、Ｖ４（Ｔ）から将来のフレームＴ”への遷移について遷移量が最高であるとき、コンピューティングシステムは現在の遷移量を増加させる（３３７）。現在の遷移量が増加する量は、時間Ｔと時間Ｔ’’との間の時間量に応じて変化し得る。時間量がより短いほど、現在の遷移量を増加させることができる。（例えば、現在の遷移量が、Ｖ４（Ｔ）からＲ（Ｔ’’）への遷移量により近いほど）。
【００９７】
ステップ３３６および３３７は、以下のように表現することができる。上記の手法を使用すると、現在のフレームおよび将来のフレームに関する遷移比率を一つのセット（ｔｒ（Ｔ＋０），ｔｒ（Ｔ＋１），…，ｔｒ（Ｔ＋Ｌ））にすることができる。最初に、一連のフレーム内の位置を示すインデックスｉ（０＜＝ｉ＜＝Ｌ）とともに、最大比率が検出される。最大比率が現在のフレーム（ｉ＝０）にある場合、最終遷移比率をこの値（例えば、ｔｒ＝ｔｒ（Ｔ＋０））に設定する。それ以外の場合、比率は、例えば、ｔｒ＝ｔｒ（Ｔ＋０）＋（ｔｒ（Ｔ＋ｉ）−ｔｒ（Ｔ＋０））／（ｉ＋１）のように補間される。このプロセスに示されているように、計算でのインデックスｉの使用によって、現在のフレームに関連して最も高い遷移フレームが将来どの程度発生するかに応じて補間に重みが付けられる。
【００９８】
コンピューティングシステムは、最終的な仮想位置ＶＦ（Ｔ）を生成する（３３８）。これは、Ｖ４（Ｔ）とＲ（Ｔ）との間の補間、即ちＳｌｅｒｐ（Ｖ４（Ｔ）、Ｒ（Ｔ）、ｔｒ）を使用して実行することができる。ここで、ｔｒはステップ３３７で決定された遷移比率または遷移量である。これは、範囲［Ｔ，Ｔ＋Ｌ］のフレームの出力を完全に定義するために必要な最小遷移係数によって第５の仮想カメラ位置Ｖ４（Ｔ）を修正することにより、かつ選択された遷移量を使用して、現在の実際のデバイス位置Ｒ（Ｔ）に関して補間を設定することによって実行することができる。
【００９９】
コンピューティングシステムは、最終的な仮想位置ＶＦ（Ｔ）を使用して、最終的な射影行列Ｐ’ｉ，ｊを決定する（３３９）。初期射影行列Ｐｉ，ｊによって示される第１の変換と、最終的な射影行列Ｐ’ｉ，ｊによって示される第２の変換とは、共に、キャプチャされた特定のフレームの画像データを出力フレームにマッピングする。換言すれば、第１の変換は実際のデバイス位置Ｒ（Ｔ）に基づいて画像データを中間空間にマッピングし、第２の変換は最終的な仮想カメラ位置ＶＦ（Ｔ）に基づいて中間空間から出力フレームに画像データをマッピングする。第１の変換と第２の変換とを組み合わせるか、またはそれ以外に使用して、特定のフレームに適用して画像データを出力フレームに直接マッピングすることができる単一のマッピングを生成するようにすることができる。
【０１００】
プロセス３００の様々なステップは、特定のスキャンライン（例えば、時間Ｔで露光されたスキャンライン）に特有の変換および仮想カメラ位置の決定に関する。同じ技術が、処理される特定のフレーム内の他のスキャンラインの変換および仮想カメラ位置を決定するために使用することができる。一般に、フレームのスキャンラインの適切なサブセットのみが上記の手法を使用して処理される。例えば、上部、下部、および中間のスキャンラインのみを個別に見積もることができる。別の例として、中央スキャンラインと、５０スキャンライン毎、２００スキャンライン毎、または５００スキャンライン毎に発生する他のスキャンラインとを分離して処理することができる。スキャンラインの残りの部分では、別々に計算されるいくつかのスキャンライン間で補間が行われてもよい。
【０１０１】
コンピューティングシステムは、各スキャンラインに対して決定された成分を有する最終的な変換を使用して、処理中の特定のフレームに対して安定化された出力フレームを生成する（３４０）。フレームの安定化された出力バージョンは、記録されているビデオの一部として記憶デバイスに保存される。プロセス３００は、処理されるキャプチャされた一連のフレーム内の次のフレームに対して繰り返され、その後、ビデオキャプチャが終了し、全てのキャプチャされたフレームが処理されるまで次のフレームについて繰り返される。ビデオの追加フレームのキャプチャ、および対応する位置情報は、キャプチャされたフレームの処理中に続行することができる。
【０１０２】
本発明の実施形態および本明細書で説明されるすべての機能動作は、本明細書で開示される構造およびそれらの構造的均等物を含むデジタル電子回路、またはコンピュータソフトウェア、ファームウェア、またはハードウェア、またはそれらの１つまたは複数の組み合わせで実施され得る。本発明の実施形態は、１つまたは複数のコンピュータプログラム製品、即ち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するためにコンピュータ可読媒体上にエンコードされたコンピュータプログラム命令の１つまたは複数のモジュールとして実施され得る。コンピュータ可読媒体は、非一時的コンピュータ可読記憶媒体、機械可読記憶デバイス、機械可読記憶基板、メモリデバイス、機械可読伝播信号に影響を与える物質の組成物、またはこれらの一つまたは複数の組み合わせであり得る。「データ処理装置」という用語は、例として、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む、データを処理するためのすべての装置、デバイス、および機械を包含する。装置は、ハードウェアに加えて、当該のコンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの１つまたは複数の組み合わせを構成するコードを含み得る。伝播信号は、人工的に生成された信号、例えば、適切な受信装置への送信のために情報をエンコードするために生成される機械生成の電気、光学、または電磁信号である。
【０１０３】
コンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとして既知である）は、コンパイルまたは解釈された言語を含む、あらゆる形式のプログラミング言語で記述されてよく、また、スタンドアロンプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチン、またはその他のユニットとして、任意の形式で展開されてもよい。コンピュータプログラムは、必ずしもファイルシステム内のファイルに対応するとは限らない。プログラムは、他のプログラムまたはデータを保持するファイルの一部（例えば、マークアップ言語文書に格納された１つまたは複数のスクリプト）、当該のプログラム専用の単一ファイル、または複数の調整済みファイル（例えば、１つまたは複数のモジュール、サブプログラム、またはコードの一部を格納するファイル）に格納することができる。コンピュータプログラムは、１つのサイトに配置されているか、または複数のサイトに分散され、かつ通信ネットワークによって相互接続された１つのコンピュータ上で、または複数のコンピュータ上で実行されるように展開され得る。
【０１０４】
本明細書で説明されるプロセスおよび論理フローは、入力データを処理して出力を生成することにより機能を実行するために、１つまたは複数のコンピュータプログラムを実行する１つまたは複数のプログラム可能なプロセッサによって実行され得る。プロセスおよび論理フローはまた、特殊用途の論理回路（例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路））によって実行されてもよく、また、装置は、特殊用途の論理回路として実施されてもよい。
【０１０５】
コンピュータプログラムの実行に適したプロセッサは、例として、汎用および特殊用途のマイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の１つまたは複数のプロセッサを含む。一般的に、プロセッサは、読み取り専用メモリまたはランダムアクセスメモリ、あるいはその両方から命令およびデータを受け取る。コンピュータの重要な要素は、命令を実行するプロセッサと、命令およびデータを格納する１つまたは複数のメモリデバイスである。一般に、コンピュータは、データを格納するための１つまたは複数の大容量記憶デバイス（例えば、磁気ディスク、磁気光ディスク、または光ディスク）を含むか、１つまたは複数の大容量記憶デバイスからデータを受信するか、またはそれらにデータを転送するか、またはその両方を行うように動作可能に接続される。しかしながら、コンピュータにそのようなデバイスを備える必要はない。さらに、コンピュータは、別のデバイス、例えば、ほんの数例を挙げると、タブレットコンピュータ、携帯電話、携帯情報端末（ＰＤＡ）、モバイルオーディオプレーヤー、全地球測位システム（ＧＰＳ）受信機に組み込まれてもよい。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ可読媒体は、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリデバイスなどの半導体メモリデバイスを含む、すべての形態の不揮発性メモリ、媒体、およびメモリデバイス、磁気ディスク（例えば、内蔵ハードディスクまたはリムーバブルディスク）、光磁気ディスク、およびＣＤ  ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む。プロセッサおよびメモリは、特殊用途の論理回路によって補完されるか、または組み込まれてもよい。
【０１０６】
ユーザーとの対話を提供するために、本発明の実施形態は、ユーザー情報を表示するためのディスプレイデバイス（例えば、ＣＲＴ（陰極線管）またはＬＣＤ（液晶ディスプレイ）モニタ）、およびユーザーがコンピュータに入力を提供することができるキーボードおよびポインティングデバイス（例えば、マウスまたはトラックボール）を有するコンピュータ上で実施され得る。他の種類のデバイスを使用して、ユーザーとの対話を提供することもできる。例えば、ユーザーに提供されるフィードバックは、任意の形態の感覚フィードバック（例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）であり得る。また、ユーザーからの入力は、音響入力、音声入力、または触覚の入力を含む任意の形態で受信することができる。
【０１０７】
本発明の実施形態は、例えばデータサーバとしてのバックエンドコンポーネントを含むコンピューティングシステム、またはアプリケーションサーバなどのミドルウェアコンポーネントを含むコンピューティングシステム、またはユーザーが本発明の実施形態と対話するためのグラフィカルユーザーインターフェースまたはウェブブラウザを有するクライアントコンピュータなどのフロントエンドコンポーネントを含むコンピューティングシステム、またはそのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの１つまたは複数の任意の組み合わせで実施することができる。システムのコンポーネントは、任意の形式または媒体のデジタルデータ通信（例えば、通信ネットワーク）によって相互接続されてもよい。通信ネットワークの例には、ローカルエリアネットワーク（「ＬＡＮ」）およびワイドエリアネットワーク（「ＷＡＮ」）（例えば、インターネット）が含まれる。
【０１０８】
コンピューティングシステムには、クライアントおよびサーバが含まれ得る。通常、クライアントとサーバとは互いにリモートであり、通常は通信ネットワークを介して対話する。クライアントとサーバの関係は、個々のコンピュータで実行され、相互にクライアントとサーバとの関係を有するコンピュータプログラムによって発生する。
【０１０９】
本明細書は多くの詳細を含むが、これらは本発明の範囲または請求され得るものに対する制限として解釈されるべきではなく、むしろ本発明の特定の実施形態に特有の特徴の説明として解釈されるべきである。個別の実施形態に関連して本明細書に記載される特定の特徴は、単一の実施形態において組み合わせて実施され得る。逆に、単一の実施形態に関連して説明される様々な特徴は、複数の実施形態において別々に、または任意の適切なサブコンビネーションで実施され得る。さらに、特徴は、特定の組み合わせにおいて作用するものとして上述され得、また、最初にそのように特許請求されてもよいが、特許請求された組み合わせからの１つまたは複数の特徴は、場合によっては、組み合わせから切り出され得、特許請求された組み合わせは、サブコンビネーション又はサブコンビネーションの変形に向けられ得る。
【０１１０】
同様に、処理が特定の順序で図面に示されているが、これは、所望の結果を達成するために、そのような処理が示されている特定の順序で実行されること、または示されているすべての処理が実行されることを必要とするものとして理解されるべきではない。特定の状況では、マルチタスク処理および並列処理が有利であり得る。さらに、上述の実施形態における様々なシステムコンポーネントの分離は、全ての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に統合され得るか、または複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【０１１１】
ＨＴＭＬファイルが記述される各インスタンスにおいて、他のファイルタイプまたはフォーマットが代用されてもよい。例えば、ＨＴＭＬファイルは、ＸＭＬ、ＪＳＯＮ、プレーンテキスト、またはその他の種類のファイルに置き換えられ得る。さらに、テーブルまたはハッシュテーブルが言及される場合、他のデータ構造（スプレッドシート、リレーショナル・データベース、構造化ファイルなど）が使用されてもよい。
【０１１２】
従って、本発明の特定の実施形態が説明されている。他の実施形態は、添付の特許請求の範囲内にある。例えば、請求項に記載された動作は、異なる順序で実行され、それでも所望の結果を達成することができる。
【図１】
0006818912.tif 000003
【図２】
0006818912.tif 000004
【図３Ａ】
0006818912.tif 000005
【図３Ｂ】
0006818912.tif 000006
【図３Ｃ】
0006818912.tif 000007