(57)【要約】【課題】制約ベースの回転平滑化を介するデジタルビデオ安定化のためのシステムおよび方法を提供すること。【解決手段】関連付けられたタイムスタンプを有する画像フレームのセットと、関連付けられたタイムスタンプを有する、カメラの向きに関するカメラ配向データのセットとを含むデジタルビデオデータを提供する。連続する画像フレーム間の回転速度を最小化することによって、平滑化されたカメラ配向データのセットを生成しつつ、平滑化されたカメラ配向データのセットに基づき再配向された結果として得られた平滑化画像フレームのセットにおける空き領域の量を最小化する。【選択図】  図１
2018085775.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実施される方法であって、
コンピュータシステムが、ビデオに関連する入力画像フレームを受信するステップと、
前記コンピュータシステムが、ジャイロスコープからのカメラ配向データを受信するステップと、
前記コンピュータシステムが、少なくとも前記入力画像フレームおよびジャイロスコープからの前記カメラ配向データに基づいて安定化された画像フレームを生成するステップと、
前記カメラ配向データを平滑化して一組の平滑化されたカメラ配向データを生成するステップであって、前記カメラ配向データを平滑化することは、前記一組の平滑化されたカメラ配向データに基づいて再配向された入力画像フレームの空き領域の量を最小化しつつ、連続的な入力画像フレーム間の回転速度を最小化することを含む、前記一組の平滑化されたカメラ配向データを生成するステップと
を含むコンピュータにより実施される方法。
【請求項２】
前記ビデオの画像フレームは、前記入力画像フレームを含む、請求項１に記載の方法。
【請求項３】
前記入力画像フレームの数は、前記ビデオの画像フレームの数に等しい、請求項１に記載の方法。
【請求項４】
前記安定化された画像フレームを生成するステップは、前記一組の平滑化されたカメラ配向データにさらに基づく、請求項１に記載の方法。
【請求項５】
前記空き領域の量は、閾値を満たすように最小化される、請求項１に記載の方法。
【請求項６】
前記カメラ配向データを平滑化することは、カメラモーションと空き領域の制約に基づいてズームを選択することをさらに含む、請求項５に記載の方法。
【請求項７】
前記安定化された画像フレームを生成するステップは、前記一組の平滑化されたカメラ配向データのセットに基づいて前記入力画像フレームをゆがめることをさらに含む、請求項１に記載の方法。
【請求項８】
前記コンピュータシステムは、前記ジャイロスコープを含むモバイルデバイスである、請求項１に記載の方法。
【請求項９】
システムであって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに
ビデオに関連する入力画像フレームを受信すること、
ジャイロスコープからのカメラ配向データを受信すること、
少なくとも前記入力画像フレームおよびジャイロスコープからの前記カメラ配向データに基づいて安定化された画像フレームを生成すること、
前記カメラ配向データを平滑化して一組の平滑化されたカメラ配向データを生成することであって、前記カメラ配向データを平滑化することは、前記一組の平滑化されたカメラ配向データに基づいて再配向された入力画像フレームの空き領域の量を最小化しつつ、連続的な入力画像フレーム間の回転速度を最小化することを含む、前記一組の平滑化されたカメラ配向データを生成すること
を実行するように指示するように構成された命令を記憶するメモリと
を備えるシステム。
【請求項１０】
前記ビデオの画像フレームは、前記入力画像フレームを含む、請求項９に記載のシステム。
【請求項１１】
前記入力画像フレームの数は、前記ビデオの画像フレームの数に等しい、請求項９に記載のシステム。
【請求項１２】
前記安定化された画像フレームを生成することは、前記一組の平滑化されたカメラ配向データにさらに基づく、請求項９に記載のシステム。
【請求項１３】
コンピュータ実行可能な命令を格納する非一時的コンピュータ記憶媒体であって、前記コンピュータ実行可能な命令は、実行時にコンピュータシステムにコンピュータにより実行される方法を実行させ、前記方法は、
ビデオに関連する入力画像フレームを受信するステップと、
前記コンピュータシステムが、ジャイロスコープからのカメラ配向データを受信するステップと、
少なくとも前記入力画像フレームおよびジャイロスコープからの前記カメラ配向データに基づいて安定化された画像フレームを生成するステップと、
前記カメラ配向データを平滑化して一組の平滑化されたカメラ配向データを生成するステップであって、前記カメラ配向データを平滑化することは、前記一組の平滑化されたカメラ配向データに基づいて再配向された入力画像フレームの空き領域の量を最小化しつつ、連続的な入力画像フレーム間の回転速度を最小化することを含む、前記一組の平滑化されたカメラ配向データを生成するステップと
を含む、非一時的コンピュータ記憶媒体。
【請求項１４】
前記ビデオの画像フレームは、前記入力画像フレームを含む、請求項１３に記載の非一時的コンピュータ記憶媒体。
【請求項１５】
前記入力画像フレームの数は、前記ビデオの画像フレームの数に等しい、請求項１３に記載の非一時的コンピュータ記憶媒体。
【請求項１６】
前記安定化された画像フレームを生成するステップは、前記一組の平滑化されたカメラ配向データにさらに基づく、請求項１３に記載の非一時的コンピュータ記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の主題は、信号処理に関する。具体的には、本開示は、画像およびビデオ処理のためのシステムおよび方法に関する。
【背景技術】
【０００２】
近年、ビデオのキャプチャが可能なデジタルスチルカメラが普及している。これらの消費者デバイスの解像度や画像品質がいくつかの設定においてデジタル一眼レフカメラ（ＤＳＬＲ）に匹敵するに至るまで改善される一方で、そのビデオ画質は依然としてフィルムカメラのものよりかなり悪いものであり得る。品質におけるこのギャップの理由は、２つの要因からなり得る。第１に、フィルムカメラと比べて、携帯電話はかなり軽量のものであり得る。その結果、そのようなデバイス上での携帯式のビデオキャプチャは、多量のカメラブレを呈し得る。第２に、携帯電話カメラは、ローリングシャッタ（ＲＳ）を利用するセンサを有し得る。ＲＳカメラでは、各画像の行は、わずかに異なる時間に露光され得、それが不減衰カメラモーションと組み合わされて、出力ビデオにおける「揺れ」をもたらし得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ビデオ安定化は、ビデオのカメラブレによって生成される高周波のフレーム間のジッタの低減に使用される技法のファミリである。専門のカメラでは、機械的な画像安定化（ＭＩＳ）システムが一般に使用される。例えば、ＭＩＳシステムでは、オペレータは、オペレータのボディモーションからカメラモーションを切り離すハーネスを着用し得る。他のＭＩＳシステムは、カメラボディ自体よりむしろ、カメラの光学素子の方を安定させる。これらのシステムは、レンズまたはセンサを移動して、小さなピッチおよびヨーモーションを補償することができる。これらの技法は、リアルタイムで機能し、カメラ上での演算を必要としない。しかし、これらの技法は、その価格やサイズを理由に、モバイルデバイスや安価なカメラには適さない。デジタルビデオ安定化システムは、キャプチャ後のビデオを安定させるために特徴トラッカを使用し得る。しかし、これらのシステムは、雑音に対する感度が高いものであり得るため（例えば、高速移動する前景被写体）、追跡するための独特の機能を必要とし得る。その結果、特徴追跡に基づくデジタル安定化は、特に不利な照明条件や過度の前景モーションでは、損なわれる場合が多い。それに加えて、フレームにわたる視覚的キューの抽出や一致は、演算上高価なものであり得る。その上、ビデオの解像度が高いほど、費用が高くなる。いくつかの例では、これにはコストがかかりすぎてリアルタイムでのビデオ安定化を実行することができない。結果的に、そのような手法は、現在のデジタルカメラではめったに使用されない。代わりに、製造業者は、高性能のＤＳＬＲに対して、よりロバストな（および高価な）機械的な安定化対策の方を選ぶことができる。
【課題を解決するための手段】
【０００４】
本発明による一実施形態は、具体的には、方法、記憶媒体、およびシステムを対象とする添付の特許請求の範囲で開示され、１つのクレームカテゴリで言及される特徴（例えば、方法）は、別のクレームカテゴリ（例えば、システム）でも特許請求することができる。
【０００５】
デジタルビデオを安定させるため、コンピュータ実装方法、システム、およびコンピュータ可読媒体は、一実施形態では、関連付けられたタイムスタンプを有する画像フレームのセットと、関連付けられたタイムスタンプを有する、カメラの向きに関するカメラ配向データのセットとを含むデジタルビデオデータを提供することができる。連続する画像フレーム間の回転速度を最小化することによって、平滑化されたカメラ配向データのセットを生成しつつ、平滑化されたカメラ配向データのセットに基づいて再配向された結果として得られた平滑化画像フレームのセットにおける空き領域の量を最小化する。
【０００６】
一実施形態では、結果として得られた平滑化画像フレームのセットにおける空き領域の量は、ゼロに最小化することができる。
一実施形態では、結果として得られた平滑化画像フレームのセットにおける空き領域の量は、閾値未満に最小化することができる。
【０００７】
一実施形態では、画像フレームのセットおよび平滑化されたカメラ配向データのセットにおける関連付けられたタイムスタンプに基づいて画像フレームのセットをゆがめることにより、補正された画像フレームのセットを形成することができる。
【０００８】
一実施形態では、画像フレームのセットおよび平滑化されたカメラ配向データのセットにおける関連付けられたタイムスタンプに基づいて画像フレームのセットをゆがめることにより、補正された画像フレームのセットを形成することは、個々の画像フレームを複数のサブセクションに分割することを含み得る。各サブセクションは、関連付けられたタイムスタンプおよびカメラ配向を有し得る。画像フレームのセットおよび平滑化されたカメラ配向データのセットにおける関連付けられたタイムスタンプに基づいて画像フレームのセットをゆがめることにより、補正された画像フレームのセットを形成することは、関連付けられたタイムスタンプおよびカメラ配向に基づいて各サブセクションを再編成することにより、補正された個々の画像フレームを形成することを含み得る。
【０００９】
一実施形態では、補正された画像フレームのセットは、ビデオとして表示することができる。
一実施形態では、結果として得られた平滑化画像フレームのセットにおける空き領域の量は、閾値未満に最小化することができる。
【００１０】
一実施形態では、閾値未満の空き領域の量は、修復することができる。
一実施形態では、関連付けられたタイムスタンプを有するカメラ配向データのセットは、ハンドヘルド式デバイスのジャイロスコープから提供することができる。
【００１１】
一実施形態では、画像フレームのセットは、ハンドヘルド式デバイスのカメラから提供することができる。
一実施形態では、関連付けられたタイムスタンプを有するカメラ配向データのセットは、携帯電話およびデジタルカメラを含むハンドヘルド式デバイスのジャイロスコープから提供することができる。画像フレームのセットは、デジタルカメラから提供することができる。
【００１２】
一実施形態では、平滑化されたカメラ配向データのセットを生成することは、勾配降下に基づいて反復最適化することを含む。
一実施形態では、平滑化されたカメラ配向データのセットを生成することは、ガウシアンフィルタに基づいてフィルタリングすることを含み得る。
【００１３】
一実施形態では、平滑化されたカメラ配向データのセットを生成することは、時間導関数に基づいてフィルタリングすることを含み得る。
一実施形態では、カメラ配向データのセットは、無変換の回転を含み得る。
【００１４】
一実施形態では、カメラ配向データのセットは、回転と変換の両方を有するベクトルを含み得る。
一実施形態では、平滑化されたカメラ配向データのセットを生成することは、ソーシャルネットワーキングシステムによって実行される。
【００１５】
一実施形態では、関連付けられたタイムスタンプを有する画像フレームのセットおよび関連付けられたタイムスタンプを有するカメラ配向データのセットは、ソーシャルネットワーキングシステムのユーザによってソーシャルネットワーキングシステムにアップロードすることができる。
【００１６】
本発明のさらなる実施形態では、１つまたは複数の非一時的コンピュータ可読記憶媒体は、実行されると、本発明による方法または上記した実施形態のいずれかを実行するように動作可能なソフトウェアを具現化する。
【００１７】
本発明のさらなる実施形態では、システムは、１つまたは複数のプロセッサと、プロセッサに結合され、プロセッサによって実行可能な命令を含むメモリとを備え、プロセッサは、命令を実行する際、本発明による方法または上記した実施形態のいずれかを実行するように動作可能である。
【００１８】
本発明の他の多くの特徴や実施形態は、添付の図面および以下の詳細な説明から明らかとなる。
【図面の簡単な説明】
【００１９】
【図１】一実施形態による、ピンホールカメラモデルの例を示す。
【図２】一実施形態による、カメラの向きおよびそれに対応する画像平面の２つの例の描写を示す。
【図３】一実施形態による、ＲＳカメラによってキャプチャされたゆがんだ画像および画像を補正するための変換の例の描写を示す。
【図４】一実施形態による、デジタルビデオ安定化モジュールの例を示す。
【図５】一実施形態による、入力データおよび平滑化後に結果として得られたデータの例のグラフを示す。
【図６】一実施形態による、制約ベースの平滑化のための方法の例を示す。
【図７】一実施形態による、ソーシャルネットワーキングシステム内で安定したデジタルビデオを生成するためにデジタルビデオからの画像フレームのセットを修正するためのシステムのネットワーク図の例を示す。
【図８】一実施形態による、本明細書で説明される実施形態のうちの１つまたは複数の実装に使用することができるコンピュータシステムの例を示す。
【発明を実施するための形態】
【００２０】
図は、単なる例示を目的として本発明の様々な実施形態を描写し、図は、同様の参照番号を使用して同様の要素を特定する。当業者であれば、以下の説明から、本明細書で説明される本発明の原理から逸脱することなく、図に示される構造および方法の代替の実施形態を使用できることが容易に理解し得る。
【００２１】
［ジャイロスコープを使用するデジタルビデオ安定化およびローリングシャッタ補正］
ローリングシャッタ補正は、フレーム内のカメラモーションによって生成された画像のゆがみを取り除くための技法である。高性能のカメラは、グローバルシャッタ（ＧＳ）を有する電荷結合素子（ＣＣＤ）センサを使用する。ＧＳカメラでは、多くのＤＳＬＲを含めて、ＣＣＤセンサ上のすべての画素の読み取りおよびリセットが同時に行われる。したがって、すべての画素が同じ時間間隔の間に光を収集する。結果的に、露光の間のカメラモーションは、これらの素子上である程度の画像ブラーをもたらす。対照的に、低性能のカメラは、通常、相補型金属酸化膜半導体（ＣＭＯＳ）センサを利用する。具体的には、これらのセンサは、ローリングシャッタを使用し、画像行の読み取りおよびリセットが連続的に行われる。この手法は、ＣＣＤセンサと比べて、より少ない回路を必要とし得、ＣＭＯＳセンサの製造をより安くすることができる。その理由のため、ＣＭＯＳセンサは、携帯電話、音楽プレーヤおよびいくつかの低性能のカムコーダで頻繁に使用される。しかし、連続的な読み取りは、わずかに異なる時間ウインドウの間に各行が露光されることを意味する。その結果、行の読み取りの間のカメラモーションは、ゆがんだ画像を生成することになる。高速の移動被写体もまたひずんで見える。
【００２２】
ＲＳカメラでの画像読み取りは、通常、ミリ秒範囲である。したがって、ＲＳひずみは、主に、高周波のカメラモーションによって引き起こされる。したがって、カメラを安定させるためにＭＩＳシステムを使用することができる。この手法は、ローリングシャッタによるゆがみを取り除くが、実際には、ＭＩＳシステムの価格帯やサイズにより、ＲＳカメラには適さないものになる。いくつかのデジタルローリングシャッタ調整技法は、単一の画像におけるＲＳアーチファクトを補正することができるが、ユーザ入力を必要とする。対照的に、本開示のいくつかの実施形態は、ユーザ入力を必要とすることなく、単一の画像に対するＲＳアーチファクトを補正することができる。
【００２３】
ビデオの場合、ビデオからのカメラモーションを推定するために特徴追跡を使用する一連のフレームにおけるＲＳの調整は、問題を提示し得る。ＲＳ露光の間のカメラモーションが分かった時点で、カメラモーションを使用してフレームを調整することができる。この手法は特徴トラッカに依存するため、ビデオ安定化の事例で以前に論じられたものと同じ欠点を有する。
【００２４】
デジタルビデオ安定化技法は、入力ビデオフレームのクロッピングまたはズーミングを含み得る。これにより、手ブレによってもたらされる望ましくない変形を妨害するための個々のフレームの変換、回転またはゆがみが可能になり得る。クロッピングの量は、これらの変形を取り除くためにどれほどの余裕（または「余地」）があるかを判断することができる。例えば、フレームを変換し過ぎた場合、空き領域（例えば、画素データを有さない領域）が目に見える可能性がある。本開示のいくつかの実施形態は、手ブレを妨害することによってカメラモーションを平滑にするだけでなく、空き領域が現れないようにしながらカメラモーションを平滑にすることもできる。クロッピングまたはズーミング以外の、安定化に対する余裕を提供するための他の方法も実装できることを理解すべきである。例えば、修復技法は、安定化によってもたらされた空き領域を充填するために実装することができる。修復は、クロッピングまたはズーミングの代わりにまたはそれに加えて使用することができる。例えば、一実施形態では、所定の変形が、すべての画素が満足のいくように設定されたフレームをもたらすか否か（修復、ズーミング、クロッピングなどによってかどうかにかかわらず）を判断するための機能を実装することができる。
【００２５】
空き領域防止制約を満たす平滑なカメラ回転を演算することによって、ビデオをデジタル処理で安定させるためのシステムおよび方法が提供される。これにより、所定のクロップまたはズームファクタに対する平滑なカメラ回転を生み出すことが最大限に可能になり得る。
【００２６】
デジタルビデオ安定化プロセスは、例えば、カメラまたはカメラを含むデバイス（携帯電話、タブレット、腕時計、着用可能な道具など）によってビデオをキャプチャすることから始まり得る。ビデオは、キャプチャされた多くの連続画像フレームを含み得る。ビデオは、デバイスのサイズや重量に起因して、ブレのあるものであり得る。カメラのセンサによって使用されるローリングシャッタは、出力画像フレームにおけるゆがみを生成し得る。ジャイロスコープは、ビデオキャプチャの間のカメラモーション（例えば、回転）を測定するために使用することができる。測定されたカメラモーションは、ビデオを安定させるため、および、ローリングシャッタを調整して、画像が補正された出力フレームを有する安定したビデオをもたらすために使用することができる。
【００２７】
本開示の技法は、ＲＳカメラのビデオ画質を向上することができる。一実施形態では、微小電気機械システム（ＭＥＭＳ）ジャイロスコープは、カメラの回転を測定するために実装される。また、他のジャイロスコープやモーション検知デバイスも実装することができる。ジャイロスコープによる測定は、ビデオ安定化（例えば、フレーム間のモーション補償）やローリングシャッタ補正（例えば、フレーム内のモーション補償）を実行するために使用することができる。この手法は、演算上安価かつロバストであり得、それにより、例えば、モバイルプラットホーム上でのリアルタイムの実装形態に特に適したものになり得る。
【００２８】
回転カメラとローリングシャッタとの統合モデルに基づくシステムおよび方法は、ローリングシャッタ補正とビデオ安定化を同時に実行する、ゆがみを演算するためにモデルを利用することができる。ジャイロスコープおよびカメラを自動的に較正する最適化技法を提供することができる。これにより、単一のビデオおよびジャイロスコープキャプチャからの未知のパラメータ（ジャイロスコープドリフトおよび遅延など）ならびにカメラの焦点距離およびローリングシャッタ速度の回復が許可され得る。その結果、ジャイロスコープとカメラハードウェアのいかなる組合せも、専門的な実験セットアップを必要とすることなく、較正することができる。カメラを含むデバイスは、ジャイロスコープなどのモーション検知デバイスも含み得る。例えば、多くのスマートフォンは、ジャイロスコープや加速度計などのカメラやモーション検知デバイスを有する。このように、リアルタイムビデオ安定化およびローリングシャッタ補正は、特徴トラッカまたはＭＩＳシステムの使用を必要とすることなく、提供することができる。その上、安価なＭＥＭＳジャイロスコープは、カメラモーションを直接測定するために実装することができる。画像のブラーリングを除去するためおよびＫＬＴ特徴トラッカを支援するため、慣性計測装置（ＩＭＵ）を使用することができる。
【００２９】
ジャイロスコープなどのモーション検知デバイスを使用してカメラモーションを測定することにより、高演算効率でのデジタルビデオ安定化およびＲＳ調整の実行が許可される。ビデオのコンテンツはモーションの推定に使用されないため、この手法は、不十分な照明または実質的な前景モーションの下でさえ、ロバストであり得る。その上、上に述べられているように、多くのカメラが使用可能な携帯電話は、既に、ジャイロスコープまたは他のモーション検知デバイスを装備している。ＭＩＳシステムと比べて、ＭＥＭＳジャイロスコープは、かなり安価で、より多目的な、それほどかさばらないものであり得る。
【００３０】
一実施形態では、ビデオ安定化は、３つの段階、すなわち、カメラモーション推定段階、モーション平滑化段階および画像をゆがめる段階で進めることができる。ローリングシャッタ調整は、平滑化モーションよりむしろ、実際のカメラモーションをゆがみ演算に使用できることを除いて、同様に進めることができる。本明細書でさらに詳細に論じられるように、ビデオ安定化とローリングシャッタ補正の両方とも、統合フレームワークの下で１回のゆがみ演算において実行することができる。
【００３１】
一実施形態では、カメラモーションは、回転のみの観点からモデル化することができる。他の実施形態では、変換は、回転に加えてまたはその代わりに測定できることを理解すべきである。いくつかの例では、例えばＩＭＵを使用する変換の正確な測定は難しいものであり得る。その上、加速度計データは、変換を得るために２回積分することを必要とし得る。対照的に、ジャイロスコープは、回転速度を測定する。したがって、ジャイロスコープデータは、カメラの向き（カメラ配向）を得るために１回の積分しか必要とされない。その結果、いくつかの例では、変換測定は、向きの測定よりかなり不正確であり得る。その上、変換測定は、異なる量で移動する異なる深度の被写体によって複雑化され得る。一実施形態では、深度情報を得るため、運動に基づく立体または特徴ベース構造復元（ＳｆＭ：stereo or feature-based structure from motion）アルゴリズムを実装することができる。いくつかの実施形態では、変換を取り除くためにフレームをゆがめるステップを実行することができるが、パララックスおよびオクルージョンによって複雑化され得る。
【００３２】
システムにおけるカメラ変換のモデル化は、問題を提示し得る。例えば、オプティマイザは、特徴トラッカから変換を再構築することを試みる一方で、極小値になり得る。アルゴリズムは、カメラが純粋に平面状の場面（例えば、一定の深度）を画像化していると仮定することができる。したがって、変換再構築は、ビデオにおいてモデル化されないパララックスが原因で複雑化され得る。
【００３３】
回転のみの観点からまたは主に回転の観点からカメラ回転をモデル化する実施形態は、変換で遭遇する問題を最小化することができる。変換は、深度の増加と共に急速に減衰し、被写体は、通常、変換カメラジッタが画像における顕著なモーションを生み出さないほど十分にレンズから遠く離れているため、カメラブレやローリングシャッタのゆがみは主に回転から起こる。
【００３４】
［カメラモデルの例］
一実施形態では、ピンホールカメラモデルに基づく回転ローリングシャッタカメラモデルが提供される。図１は、一実施形態による、ピンホールカメラモデル１０１の例を示す。場面におけるカメラの中心ｃからポイントｘまでの光線は、ポイントｘで画像平面と交差する。したがって、画像平面上への空間の投影は、カメラの中心ｃ、焦点距離ｆおよび画像平面におけるカメラの軸の位置（ｏｘ，ｏｙ）に依存する。ピンホールカメラでは、同次座標における画像ポイントｘと３Ｄ空間座標における対応するポイントＸとの関係は、方程式の例（１）によって指定することができる。
【００３５】
ｘ＝ＫＸ、およびＸ＝λＫ−１ｘ      （１）
ここで、λは、未知のスケーリング係数であり、Ｋは、内部カメラである。Ｋ−１は、方程式の例（２）によって指定することができる。
【００３６】
【数１】
2018085775.tif 000003
（ｏｘ，ｏｙ）は、画像平面におけるカメラ軸の原点であり、ｆは、焦点距離である。カメラの焦点距離は、回復することができる未知数である。カメラは正方画素を有し、上方斜めのエントリは１に設定されると仮定することができる。しかし、他の実施形態は、このモデルを拡張して、非正方画素または他の光学的ひずみを考慮に入れることができる。
【００３７】
ゆがみは、高周波カメラ回転から起こり得る。例えば、上から下にシャッタを切る間の高周波カメラ回転により、出力画像がゆがんでいるように見える場合がある。このゆがんだ画像は、数学的にモデル化することができる。
【００３８】
空間の原点は、カメラの原点に設定することができる。次いで、カメラモーションは、時間ｔにおけるその向きＲ（ｔ）の観点から説明することができる。したがって、いかなる場面ポイントＸに対しても、時間ｔにおける対応する画像ポイントｘは、方程式の例（３）によって得ることができる。
【００３９】
ｘ＝ＫＲ（ｔ）Ｘ      （３）
回転行列Ｒ（ｔ）∈ＳＯ（３）は、カメラ角度Δθ（ｔ）の変化を複合することによって演算することができる。四元数の球面線形補間（ＳＬＥＲＰ：spherical linear interpolation）は、カメラの向き（カメラ配向）を平滑に補間し、ジンバルロックを回避するために使用することができる。ジャイロスコープのサンプル間の角度の変化は、そのオイラー角が回転四元数と同じ働きをするほど十分に小さいものであり得る。Δθ（ｔ）は、以下の方程式の例（４）によって指定されるように、ジャイロスコープが測定した回転速度ω（ｔ）から直接得ることができる。
【００４０】
Δθ（ｔ）＝（ω（ｔ＋ｔｄ）＋ωｄ）＊Δｔ      （４）
ωｄは、ジャイロスコープドリフトであり、ｔｄは、ジャイロスコープとフレームサンプルタイムスタンプとの間の遅延である。これらのパラメータは、これも同様に回復することができるそのモデルにおける追加の未知数である。
【００４１】
また、ローリングシャッタは、カメラモデルに導入することもできる。ＲＳカメラでは、各画像行は、わずかに異なる時間に露光される。したがって、この露光の間のカメラ回転は、画像のゆがみを決定することができる。被写体は、通常、レンズから遠く離れているため、ローリングシャッタ露光の間の変換カメラジッタは、画像のゆがみに大きな影響は及ぼさない。例えば、シャッタを切る間にカメラが左右に揺れると、図３に示されるように、出力画像はゆがむ。フレームｉにおいてポイントｘが画像化された時間は、フレームがどのくらいの深さまであるかに依存する。方程式の例（５）によって指定されるように、ｘは時間ｔ（ｉ，ｙ）に画像化されたと決定することができる。
【００４２】
ｔ（ｉ，ｙ）＝ｔｉ＋ｔｓ＊ｙ／ｈ、式中、ｘ＝（ｘ，ｙ，１）Ｔ      （５）
ｙは、ポイントｘに対応する画像行である。ｈは、フレームにおける行の総数である。ｔｉは、ｉ番目のフレームのタイムスタンプである。ｔｓ項は、フレームの下方に行くほど、ローリングシャッタがその行に到達するのに要する時間が長くなることを示す。したがって、ｔｓは、行ごとに上から下まで全フレームを読み取るのに要する時間である。負のｔｓ値は、下から上に向かうローリングシャッタを示すことになる。符号やｔｓ値の自動回復については、本明細書でさらに詳細に説明する。
【００４３】
２つの異なるカメラの向きに対する１対のフレームにおける画像ポイント間の関係を導出することができる。図２は、実施形態による、２つのカメラの向きおよびそれらの対応する画像平面のグラフ表現を示す。グラフ表現２０１は、２つのカメラの向き２０２および２０３を含む。カメラの向き２０２は、画像平面ｉを含む。カメラの向き２０３は、画像平面ｊを含む。場面ポイントＸの画像は、２つのフレームに現れ、光線２１１は、画像平面ｉおよびｊと交差する。場面ポイントＸに対して、２つのフレームｉおよびｊの画像平面における投影ポイントｘｉおよびｘｊはそれぞれ、以下の方程式の例（６）によって指定することができる。
【００４４】
ｘｉ＝ＫＲ（ｔ（ｉ，ｙｉ））Ｘ、およびｘｊ＝ＫＲ（ｔ（ｊ，ｙｊ））Ｘ      （６）
これらの方程式が再構成され、Ｘが代入された場合、方程式の例（７）によって指定されるように、フレームｊにおけるすべてのポイントへのフレームｉにおけるすべてのポイントの写像が得られる。
【００４５】
ｘｊ＝ＫＲ（ｔ（ｊ，ｙｊ））ＲＴ（ｔ（ｉ，ｙｉ））Ｋ−１ｘｉ      （７）
２つのフレーム間の関係について同じビデオと関連して説明してきたが、他の実施形態では、フレームは、Ｒ（ｔ）に応じて回転するあるカメラからＲ’（ｔ）に応じて回転する別のカメラに写像することができる。一実施形態では、両方のカメラの中心は、原点にあると仮定することができる。あるカメラから別のカメラにポイントを写像するゆがみ行列Ｗは、以下の方程式の例（８）に従って指定することができる。
【００４６】
Ｗ（ｔ１，ｔ２）＝ＫＲ’（ｔ１）ＲＴ（ｔ２）Ｋ−１      （８）
ここで、以下の方程式の例（９）に従って、方程式７をよりコンパクトに指定することができる。
【００４７】
ｘｊ＝Ｗ（ｔ（ｊ，ｙｊ），ｔ（ｉ，ｙｉ））ｘｉ、式中、Ｒ’＝Ｒ      （９）
Ｗは、画像ポイントｘｉおよびｘｊのそれぞれの画像行ｙｉおよびｙｊの両方に依存する。このゆがみ行列は、両方のフレームにおいてローリングシャッタの効果を考慮に入れながら、フレームｉのポイントとフレームｊの対応するポイントとを一致させるために使用することができる。
【００４８】
ゆがみ行列のこの公式化は、ローリングシャッタ補正およびビデオ安定化を実現する。平滑なモーションおよびグローバルシャッタを有する合成カメラを製作することができる。このカメラモーションは、例えば、入力カメラモーションにガウシアンローパスフィルタを適用することによって演算することができ、これは、新しい回転セットＲ’をもたらす。合成カメラのローリングシャッタ持続時間ｔｓは、グローバルシャッタのように０に設定することができる。次いで、現在のフレームｉの各画像行ｙｉでＷ（ｔｉ，ｔ（ｉ，ｙｉ））を演算することができ、その行にゆがみを適用することができる。Ｗの第１の項は、ここでは、フレーム時間ｔｉのみに依存し得る。この演算は、すべての入力フレームを合成カメラに写像し、その結果、ローリングシャッタのゆがみとビデオブレを同時に取り除くことができる。
【００４９】
ある実施形態では、Ｗ（ｔｉ，ｔ（ｉ，ｙｉ））は、各画像行ｙｉに対しては演算されない。代わりに、入力画像を細分割し、各垂直細分割部でゆがみを演算することができる。図３は、実施形態による、ゆがみを補正するための変換の例を示す。ゆがんだ入力画像フレーム３０１は、ＲＳカメラによってキャプチャされた再分割されたゆがんだ画像を示す。ゆがみは、画像フレーム３１１に示されるように、各垂直細分割部で演算される。画像フレーム３１１は、非線形ゆがみの区分的線形近似を示す。結果として得られた画像フレーム３１６によって示されるように、様々な数の細分割部が、アーチファクトを排除するには十分であり得る。例えば、一実施形態では、１０の細分割部が、視覚的アーチファクトを排除するには十分であり得る。非線形ゆがみの区分的線形近似である、入力画像からのゆがんだメッシュが作成された。１０の細分割部が、目に見えるいかなるＲＳアーチファクトも取り除くには十分であるが、他の実施形態は、異なる数の細分割部を含み得る。サンプリング手法は、逆補間とも呼ぶことができる。逆補間は、バーテックスシェーダを使用するグラフィックス描画処理装置（ＧＰＵ）上での実装が容易であり得る。ＧＰＵのフラグメントシェーダは、双線形補間を使用して、メッシュがゆがんだ画像のリサンプリングを処理することができる。実際のビデオのＲＳゆがみは、双線形逆補間により、エイリアシングアーチファクトを生成するほど強くはない場合がある。その結果、実際には、逆補間がうまく機能する。グローバルな画像ゆがみを使用するローリングシャッタ補正は、ローリングシャッタ露光の間、カメラ回転がおおむね一定であると仮定することができる。線形近似は、図３の画像フレーム３０６によって示されるように、ローリングシャッタを調整できない場合がある。
【００５０】
［カメラおよびジャイロスコープの較正］
本明細書で説明される未知のカメラおよびジャイロスコープパラメータを回復するための較正技法が提供される。較正により、ジャイロスコープデータからのＷの直接演算が可能になり得る。本明細書で説明されるモデルにおける未知のパラメータは、カメラの焦点距離ｆ、ローリングシャッタの持続時間ｔｓ、ジャイロスコープとフレームサンプルタイムスタンプとの間の遅延ｔｄおよびジャイロスコープドリフトｗｄを含み得る。
【００５１】
いくつかの例では、カメラの焦点距離ｆなどのこれらのパラメータのうちの１つまたは複数は、製造業者が指定することができる。いくつかの例では、これらのパラメータは、実験的に測定することができる。例えば、素早く点滅するディスプレイを使用して、ローリングシャッタの持続時間ｔｓを測定することができる。しかし、これらの技法は、不正確でエラーを起こしやすい傾向があり得る。また、これらの技法は、退屈であり得る。ローリングシャッタの持続時間ｔは、通常、ミリ秒範囲であり得る。その結果、ｔｄまたはｔｓにおける小さな不整合が、ローリングシャッタ調整の失敗をもたらす場合がある。
【００５２】
一実施形態では、これらのパラメータは、単一のビデオおよびジャイロスコープキャプチャから推定することができる。例えば、ユーザは、建物などの静止被写体の方向に向けたまま、静止したまま立っている状態で、カメラを揺すりながら、ビデオやジャイロスコープトレースを記録することができる。クリップの持続時間は、異なる実施形態で異なり得る。一実施形態では、短いクリップ（例えば、１０秒以下の持続時間）が、すべての未知のパラメータを推定するには十分であり得る。この較正ステップは、各カメラおよびジャイロスコープ構成に対して１回だけ行う必要があり得る。
【００５３】
一実施形態では、一致ポイントは、連続ビデオフレームで特定される。一致ポイントは、例えば、スケール不変特徴量変換（ＳＩＦＴ：scale invariant feature transform）
を使用して特定され得る。外れ値は、例えば、ランダムサンプルコンセンサス（ＲＡＮＳＡＣ：random sample consensus）を使用して破棄することができる。その結果は、キャプチャされたビデオのすべての近隣のフレームに対するポイント対応ｘｉおよびｘｊのセットであり得る。このグランドトゥルース（ground truth）を前提として、較正は、すべてのポイント対応の平均二乗再投影誤差を最小化することができる最適化問題として公式化することができる。これは、以下の方程式の例（１０）で指定される。
【００５４】
【数２】
2018085775.tif 000004
目的関数を最小化するため、多くの非線形オプティマイザを使用することができる。直接目的関数評価による座標降下法は、急速に収束し得、一実施形態で実装される。毎回、目的関数Ｊが減少しないところでステップを取る。ステップ方向を逆にし、対応するパラメータのステップサイズを減少する。アルゴリズムは、すべてのパラメータのステップサイズが所望の閾値未満に降下する（目標精度が達成されるなど）と終了する。収束は、いくつかの例では、急速に起こり得る。例えば、一実施形態では、収束は、約１０秒の持続時間の較正ビデオに対して、２秒以内に起こり得る。
【００５５】
一実施形態では、最適化は、カメラが４５°の視野を有するように焦点距離を設定することによって初期化することができる。他のすべてのパラメータは、０に設定することができる。これらの初期条件を用いることで、オプティマイザは、データセットに対する正しい解に収束することができる。より一般に、極小値になることは（例えば、ジャイロスコープとフレームタイムスタンプとの間の遅延が大きい際）、様々な妥当なパラメータに対して座標降下アルゴリズムを再開して、最適な解を選択することによって、回避することができる。正しく回復されたパラメータに対する平均再投影誤差は、例えば、１画素ほどであり得る。
【００５６】
モデルにおける追加の未知数は、カメラに対するジャイロスコープの相対的な向きであり得る。例えば、ジャイロのｙ軸周りの回転は、カメラのｘ軸周りの回転に相当し得る。
ジャイロスコープの向きを発見するため、３本の回転軸を置換することができ、各置換に対してオプティマイザを実行することができる。目的を最適に最小化する置換は、カメラの軸の順序付けに相当し得る。再投影誤差は、誤った置換に対してはかなり大きいものであり得る。したがって、実際には、この方法がうまく機能する。
【００５７】
カメラは垂直ローリングシャッタを有すると仮定してきたが、ＲＳモデルは、画像行の代わりに画像列に対して機能するように容易に変更することができる。両方の事例に対する最小再投影誤差を見出すことは、カメラが水平ローリングシャッタを有するかまたは垂直ローリングシャッタを有するかを示し得る。
【００５８】
最終的に、較正によって達成された結果は、較正の前後にビデオおよびジャイロスコープ信号を分析することによって実証することができる。連続フレーム間の回転が小さいと仮定すると、画像における変換は、以下の方程式の例（１１）で指定されるように、回転からほぼ演算することができる。
【００５９】
【数３】
2018085775.tif 000005
方程式（１１）は、ローリングシャッタによる効果がなく（例えば、ｔｓ＝０）、ｚ軸周りの回転（例えば、ωｚ）を無視することができると仮定する。
【００６０】
【数４】
2018085775.tif 000006
は、連続フレームにおけるすべてのポイント対応に対するｘおよびｙに沿った平均変換率である。オプティマイザが正しい焦点距離ｆおよびジャイロスコープ遅延ｔｄに収束した場合、２つの信号は整合するはずである。較正前は、ｆの初期の推定が低過ぎるため、信号ｘおよびｆ＊ωｙ（ｔ＋ｔｄ）の振幅は一致しない。信号は、ｔｄが０に初期化される際、シフトすることができる。較正後は、正確な焦点距離およびジャイロスコープ遅延が回復されているため、信号はうまく整合し得る。ＭＥＭＳジャイロスコープなどの精密なジャイロスコープは、ジャイロスコープデータが画像モーションと一致するようにすることができ、ビデオ安定化およびローリングシャッタ補正を改善する。
【００６１】
［制約ベースの回転平滑化］
本開示のいくつかの態様では、空き領域が目に見えないかまたは最小閾値未満であるという制約の下、最適に平滑化されたカメラモーションを演算するためのシステムおよび方法を提供することができる。図４は、実施形態による、デジタルビデオ安定化モジュールの例を示す。デジタルビデオ安定化モジュール４００は、入力モジュール４０１、平滑化モジュール４０２およびゆがみモジュール４０３を含めて示される。
【００６２】
入力モジュール４０１は、平滑化モジュール４０２およびゆがみモジュール４０５への安定させるべき入力を提供することができる。入力モジュール４０１は、安定させるべきビデオと関連付けられた入力を受信することができる。例えば、入力は、ＮのフレームＦｉのセット、ＮのフレームＦｉに対応する時間ｔｉおよびカメラの向き（カメラ配向）θｉ（ｉ＝｛１…Ｎ｝）を含み得る。
【００６３】
平滑化モジュール４０２は、制約関数ｆ（φ，ｔ）が満たされるように、新しい平滑化されたカメラの向き（カメラ配向）のセットφｉを演算する。平滑化モジュール４０２は、回転速度モジュール４０３および制約決定モジュール４０４を含み得る。
【００６４】
回転速度モジュール４０３は、平滑なカメラ配向の生成に対して十分小さな回転速度が維持されることを保証するため、回転速度を演算する。制約決定モジュール４０４は、時間ｔｉにおける目標の向きφｉに対して制約が満たされているかどうかを決定する。例えば、一実施形態では、制約関数ｆ（φ，ｔ）は、時間ｔｉにおける目標の向きφｉを前提として、空き領域が目に見えるか否かのそれぞれに応じて１または０を返すことができる。
【００６５】
例えば、制約決定モジュール４０４は、空き領域の最小量（例えば、閾値量未満）が連続画像フレームで生成されているかどうかを決定することができる。空き領域の量が閾値量未満に降下すれば、制約が満たされ（例えば、空き領域の量が閾値量を超えない）、目標の向きφおよびその対応する時間ｔを使用して、閾値を上回る量の空き領域を生成しない十分小さな回転速度を有する平滑な向きを生み出すことができる。制約が満たされなければ（例えば、空き領域の量が閾値量を超える）、制約を満たしながら十分小さな回転速度を維持するため、対応する目標の向きφを調整することができる。一実施形態では、空き領域の閾値量は、ゼロである。他の実施形態では、空き領域の閾値量は、ほぼゼロであるか、または、人間の目では検出不可能と判断される無視できる値である。さらに別の実施形態では、空き領域の閾値量は、すべての空き領域またはほぼすべての空き領域を排除するなど、効果的に使用するためにクロッピング、ズーミングまたは修復を防ぐ値である。他の実施形態では、空き領域の閾値量は、アプリケーションおよび許容レベルに基づいて要望通り設定することができる。
【００６６】
ゆがみモジュール４０５は、平滑化モジュール４０２によって演算された新しい平滑化されたカメラ配向のセットφｉに基づいてゆがんだフレームを生成する。例えば、ゆがみモジュール４０５は、フレームＦ、平滑化された向きφおよびその対応する時間ｔを入力として取り入れて、ゆがんだフレームＦ’を生成する、ゆがみ関数ｇ（Ｆ，φ，ｔ）を実装することができる。平滑化モジュール４０２によって出力されるような、ｔｉの経過に伴って平滑に変化するφｉや、適切な関数ｆおよびｇの選択を前提として、結果として得られたゆがんだフレームＦ’ｉは、安定した出力ビデオを作成する。関数ｆは、ゆがみ関数ｇの選択に依存し得、単に、ゆがみ関数ｇを適用した後、フレームにおいて空き領域が目に見えるか否かを示し得る。
【００６７】
実装される特定のゆがみ関数は、異なる実施形態で異なり得る。様々なカメラまたは所望の近似に対して、異なるゆがみ関数が適切であり得る。例えば、実装されるゆがみ関数は、カメラがローリングシャッタおよび小さなレンズ収差を有するかどうか、または、グローバルシャッタを有するかどうかに基づき得る。例えば、一実施形態では、グローバルシャッタを有するカメラに対して、ホモグラフィゆがみ関数を実装することができる。アフィン変換またはフレームの画像空間における回転に変換を加えたものなどの他の近似を実装することもできる。
【００６８】
一実施形態では、θｉ入力は、ＳＯ（３）グループにおける回転である。回転行列および四元数によってなど、回転を表す様々な方法がある。ＳＯ（３）にある表現は、オイラー角よりむしろ四元数など、平滑な補間を促進する表現に変換することができる。θｉ回転は、例えば、画像ベースの特徴トラッカから、または、ジャイロスコープの読取値を直接測定して積分することによって、演算することができる。他の実施形態では、カメラの向きの正確な推定を生み出す他のいかなる方法も実装することができる。
【００６９】
カメラ回転の観点からθについて説明してきたが、他の実施形態では、θは、３Ｄ空間におけるカメラの回転と変換の両方を保持するベクトルを含み得る。例えば、回転と変換の両方を含むベクトルは、モーションアルゴリズムからの構造によって生成することができる。一実施形態では、θは、フレームの画像空間における変換もしくは回転、または、他のあまり正確ではないが潜在的に演算上安価な近似を含み得る。θを平滑に補間でき、結果として得られたφを対応するｆおよびｇ関数に入力できる限り、デジタルビデオ安定化を実現することができる。
【００７０】
本明細書では、「平滑なカメラモーション」との記載は、回転速度における小さな変化を指すために使用することができる。これは、近隣のフレームの回転における小さな変化とは区別される。回転速度における小さな変化は、時間の経過に伴って課された制約をイーズインおよびイーズアウトする向きを生み出し得る。近隣のフレームの回転における小さな変化は、制約が実施される時間における向きに関する導関数の不連続性を生み出す一方で、制約におよび制約から補間する。
【００７１】
制約ベースの回転平滑化は、回転速度および制約に基づいてエネルギー関数を最小化することを含む最適化を含み得る。
一実施形態では、最小化するエネルギー関数Ｊは、以下の方程式の例（１２）によって指定することができる。
【００７２】
【数５】
2018085775.tif 000007
回転φは、単位四元数（ベクトルとしても知られている）として表現することができる。その上、以下の方程式の例（１３）で指定されるように、ハード制約をソフト制約と置き換えることができる。
【００７３】
【数６】
2018085775.tif 000008
λは、ｆ制約がどれほど強く実施されるかを決定することができる。例えば、λを無限に設定することは、空き領域が目に見えないことを保証することができ、制約を満たすことができると仮定することができる。
【００７４】
方程式の例（１２）または（１３）に示される形式でエネルギー関数Ｊを最小化するため、様々な最適化アルゴリズムを使用することができる。一実施形態では、方程式の例（１２）の勾配降下に基づく反復アルゴリズムが実装され、制約は、各反復で実施される。一実施形態では、１秒あたり特定の数のフレームを記録するカメラなど、フレームは、時間的に等間隔であり得る。等間隔のフレームを用いることで、分母は一定であると仮定することができ、次いで、和から取り出すことができる。次いで、以下の方程式の例（１４）によって導関数を指定することができる。
【００７５】
【数７】
2018085775.tif 000009
Ｃは、勾配の大きさを制御する定数であり得る。いくつかの実施形態では、Ｃは、モーメンタムベースの方法などの勾配降下の何らかの形式によって自動的に選ばれる場合がある。他の実施形態では、Ｃは、簡素な勾配降下における降下率を制御するため、要望通り設定することができる。値の例は、例えば、Ｃ＝２／（Δｔ）２であり得る。方程式（１４）は、以下の例の方程式（１５）によってよりコンパクトに指定することができる。
【００７６】
【数８】
2018085775.tif 000010
カーネルＫは、ラプラシアン・ガウシアン（ＬｏＧ：Laplacian of Gaussian）フィルタであり得る。ＬｏＧフィルタは、ガウシアン差分（ＤｏＧ：Difference of Gaussian）またはボックス差分（ＤｏＢ：Difference of Box）フィルタで近似することができる。また、カーネルＫは、ＬｏＧフィルタをガウシアンフィルタで畳み込むことによって調整することもできる。これは、どれほど徐々に回転速度が変化すべきか（または制約をイーズインおよびイーズアウトする量）を制御することができる。ＬｏＧ／ＤｏＧ／ＤｏＢおよび／またはガウシアンフィルタの選択は、カーネルＫの係数およびサイズに影響を及ぼし得るが、カーネルが時間導関数の形式を演算する限り、最適化された向きは、制約をイーズインおよびイーズアウトする何らかの形式を呈し得る。
【００７７】
一実施形態では、四元数へのカーネルの適用は、４Ｄベクトルの線形重み付けをすることである。理論上、球面線形補間（ｓｌｅｒｐ）を使用して四元数を補間することは、正確な方法であり得る。角度の小さな変化に対して、線形補間に各反復で結果として得られた四元数（ｌｅｒｐ）の正規化を加えたものが、かなり正確な結果を生み出すには十分である。そのような結果は、θが小さいとｓｉｎ（θ）≒θであるため、達成することができる。手ブレによって生じた角度の変化（例えば、調整すべき変化）は、通常、大きいものではない。その上、合理的なレベルのクロッピング、ズーミングまたは修復ファクタは、大した余裕を残さない可能性がある。小さな角度のみが空き領域を生成しない。したがって、連続した向きの四元数間における手ブレによって生じた角度は、実際には、大きくない可能性があり、近似は、正確かつ演算上効率的なものであり得る。その上、急速なカメラの回転の場合（例えば、ユーザが素早く左にパンする）、制約関数ｆは、結果として得られた向きを支配し得る。したがって、ｌｅｒｐからのいかなる不正確性も目立たない可能性がある。
【００７８】
一実施形態では、制約ベースの回転平滑化は、以下のアルゴリズムの例（１）の観点から指定することができる。
【００７９】
【数９】
2018085775.tif 000011
Φｉは、内側のループで変化しないように、外側のループで事前に演算することができる。反復数「numiter」は、平滑な回転をもたらすようほど十分高く設定することができる。次いで、結果として得られたφｉは、ｇに代入して、安定した出力ビデオを生成することができる。
【００８０】
ｎ（φ）は、ｌｅｒｐにおける正規化ステップであり、ｎ（φ）＝φ／｜｜φ｜｜と定義することができる。アルゴリズム１における添え字ｉは、Φｉが有効であるように選択され、したがって、カーネルＫのサイズに依存し得る。この例では、境界での回転は、固定して保持することができる。他の実施形態では、補外を介して境界を拡大し、最適化の間に向きの全セットを反復できるようにすることができる。向きの全セットは、以下のセットとして指定することができる。
【００８１】
【数１０】
2018085775.tif 000012
図５は、実施形態による、入力データおよび平滑化後に結果として得られたデータの例のグラフを示す。上のグラフは、時間の経過に伴って描かれた入力データ５０２を含み、制約５０３は円で示される。下のグラフは、制約５０３を含む、本明細書で説明される制約ベースの回転平滑化技法に従って平滑化された入力データ５０２の結果として得られたデータ５０４を含む。例えば、結果として得られたデータ５０４は、制約（例えば、連続画像フレームにおいて空き領域の閾値量が生成されない）が満たされることを保証する一方で、回転速度（または微分係数）が小さく（または閾値未満に）なるように実施することによって、平滑化することができる。回転速度における小さな変化は、時間の経過に伴って課された制約をイーズインおよびイーズアウトする向きを生み出し得る。結果として得られたデータ５０４は、制約５０３をイーズインおよびイーズアウトする。他方では、中間のグラフは、制約５０３を含む、近隣のフレームの向きの変化が小さくなるように実施することによって入力データ５０２の平滑化を試みた結果として得られたデータ５０６を含む。近隣のフレームの回転における小さな変化は、制約が実施される時間における向きに関する導関数の不連続性を生み出す一方で、制約におよび制約から補間する。示されるように、結果として得られたデータ５０６は、制約５０３における導関数の不連続性を含む。
【００８２】
図６は、実施形態による、制約ベースの平滑化のための方法の例を示す。方法６００のブロック６０１では、ビデオデータが受信される。ビデオデータは、関連付けられたタイムスタンプを有する画像フレームのセットを含み得る。一実施形態では、ブロック６０１は、図４の入力モジュール７０１によって実行することができる。
【００８３】
ブロック６０３では、関連付けられたタイムスタンプを有する、カメラの向きに関するカメラ配向データが受信される。例えば、カメラを含むデバイスは、ビデオのキャプチャの間にカメラの向きを追跡するカメラ配向データを生成する、ジャイロスコープ、加速度計などの向きセンサも含み得る。カメラ配向データは、カメラ配向データをビデオデータの画像セットにリンクするかまたはそうでなければ関連付けるため、関連付けられたタイムスタンプを含み得る。いくつかの例では、カメラ配向データは、ビデオデータと同時に（ビデオデータと一緒になど）受信することができる。一実施形態では、ブロック６０２は、図４の入力モジュール７０１によって実行することができる。
【００８４】
一実施形態では、ブロック６０１および６０３は、ビデオのキャプチャに使用されるカメラを有するデバイス（例えば、スマートフォンまたは他のハンドヘルド式のデバイス）によって実行することができる。例えば、ビデオデータおよびカメラ配向データは、ビデオのキャプチャと同時に受信することができる。別の実施形態では、ブロック６０１および６０３は、カメラを含むデバイス（例えば、スマートフォン）によってキャプチャされたビデオデータを後に受信する別々のデバイス（例えば、コンピュータ）によって実行することができる。例えば、ビデオデータおよびカメラ配向データは、カメラおよび向きセンサを含むデバイス（カメラを備えるスマートフォンなど）から別々のデバイスに伝送またはアップロードすることができる。
【００８５】
ブロック６０５では、連続する画像フレーム間の回転速度を最小化することによって、平滑化されたカメラ配向データのセットを生成しつつ、結果として得られる平滑化画像フレームのセットにおける空き領域の量を最小化する（または制限する）。結果として得られる平滑化画像フレームのセットは、平滑化されたカメラ配向データのセットに基づいて再配向されたものである。
【００８６】
一実施形態では、平滑化されたカメラ配向データのセットは、本明細書で説明される方程式（１２）または（１３）を最小化することによって生成される。一実施形態では、方程式の例（１２）の勾配降下に基づく反復アルゴリズムが実装され、制約は、各反復で実施することができる。
【００８７】
ブロック６０７では、補正された画像フレームのセットを形成するため、画像フレームのセットがゆがめられる。画像フレームのセットは、画像フレームのセットおよび平滑化されたカメラ配向データのセットに対する関連付けられたタイムスタンプに基づいてゆがめることができる。一実施形態では、個々の画像フレームは、複数のサブセクションに分割することができ、各サブセクションは、関連付けられたタイムスタンプおよびカメラの向き（カメラ配向）を有し得る。各サブセクションは、補正された個々の画像フレームを形成するため、関連付けられたタイムスタンプおよびカメラの向きに基づいて再編成することができる。
【００８８】
［モーションブラー・アーチファクトの可視性の低減］
低光量で撮られたビデオのデジタルビデオ安定化は、奇妙なモーションブラー・アーチファクトを生成する場合が多い。このモーションブラー・アーチファクトは、モーションブラーを引き起こしたモーション（例えば、手ブレ）が取り除かれた際にモーションブラーが奇妙に見えるため発生し得る。いくつかの例では、モーション跡について説明するために必要な手ブレだけ、安定させたビデオに残すことが必要であり得る。明確な水平モーション跡がフレームにある場合は、跡が意味をなすようにするため、その跡に従って向きを水平に変化させる必要があり得る。水平モーションがない場合は、その跡は、安定させたビデオに理由もなく収まったり飛び出たりするように見え、それにより、目に見えるモーションブラー・アーチファクトを生じ得る。
【００８９】
一実施形態では、カメラのシャッタが開いている間に起こった向きの変化Δθｉは、以下の例の方程式（１６）に従って演算される。
【００９０】
【数１１】
2018085775.tif 000013
ｔｉｓは、フレームＦｉに対してシャッタが開かれている時間を表すことができる。ｅｉは、フレームの露光持続時間である。θ（ｔ）は、時間ｔにおけるカメラの向きであり、以下の表現上で補間することによって演算することができる。
【００９１】
【数１２】
2018085775.tif 000014
ジャイロスコープを使用するデジタルビデオの安定化およびローリングシャッタ補正のための上記で説明される例では、Δθｉは、シャッタが開かれている時間のみにわたって積分することによって、ジャイロスコープの読取値から直接演算することもできる。方程式（１）または方程式（２）内の和は、以下の方程式の例（１７）で指定されるように修正することができる。
【００９２】
【数１３】
2018085775.tif 000015
方程式（１７）は、
【００９３】
【数１４】
2018085775.tif 000016
および
【００９４】
【数１５】
2018085775.tif 000017
であると仮定する。シャッタは、フレームのタイムスタンプの前には開かず、次のフレームの開始前に閉じる。別の実施形態では、入力タイムスタンプは、異なる形で計算することができ（例えば、ｔｉは、シャッタを閉じた時間である）、要件を満たすようにタイムスタンプを調整するため、前処理ステップを追加することができる。
【００９５】
上記で説明される実施形態では、フレームにモーション跡を残した向きの変化が保存される。別の実施形態では、近似は、以下の方程式の例（１８）で指定されるように実装することができる。
【００９６】
【数１６】
2018085775.tif 000018
方程式（１８）における近似は、向きの変化Δθｉがモーション跡に沿って収まるように、φｉの最適化を試みることができる。γスケーリング係数は、平滑性とどれほど近くモーション跡をたどるべきかとの間のトレードオフを制御することができる。
【００９７】
［適切なズームファクタの選択］
例えば、許容できるズームファクタ（またはクロップファクタ、修復ファクタ、もしくはデジタルビデオ安定化に余裕を提供するために使用されるアルゴリズムに適用可能な他の任意の対策）は１〜１．２５である。所定のビデオに対して、平滑なカメラモーションを生み出せるほど十分な余裕を提供する最も小さなズームファクタを決定することが望ましい場合がある。一実施形態では、結果として得られたカメラモーションの平滑性は、以下の方程式の例（１９）によって測定することができる。
【００９８】
【数１７】
2018085775.tif 000019
方程式（１９）では、ｑは、どれほど頻繁に空き領域制約が実施されるかを測定する。例えば、ｑ＝０．１の値は、空き領域が外面に現れないようにするため、平均して、１０フレームごとにｆが実施されることを意味し得る。例えば、制約をイーズインおよびイーズアウトするために２０フレームの間隔が望ましい場合は、適切な値はｑ＝０．０５であり得る。
【００９９】
所望のｑ’値を提供するズームファクタｚ’を見出すため、アルゴリズム１は、様々なズームファクタ（例えば、ｚ∈［１，１．０５，１．１，１．１５，１．２，１．２５］）に対する解を求めることができる。ズームファクタｚおよびアルゴリズム１を実行することによって結果として得られたφｉを前提として、方程式（１９）から結果として得られたｑを演算することができる。次いで、ｑ’に最も近いｑを提供したズームファクタを選択することができる。別の実施形態では、ｑ’において結果として得られたデータセット（ｑ，ｚ）を線形補間することによって、ズームファクタｚ’を見出すことができる。また、典型的なハンドヘルド式での記録に対する（ｑ，ｚ）ルックアップテーブルを事前に演算することもでき、ｑ’は、中央または平均回転速度から推定される。この手法は、特定のビデオに対してはあまり正確ではないものであり得るが、最適化アルゴリズムを複数回実行する必要がないため、高速であり得る。
【０１００】
［演算効率の向上］
勾配降下以外のオプティマイザなどを使用する、近似の導入など、アルゴリズム（１）の効率を向上するための多くの方法がある。一実施形態では、方程式（１５）におけるＫのカーネルのサイズを低減することができ、以下の方程式の例（２０）で指定されるように、勾配を更新することができる。
【０１０１】
【数１８】
2018085775.tif 000020
カーネルのサイズを低減する（およびそれを再利用する）ことにより、勾配の演算を効果的に加速させることができる。方程式（２０）におけるカーネルの別の特性は、ｓｌｅｒｐを使用してより正確にＫΦｉの値を演算できることである。このことは、以下の方程式の例（２１）で指定されるように、不均一な間隔のフレーム上で行うことができる。
【０１０２】
【数１９】
2018085775.tif 000021
さらにいっそう正確には、φｉおよびｓｌｅｒｐによって形成される球面に対する接線を決定して、方程式（２０）で使用することができる。φｉおよびｓｌｅｒｐによって形成される球面に対する接線は、以下の表現の例で指定することができる。
【０１０３】
【数２０】
2018085775.tif 000022
別の実施形態では、本明細書で説明されるアルゴリズム１の収束率を向上することによって、効率を向上することができる。このことは、粗から密までのモードでそれを実行することによって実現することができる。例えば、アルゴリズム１は、１６の向きφｉごとに供給して解を求めることによって初期化することができる。次いで、線形または三次補間（例えば、ｓｌｅｒｐまたはｓｑｕａｄ）を使用して、その中間のφｉを演算することができる。つまり、８の向きごとの値が得られる。アルゴリズム１は再度実行することができるが、ここでは、平滑性および制約のために８の向きごとに最適化する。このことは、アルゴリズム１があらゆる向きにわたって実行されるまで繰り返すことができる。
【０１０４】
粗から密まで実行することにより、各ステップにおけるかなり少ない反復に対してアルゴリズム１を実行することが許可され得る。全体的なカメラモーションを平滑にすることができ、次いで、依然として平滑な状態を維持したまま、ますます小さくなるフレーム間隔で制約を満たすため、向きを改良することができる。別の実施形態では、不均一なサンプリングを使用することができる。例えば、１６のフレームごとに選ぶ代わりに、以前に選ばれたフレームから向きがどれほど遠く外れているかに基づいてフレームを選ぶことができる。次いで、平滑化された向きがすべてのフレームに対して演算されるまで、セグメントを細分割することができる。
【０１０５】
より粗いまたは不均一なサンプリングは、向きにおけるより大きな連続的な変化をもたらし得るため、方程式（２１）で提示されるｓｌｅｒｐ修正を使用することで、より正確な結果を生み出すことができる。
【０１０６】
［リアルタイムの安定化への応用例］
以下は、リアルタイムの設定にアルゴリズムを採用する実施形態の例として提供される。Ｎのフレームをメモリに保存して、スライドウィンドウ形式でアルゴリズムが実行される。添え字ｉは、スライドウィンドウの開始を示し得、ｉ＋Ｎは、スライドウィンドウの終了を示し得る。スライドウィンドウ内部の向きは、アルゴリズムを実行することによって更新することができるという点で、適応性があるものであり得る。これらの向きは、以下のセット（２）によって指定することができる。
【０１０７】
【数２１】
2018085775.tif 000023
スライドウィンドウに先行する向き（例えば、φｉ−１）は、固定することができる。開始向きはφｉ−１であり得、回転速度（例えば、ジャイロスコープによって測定されるかまたは特徴トラッカから演算されるような）を積分して、向き｛θｉ，θｉ＋１，…，θｉ＋Ｎ｝を得ることができる。これは、最適化アルゴリズムに対する入力として使用して、｛φｉ，φｉ＋１，…，φｉ＋Ｎ−２｝を演算することができる。向き｛φｉ−２，φｉ−１｝および｛φｉ＋Ｎ−１＝θｉ＋Ｎ−１，θｉ＋Ｎ＝θｉ＋Ｎ｝は、固定して保持することができ、モーションがスライドウィンドウへの出入りで平滑であることを保証する境界条件として機能し得る。
【０１０８】
アルゴリズムが実行された時点で、向きφｉを得ることができ、その向きφｉは、フレームＦｉをゆがめるのに使用することができる。フレームをゆがめた時点で、ゆがんだフレームは、エンコーダに渡し、Ｎのフレームのバッファから取り除くことができる。次いで、カメラから新しいフレームを受信することができ、１つのフレームだけスライドウィンドウを進めることができる。
【０１０９】
手順は、記録が止まり、すべてのフレームが処理されるまで、繰り返すことができる。まさに最初のフレームｉ＝１に対しては、｛φ−１，φ０｝は定義されていない場合がある。φ−１およびφ０は、恒等四元数に設定することができる。最後のフレームが受信された時点で、バッファは、それぞれのフレームをゆがめるために最終的なスライドウィンドウ内部で演算された向きを使用することによってフラッシュすることができる。
【０１１０】
いくつかの例では、小さなバッファサイズ（例えば、Ｎ＝５）は、制約のイーズインおよびイーズアウトができない場合がある。そのような事例では、ハード制約まで強化されるソフト制約になるように制約関数ｆを変更する必要があり得る。これは、関数ｆ’（φ，ｔ）として言及することができる。０または１を返す代わりに、ｆ’は、新しい向きφ’を返し、新しい向きφ’は、フレームボーダから押しのけることができる。向きφが空き領域を示すようになる状態に近づくほど、ｆ’はますます結果として得られたφ’を空き領域から押しのけることができる。次いで、以下のアルゴリズムの例（２）で指定されるように、アルゴリズム１を再公式化することができる。
【０１１１】
【数２２】
2018085775.tif 000024
向きｎ（φｉ−ＣＫΦｉ）が空き領域をもたらす際にｆ’が単にφｉを返す場合、アルゴリズム１とアルゴリズム２は同等であり得ることに留意されたい。アルゴリズム１の最適化率は、関数ｆ’（φｉをｎ（φｉ−ＣＫΦｉ）に向けてｓｌｅｒｐするが、まさに空き領域が現れようとしているポイントでちょうど停止する）を用いて、アルゴリズム２を使用することによって向上することができる。
【０１１２】
［ソーシャルネットワーキングシステム−実装例］
図７は、本発明の実施形態による、ウェブサイトまたはアプリケーション上のユーザの関心を推定するためのシステム７００の例のネットワーク図を示す。システム７００は、１つまたは複数のユーザデバイス７１０、１つまたは複数の外部システム７２０、ソーシャルネットワーキングシステム７３０およびネットワーク７５０を含む。一実施形態では、上記で説明される実施形態に関連して論じられるソーシャルネットワーキングシステムは、ソーシャルネットワーキングシステム７３０として実装することができる。例示を目的として、図７によって示されるシステム７００の実施形態は、単一の外部システム７２０および単一のユーザデバイス７１０を含む。しかし、他の実施形態では、システム７００は、より多くのユーザデバイス７１０および／またはより多くの外部システム７２０を含み得る。ある実施形態では、ソーシャルネットワーキングシステム７３０は、ソーシャルネットワークプロバイダによって動作され、外部システム７２０は、異なる実体によって動作され得るという点で、ソーシャルネットワーキングシステム７３０から分離される。しかし、様々な実施形態では、ソーシャルネットワーキングシステム７３０のユーザ（またはメンバー）にソーシャルネットワーキングサービスを提供するため、ソーシャルネットワーキングシステム７３０および外部システム７２０は連動する。この意味で、ソーシャルネットワーキングシステム７３０は、プラットホームまたはバックボーンを提供し、他のシステム（外部システム７２０など）は、プラットホームまたはバックボーンを使用して、インターネット上でソーシャルネットワーキングサービスおよび機能性をユーザに提供することができる。
【０１１３】
ユーザデバイス７１０は、１つまたは複数のコンピューティングデバイスを備え、１つまたは複数のコンピューティングデバイスは、ユーザから入力を受信し、ネットワーク７５０を介してデータを伝送および受信することができる。一実施形態では、ユーザデバイス７１０は、例えば、マイクロソフトウィンドウズ（登録商標）対応オペレーティングシステム（ＯＳ）、アップル（登録商標）ＯＳＸおよび／またはリナックス（登録商標）ディストリビューションを実行する従来のコンピュータシステムである。別の実施形態では、ユーザデバイス７１０は、スマートフォン、タブレット、携帯情報端末（ＰＤＡ）、携帯電話など、コンピュータの機能性を有するデバイスであり得る。ユーザデバイス７１０は、ネットワーク７５０を介して通信するように構成される。ユーザデバイス７１０は、例えば、ユーザデバイス７１０のユーザがソーシャルネットワーキングシステム７３０と相互作用できるようにするブラウザアプリケーションなどのアプリケーションを実行することができる。別の実施形態では、ユーザデバイス７１０は、ｉＯＳ（登録商標）やアンドロイド（登録商標）などのユーザデバイス７１０のネイティブのオペレーティングシステムで提供されるアプリケーションプログラミングインタフェース（ＡＰＩ）を通じてソーシャルネットワーキングシステム７３０と相互作用する。ユーザデバイス７１０は、ネットワーク７５０を介して外部システム７２０およびソーシャルネットワーキングシステム７３０と通信するように構成され、ネットワーク７５０は、有線および／または無線通信システムを使用する、ローカルエリアおよび／または広域ネットワークのいかなる組合せも含み得る。
【０１１４】
一実施形態では、ネットワーク７５０は、標準通信技術およびプロトコルを使用する。したがって、ネットワーク７５０は、イーサネット（登録商標）、８０２．１１、ＷｉＭＡＸ（登録商標）、３Ｇ、４Ｇ、ＣＤＭＡ、ＧＳＭ（登録商標）、ＬＴＥ、デジタル加入者回線（ＤＳＬ）などの技術を使用するリンクを含み得る。同様に、ネットワーク７５０上で使用されるネットワークプロトコルは、マルチプロトコルラベルスイッチング（ＭＰＬＳ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、ハイパーテキストトランスポートプロトコル（ＨＴＴＰ）、簡易メール転送プロトコル（ＳＭＴＰ）、ファイル転送プロトコル（ＦＴＰ）および同様のものを含み得る。ネットワーク７５０上で交換されるデータは、ハイパーテキストマークアップ言語（ＨＴＭＬ）および拡張マークアップ言語（ＸＭＬ）を含む技術および／またはフォーマットを使用して表すことができる。それに加えて、すべてのまたはいくつかのリンクは、セキュアソケット層（ＳＳＬ）、トランスポート層セキュリティ（ＴＬＳ）およびインターネットプロトコルセキュリティ（ＩＰｓｅｃ）などの従来の暗号化技術を使用して暗号化することができる。
【０１１５】
一実施形態では、ユーザデバイス７１０は、ブラウザアプリケーション７１２を使用して、外部システム７２０からおよびソーシャルネットワーキングシステム７３０から受信されたマークアップ言語文書７１４を処理することによって、外部システム７２０からおよび／またはソーシャルネットワーキングシステム７３０からのコンテンツを表示することができる。マークアップ言語文書７１４は、コンテンツや、コンテンツのフォーマットまたはプレゼンテーションについて説明する１つまたは複数の命令を特定する。マークアップ言語文書７１４に含まれる命令を実行することによって、ブラウザアプリケーション７１２は、マークアップ言語文書７１４によって説明されたフォーマットまたはプレゼンテーションを使用して、特定されたコンテンツを表示する。例えば、マークアップ言語文書７１４は、外部システム７２０およびソーシャルネットワーキングシステム７３０から回収されたテキストおよび／または画像データを含む複数のフレームを有するウェブページを生成および表示するための命令を含む。様々な実施形態では、マークアップ言語文書７１４は、拡張マークアップ言語（ＸＭＬ）データ、拡張ハイパーテキストマークアップ言語（ＸＨＴＭＬ）データまたは他のマークアップ言語データを含むデータファイルを含む。それに加えて、マークアップ言語文書７１４は、外部システム７２０とユーザデバイス７１０との間のデータ交換を容易にするためのジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（登録商標）オブジェクトノーテーション（ＪＳＯＮ）データ、ジェイソンウィズパディング（ＪＳＯＮＰ）およびジャバスクリプトデータを含み得る。ユーザデバイス７１０上のブラウザアプリケーション７１２は、ジャバスクリプトコンパイラを使用して、マークアップ言語文書７１４を復号することができる。
【０１１６】
また、マークアップ言語文書７１４は、フラッシュ（ＦＬＡＳＨ）（登録商標）またはユニティ（Ｕｎｉｔｙ）（登録商標）アプリケーション、シルバーライト（ＳｉｌｖｅｒＬｉｇｈｔ）（登録商標）アプリケーションフレームワークなどのアプリケーションまたはアプリケーションフレームワークを含むことも、アプリケーションまたはアプリケーションフレームワークにリンクすることもできる。
【０１１７】
一実施形態は、ユーザデバイス７１０は、ユーザデバイス７１０のユーザが、ソーシャルネットワーキングシステム７３０にログインしているかどうかを示すデータを含む１つまたは複数のクッキー７１６も含み、それにより、ソーシャルネットワーキングシステム７３０からユーザデバイス７１０に伝達されるデータの変更が可能になり得る。
【０１１８】
外部システム７２０は、ネットワーク７５０を使用してユーザデバイス７１０に伝達される１つまたは複数のウェブページ７２２ａ、７２２ｂを含む１つまたは複数のウェブサーバを含む。外部システム７２０は、ソーシャルネットワーキングシステム７３０から分離される。例えば、外部システム７２０は、第１のドメインと関連付けられ、ソーシャルネットワーキングシステム７３０は、別々のソーシャルネットワーキングドメインと関連付けられる。外部システム７２０に含まれるウェブページ７２２ａ、７２２ｂは、マークアップ言語文書７１４を含み、マークアップ言語文書７１４は、コンテンツを特定し、特定されたコンテンツのフォーマットまたはプレゼンテーションを指定する命令を含む。
【０１１９】
ソーシャルネットワーキングシステム７３０は、ソーシャルネットワーク用の１つまたは複数のコンピューティングデバイスを含み、ソーシャルネットワークは、複数のユーザを含み、ソーシャルネットワークの他のユーザとの通信および相互作用を行う能力をソーシャルネットワークのユーザに提供する。いくつかの例では、ソーシャルネットワークは、グラフ（すなわち、エッジおよびノードを含むデータ構造）で表すことができる。また、他のデータ構造も、ソーシャルネットワークを表すために使用することができ、これらに限定されないが、データベース、オブジェクト、クラス、メタ要素、ファイルまたは他の任意のデータ構造を含む。ソーシャルネットワーキングシステム７３０は、オペレータが管理、運用または制御することができる。ソーシャルネットワーキングシステム７３０のオペレータは、ソーシャルネットワーキングシステム７３０内でコンテンツの管理、ポリシの規制および使用率メトリクスの収集を行うための人間、自動化アプリケーションまたは一連のアプリケーションであり得る。いかなるタイプのオペレータも使用することができる。
【０１２０】
ユーザは、ソーシャルネットワーキングシステム７３０に参加し、次いで、接続を希望するソーシャルネットワーキングシステム７３０の何人もの他のユーザへの接続を追加することができる。本明細書で使用されるように、「友達」という用語は、ユーザがソーシャルネットワーキングシステム７３０を介して接続、関連性または関係を形成したソーシャルネットワーキングシステム７３０の他のいかなるユーザも指す。例えば、一実施形態では、ソーシャルネットワーキングシステム７３０のユーザがソーシャルグラフのノードとして表される場合は、「友達」という用語は、２人のユーザ間で形成されたエッジおよび２人のユーザを直接接続するエッジを指し得る。
【０１２１】
接続は、ユーザが明示的に追加することも、ユーザの共通の特性（例えば、同じ教育機関の同窓生であるユーザ）に基づいてソーシャルネットワーキングシステム７３０が自動的に作り出すこともできる。例えば、第１のユーザは、友達とする他の特定のユーザを明確に選択する。ソーシャルネットワーキングシステム７３０における接続は、通常、両方向のものであるが、必須ではないため、「ユーザ」および「友達」という用語は、基準フレームに依存する。ソーシャルネットワーキングシステム７３０のユーザ間の接続は、通常、双方向の（「二方向の」）または「相互の」ものであるが、接続は、単方向のまたは「一方向の」ものでもあり得る。例えば、ボブ（Ｂｏｂ）とジョー（Ｊｏｅ）が両者とも、ソーシャルネットワーキングシステム７３０のユーザであり、互いに接続されている場合は、ボブとジョーは、互いの接続者である。他方では、ボブは、ジョーによってソーシャルネットワーキングシステム７３０に伝達されたデータを閲覧するためにジョーとの接続を希望しているが、ジョーは、相互接続の形成を希望していない場合は、単方向の接続を確立することができる。ユーザ間の接続は、直接接続であり得る。しかし、ソーシャルネットワーキングシステム７３０のいくつかの実施形態は、１つまたは複数の接続レベルまたは隔たりを介して接続を間接的なものにすることができる。
【０１２２】
ユーザ間の接続を確立して維持し、ユーザ間の相互作用を可能にすることに加えて、ソーシャルネットワーキングシステム７３０は、ソーシャルネットワーキングシステム７３０によってサポートされる様々なタイプのアイテムに対する動作を取る能力をユーザに提供する。これらのアイテムは、ソーシャルネットワーキングシステム７３０のユーザが属し得るグループまたはネットワーク（すなわち、人々、実体および概念のソーシャルネットワーク）、ユーザが興味を持ちそうなイベントまたはカレンダエントリ、ソーシャルネットワーキングシステム７３０を介してユーザが使用できるコンピュータベースのアプリケーション、ソーシャルネットワーキングシステム７３０によってまたはソーシャルネットワーキングシステム７３０を通じて提供されるサービスを介してユーザがアイテムを購入または販売できるトランザクション、および、ソーシャルネットワーキングシステム７３０内外でユーザが実行できる広告との相互作用を含み得る。これらは、ソーシャルネットワーキングシステム７３０上でユーザが作用できるアイテムのほんの数例であり、他の多くのものも可能である。ユーザは、ソーシャルネットワーキングシステム７３０もしくは外部システム７２０で表すことができるか、ソーシャルネットワーキングシステム７３０から分離することができるか、または、ネットワーク７５０を介してソーシャルネットワーキングシステム７３０と結合することができればどんなものとでも相互作用することができる。
【０１２３】
また、ソーシャルネットワーキングシステム７３０は、様々な実体をリンクすることもできる。例えば、ソーシャルネットワーキングシステム７３０は、ユーザが、ＡＰＩ、ウェブサービスまたは他の通信チャネルを通じて、互いに、および、外部システム７２０または他の実体と相互作用できるようにする。ソーシャルネットワーキングシステム７３０は、複数のエッジによって相互接続された複数のノードを含む「ソーシャルグラフ」を生成して維持する。ソーシャルグラフの各ノードは、別のノードに作用し得るおよび／または別のノードによって作用され得る実体を表し得る。ソーシャルグラフは、様々なタイプのノードを含み得る。ノードのタイプの例は、ユーザ、人間ではない実体、コンテンツアイテム、ウェブページ、グループ、活動、メッセージ、概念、および、ソーシャルネットワーキングシステム７３０でオブジェクトによって表すことができる他の任意のものを含む。ソーシャルグラフの２つのノード間のエッジは、ノード関係からまたはノードのうちの１つによって他のノードに対して実行された動作から生じ得る、２つのノード間の特定の種類の接続または関連性を表し得る。いくつかの事例では、ノード間のエッジは、重み付けすることができる。エッジの重みは、ノード間の接続または関連性の強度など、エッジと関連付けられた属性を表し得る。異なるタイプのエッジは、異なる重みで提供することができる。例えば、あるユーザが別のユーザを「好む」際に作成されたエッジにはある重みを与える一方で、ユーザが別のユーザと友達になった際に作成されたエッジには異なる重みを与えることができる。
【０１２４】
例として、第１のユーザが第２のユーザを友達と見なすと、第１のユーザを表すノードと第２のユーザを表す第２のノードとを接続するソーシャルグラフのエッジが生成される。様々なノードが互いに関連するかまたは相互作用するため、ソーシャルネットワーキングシステム７３０は、関係および相互作用を反映するため、様々なノードを接続するエッジを変更する。
【０１２５】
また、ソーシャルネットワーキングシステム７３０は、ソーシャルネットワーキングシステム７３０とのユーザの相互作用を強化するユーザが生成したコンテンツも含む。ユーザが生成したコンテンツは、ユーザがソーシャルネットワーキングシステム７３０に追加、アップロード、送信または「掲示」できるものであればどんなものも含み得る。例えば、ユーザは、ユーザデバイス７１０からソーシャルネットワーキングシステム７３０にポストを伝達する。ポストは、ステータス更新もしくは他のテキストデータ、位置情報、写真などの画像、ビデオ、リンク、音楽、または、他の同様のデータおよび／もしくはメディアなどのデータを含み得る。また、コンテンツは、第三者がソーシャルネットワーキングシステム７３０に追加することもできる。コンテンツ「アイテム」は、ソーシャルネットワーキングシステム７３０でオブジェクトとして表される。このように、ソーシャルネットワーキングシステム７３０のユーザは、様々な通信チャネルを通じて、様々なタイプのメディアのテキストおよびコンテンツアイテムを掲示することによって、互いに通信することが推奨される。そのような通信は、ユーザの互いの相互作用を増大し、ユーザがソーシャルネットワーキングシステム７３０と相互作用する頻度を増大する。
【０１２６】
ソーシャルネットワーキングシステム７３０は、ウェブサーバ７３２、ＡＰＩ要求サーバ７３４、ユーザプロファイルストア７３６、接続ストア７３８、行動ロガー７４０、活動記録７４２、認証サーバ７４４およびデジタルビデオ安定化モジュール７４６を含む。本発明の実施形態では、ソーシャルネットワーキングシステム７３０は、様々なアプリケーションに対する追加の、より少ないまたは異なるコンポーネントを含み得る。システムの細部を曖昧にしないように、ネットワークインタフェース、セキュリティメカニズム、負荷分散装置、フェイルオーバサーバ、管理およびネットワーク運用コンソール、ならびに、同様のものなどの他のコンポーネントは示されていない。
【０１２７】
ユーザプロファイルストア７３６は、職歴、学歴、趣味または好み、位置、および、ユーザによって宣言されているかまたはソーシャルネットワーキングシステム７３０によって推測されている同様のものなど、伝記的な、人口学的なおよび他のタイプの記述的情報を含む、ユーザアカウントについての情報を維持する。この情報は、各ユーザが一意に識別されるように、ユーザプロファイルストア７３６に格納される。また、ソーシャルネットワーキングシステム７３０は、異なるユーザ間の１つまたは複数の接続について説明するデータを接続ストア７３８に格納する。接続情報は、同様のまたは共通の職歴、グループメンバーシップ、趣味または学歴を有するユーザを示し得る。それに加えて、ソーシャルネットワーキングシステム７３０は、異なるユーザ間のユーザが定義した接続を含み、ユーザが他のユーザとの関係を指定できるようにする。例えば、ユーザが定義した接続は、友達、同僚、パートナなど、ユーザの現実の関係に類似した他のユーザとの関係をユーザが作り出せるようにする。ユーザは、事前に定義された接続タイプから選択することも、必要に応じてユーザ自身の接続タイプを定義することもできる。また、人間ではない実体、バケット、クラスタセンタ、画像、興味、ページ、外部システム、概念および同様のものなどのソーシャルネットワーキングシステム７３０の他のノードとの接続も、接続ストア７３８に格納される。
【０１２８】
ソーシャルネットワーキングシステム７３０は、ユーザが相互作用できるオブジェクトについてのデータを維持する。このデータを維持するため、ユーザプロファイルストア７３６および接続ストア７３８は、ソーシャルネットワーキングシステム７３０によって維持される対応するオブジェクトタイプのインスタンスを格納する。各オブジェクトタイプは、オブジェクトのタイプに適切な情報の格納に適した情報フィールドを有する。例えば、ユーザプロファイルストア７３６は、ユーザのアカウントおよびユーザのアカウントに関連する情報に関する説明に適したフィールドを有するデータ構造を含む。特定のタイプの新しいオブジェクトが作成されると、ソーシャルネットワーキングシステム７３０は、対応するタイプの新しいデータ構造を初期化し、一意のオブジェクト識別子をそれに割り当て、必要に応じてオブジェクトへのデータの追加を開始する。このことは、例えば、ユーザがソーシャルネットワーキングシステム７３０のユーザになると起こり得、ソーシャルネットワーキングシステム７３０は、ユーザプロファイルの新しいインスタンスをユーザプロファイルストア７３６に生成し、一意識別子をユーザアカウントに割り当て、ユーザアカウントのフィールドへのユーザが提供する情報の投入を開始する。
【０１２９】
接続ストア７３８は、ユーザと他のユーザとの接続、外部システム７２０との接続または他の実体との接続に関する説明に適したデータ構造を含む。また、接続ストア７３８は、接続タイプをユーザの接続と関連付けることもでき、その関連性をユーザのプライバシ設定と併せて使用して、ユーザについての情報へのアクセスを規制することができる。本発明の実施形態では、ユーザプロファイルストア７３６および接続ストア７３８は、連合データベースとして実装することができる。
【０１３０】
接続ストア７３８、ユーザプロファイルストア７３６および活動記録７４２に格納されたデータは、ソーシャルネットワーキングシステム７３０がソーシャルグラフを生成できるようにし、ソーシャルグラフは、ノードを使用して、ノードを接続する様々なオブジェクトおよびエッジを特定し、異なるオブジェクト間の関係を特定する。例えば、第１のユーザがソーシャルネットワーキングシステム７３０の第２のユーザとの接続を確立する場合、ユーザプロファイルストア７３６からの第１のユーザおよび第２のユーザのユーザアカウントは、ソーシャルグラフのノードとして機能し得る。接続ストア７３８によって格納された第１のユーザと第２のユーザとの間の接続は、第１のユーザおよび第２のユーザと関連付けられたノード間のエッジである。この例を続けると、第２のユーザは、ソーシャルネットワーキングシステム７３０内で第１のユーザにメッセージを送信することができる。格納することができる、メッセージを送信する動作は、第１のユーザおよび第２のユーザを表すソーシャルグラフの２つのノード間の別のエッジである。それに加えて、メッセージ自体を、第１のユーザおよび第２のユーザを表すノードに接続された別のノードとして特定し、ソーシャルグラフに含めることができる。
【０１３１】
別の例では、第１のユーザは、ソーシャルネットワーキングシステム７３０によって維持される画像に（またはその代替として、ソーシャルネットワーキングシステム７３０の外側の別のシステムによって維持される画像に）第２のユーザをタグ付けすることができる。画像はそれ自体、ソーシャルネットワーキングシステム７３０のノードとして表すことができる。このタグ付け動作は、第１のユーザと第２のユーザとの間のエッジを作成することや、ユーザの各々と画像（これもソーシャルグラフのノードである）との間のエッジを作成することができる。さらに別の例では、ユーザがイベントへの出席を確認する場合、ユーザおよびイベントは、ユーザプロファイルストア７３６から得られたノードであり、イベントへの出席は、活動記録７４２から回収することができるノード間のエッジである。ソーシャルグラフを生成して維持することにより、ソーシャルネットワーキングシステム７３０は、異なるタイプのオブジェクト、ならびに、それらのオブジェクト間の相互作用および接続について説明するデータを含み、社会的に関連する情報の豊富な供給源を提供する。
【０１３２】
ウェブサーバ７３２は、ネットワーク７５０を介して、ソーシャルネットワーキングシステム７３０を１つもしくは複数のユーザデバイス７１０および／または１つもしくは複数の外部システム７２０にリンクする。ウェブサーバ７３２は、ウェブページや、ジャバ（Ｊａｖａ）（登録商標）、ジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（登録商標）、フラッシュ（Ｆｌａｓｈ）（登録商標）、ＸＭＬなどの他のウェブ関連のコンテンツをサービス提供する。ウェブサーバ７３２は、メールサーバ、または、ソーシャルネットワーキングシステム７３０と１つまたは複数のユーザデバイス７１０との間でメッセージを受信およびルーティングするための他のメッセージング機能性を含み得る。メッセージは、インスタントメッセージ、キューに入れられたメッセージ（例えば、Ｅメール）、テキストおよびＳＭＳメッセージまたは他の任意の適したメッセージングフォーマットであり得る。
【０１３３】
ＡＰＩ要求サーバ７３４は、１つまたは複数の外部システム７２０およびユーザデバイス７１０が、１つまたは複数のＡＰＩ関数を呼び出すことによって、ソーシャルネットワーキングシステム７３０からアクセス情報を呼び出せるようにする。また、ＡＰＩ要求サーバ７３４は、外部システム７２０が、ＡＰＩを呼び出すことによって、ソーシャルネットワーキングシステム７３０に情報を送信できるようにもする。一実施形態では、外部システム７２０は、ネットワーク７５０を介してソーシャルネットワーキングシステム７３０にＡＰＩ要求を送信し、ＡＰＩ要求サーバ７３４は、ＡＰＩ要求を受信する。ＡＰＩ要求サーバ７３４は、ＡＰＩ要求と関連付けられたＡＰＩを呼び出すことによって要求を処理して適切な応答を生成し、ＡＰＩ要求サーバ７３４は、ネットワーク７５０を介して外部システム７２０に適切な応答を伝達する。例えば、ＡＰＩ要求に応答して、ＡＰＩ要求サーバ７３４は、外部システム７２０にログインしたユーザの接続者などのユーザと関連付けられたデータを収集し、収集したデータを外部システム７２０に伝達する。別の実施形態では、ユーザデバイス７１０は、外部システム７２０と同じ方法で、ＡＰＩを介してソーシャルネットワーキングシステム７３０と通信する。
【０１３４】
行動ロガー７４０は、ソーシャルネットワーキングシステム７３０内および／またはソーシャルネットワーキングシステム７３０外のユーザの動作についてウェブサーバ７３２から通信を受信することができる。行動ロガー７４０は、ユーザの動作についての情報を活動記録７４２に投入し、ソーシャルネットワーキングシステム７３０が、ソーシャルネットワーキングシステム７３０内およびソーシャルネットワーキングシステム７３０外でそのユーザによって取られた様々な動作を発見できるようにする。ソーシャルネットワーキングシステム７３０上で別のノードに関して特定のユーザが取るいかなる動作も、活動記録７４２でまたは同様のデータベースもしくは他のデータリポジトリで維持される情報を通じて、各ユーザアカウントと関連付けることができる。特定されて格納されるソーシャルネットワーキングシステム７３０内でユーザが取る動作の例は、例えば、別のユーザへの接続を追加すること、別のユーザにメッセージを送信すること、別のユーザからメッセージを読むこと、別のユーザと関連付けられたコンテンツを閲覧すること、別のユーザによって掲示されたイベントに出席すること、画像を掲示すること、画像の掲示を試みること、または、別のユーザもしくは別のオブジェクトと相互作用する他の動作を含み得る。ソーシャルネットワーキングシステム７３０内でユーザが動作を取ると、その動作は活動記録７４２に記録される。一実施形態では、ソーシャルネットワーキングシステム７３０は、エントリに関するデータベースとして活動記録７４２を維持する。ソーシャルネットワーキングシステム７３０内で動作を取ると、動作に対するエントリが活動記録７４２に追加される。活動記録７４２は、動作記録と呼ぶことができる。
【０１３５】
それに加えて、ユーザ動作は、ソーシャルネットワーキングシステム７３０から分離された外部システム７２０などのソーシャルネットワーキングシステム７３０の外側の実体内で起こる概念および動作と関連付けることができる。例えば、行動ロガー７４０は、ウェブサーバ７３２から外部システム７２０とのユーザの相互作用について説明するデータを受信することができる。この例では、外部システム７２０は、ソーシャルグラフで構造化された動作およびオブジェクトに従って、ユーザの相互作用を報告する。
【０１３６】
ユーザが外部システム７２０と相互作用する動作の他の例は、ユーザが外部システム７２０もしくは別の実体への興味を示すこと、外部システム７２０もしくは外部システム７２０内のウェブページ７２２ａについて論じているソーシャルネットワーキングシステム７３０にユーザがコメントを掲示すること、ソーシャルネットワーキングシステム７３０にユーザが外部システム７２０と関連付けられたユニフォームリソースロケータ（ＵＲＬ）もしくは他の識別子を掲示すること、外部システム７２０と関連付けられたイベントにユーザが出席すること、または、外部システム７２０に関連するユーザによる他の任意の動作を含む。したがって、活動記録７４２は、ソーシャルネットワーキングシステム７３０のユーザと、ソーシャルネットワーキングシステム７３０から分離された外部システム７２０との相互作用について説明する動作を含み得る。
【０１３７】
認証サーバ７４４は、ソーシャルネットワーキングシステム７３０のユーザの１つまたは複数のプライバシ設定を実施する。ユーザのプライバシ設定は、ユーザと関連付けられた特定の情報をどのように共有できるかを決定する。プライバシ設定は、ユーザと関連付けられた特定の情報の仕様、および、情報を共有できる１つまたは複数の実体の仕様を含む。情報を共有できる実体の例は、他のユーザ、アプリケーション、外部システム７２０、または、潜在的に情報にアクセスできる任意の実体を含み得る。ユーザが共有できる情報は、ユーザアカウント情報（プロファイル写真など）、ユーザと関連付けられた電話番号、ユーザの接続者、ユーザが取った動作（接続の追加など）、ユーザプロファイル情報の変更および同様のものを含む。
【０１３８】
プライバシ設定仕様は、異なる粒度レベルで提供することができる。例えば、プライバシ設定は、他のユーザと共有すべき特定の情報を特定することができる。プライバシ設定は、職場の電話番号または特定の一連の関連情報（プロファイル写真、自宅の電話番号およびステータスを含む個人情報など）を特定する。あるいは、プライバシ設定は、ユーザと関連付けられたすべての情報に適用することができる。また、特定の情報にアクセスできる一連の実体の仕様も、様々な粒度レベルで指定することができる。情報を共有できる様々な一連の実体は、例えば、ユーザのすべての友達、友達のすべての友達、すべてのアプリケーションまたはすべての外部システム７２０を含み得る。一実施形態は、一連の実体の仕様が実体の列挙を含むことを可能にする。例えば、ユーザは、ある情報へのアクセスが認められている外部システム７２０のリストを提供することができる。別の実施形態は、仕様が、情報へのアクセスが認められていない例外と共に一連の実体を含むことを可能にする。例えば、ユーザは、すべての外部システム７２０がユーザの職場情報にアクセスできるようにするが、職場情報へのアクセスが認められていない外部システム７２０のリストを指定することができる。ある実施形態は、「ブロックリスト」という、ある情報へのアクセスが認められていない例外のリストを呼び出す。ユーザによって指定されたブロックリストに属する外部システム７２０は、プライバシ設定で指定された情報へのアクセスが阻止される。情報の仕様の粒度および情報が共有される実体の仕様の粒度の様々な組合せが可能である。例えば、すべての個人情報は、友達と共有することができるが、すべての職場情報は、友達の友達と共有することができる。
【０１３９】
認証サーバ７４４は、ユーザの友達、外部システム７２０ならびに／または他のアプリケーションおよび実体による、ユーザと関連付けられたある情報へのアクセスが可能かどうかを判断するための論理を含む。外部システム７２０は、ユーザのより個人的で機密な情報（ユーザの職場の電話番号など）にアクセスするための認証サーバ７４４からの認証が必要であり得る。ユーザのプライバシ設定に基づいて、認証サーバ７４４は、別のユーザ、外部システム７２０、アプリケーションまたは別の実体に対して、ユーザと関連付けられた情報（ユーザが取った動作についての情報を含む）へのアクセスが認められているかどうかを判断する。
【０１４０】
ソーシャルネットワーキングシステム７３０は、デジタルビデオ安定化モジュール７４６を含み得る。デジタルビデオ安定化モジュール７４６は、空き領域が目に見えないかまたは最小閾値未満であるという制約の下、平滑なカメラ配向のセットを演算することができる。次いで、デジタルビデオ安定化モジュール７４６は、新しい平滑化されたカメラ配向のセットに基づいて、ゆがんだフレームを生成することができる。一実施形態では、デジタルビデオ安定化モジュール７４６は、図４のデジタルビデオ安定化４００として実装することができる。
ハードウェアの実装
前述のプロセスおよび特徴は、多種多様なマシンおよびコンピュータシステムアーキテクチャによって、ならびに、多種多様なネットワークおよびコンピューティング環境で実装することができる。図８は、本発明の実施形態による、本明細書で説明される実施形態のうちの１つまたは複数の実装に使用することができるコンピュータシステム８００の例を示す。コンピュータシステム８００は、本明細書で論じられるプロセスおよび特徴をコンピュータシステム８００に実行させる命令セットを含む。コンピュータシステム８００は、他のマシンに接続（例えば、ネットワーク接続）することができる。ネットワーク接続された配置では、コンピュータシステム８００は、クライアントサーバネットワーク環境におけるサーバマシンもしくはクライアントマシンの資格で、または、ピアツーピア（または分散型）ネットワーク環境におけるピアマシンとして動作することができる。本発明の実施形態では、コンピュータシステム８００は、本明細書で説明されるソーシャルネットワーキングシステムのコンポーネントであり得る。本発明の実施形態では、コンピュータシステム８００は、ソーシャルネットワーキングシステム８３０のすべてまたは一部を構成する多くのサーバのうちの１つのサーバであり得る。
【０１４１】
コンピュータシステム８００は、本明細書で説明されるプロセスおよび特徴を対象とする、プロセッサ８０２、キャッシュ８０４、ならびに、コンピュータ可読媒体上に格納された１つまたは複数の実行可能なモジュールおよびドライバを含む。それに加えて、コンピュータシステム８００は、高性能入力／出力（Ｉ／Ｏ）バス８０６および標準Ｉ／Ｏバス８０８を含む。ホストブリッジ８１０は、プロセッサ８０２と高性能Ｉ／Ｏバス８０６とを結合し、Ｉ／Ｏバスブリッジ８１２は、２つのバス８０６および８０８を互いに結合する。システムメモリ８１４および１つまたは複数のネットワークインタフェース８１６は、高性能Ｉ／Ｏバス８０６と結合される。コンピュータシステム８００は、ビデオメモリおよびビデオメモリと結合された表示デバイス（図示せず）をさらに含み得る。大容量記憶装置８１８およびＩ／Ｏポート８２０は、標準Ｉ／Ｏバス８０８と結合される。コンピュータシステム８００は、任意選択により、標準Ｉ／Ｏバス８０８と結合される、キーボードおよびポインティングデバイス、表示デバイスまたは他の入力／出力デバイス（図示せず）を含み得る。集合的に、これらの要素は、コンピュータハードウェアシステムの広義のカテゴリを表すことが意図され、これらに限定されないが、カリフォルニア州サンタクララ市のインテル社によって製造されたｘ８６互換プロセッサ、およびカリフォルニア州サニーベール市のアドバンストマイクロデバイセズ社によって製造されたｘ８６互換プロセッサ、ならびに他の任意の適したプロセッサに基づくコンピュータシステムを含む。
【０１４２】
オペレーティングシステムは、ソフトウェアアプリケーション（図示せず）へのおよびソフトウェアアプリケーションからのデータの入力および出力を含む、コンピュータシステム８００の動作を管理および制御する。オペレーティングシステムは、システム上で実行されているソフトウェアアプリケーションとシステムのハードウェアコンポーネントとの間のインタフェースを提供する。リナックス（ＬＩＮＵＸ）（登録商標）オペレーティングシステム、カリフォルニア州クパチーノ市のアップルコンピュータ社から入手可能なアップルマッキントッシュ（登録商標）オペレーティングシステム、ＵＮＩＸ（登録商標）オペレーティングシステム、マイクロソフト（Ｍｉｃｒｏｓｏｆｔ）（登録商標）ウィンドウズ（Ｗｉｎｄｏｗｓ）（登録商標）オペレーティングシステム、ＢＳＤオペレーティングシステムおよび同様のものなどの適したいかなるオペレーティングシステムも使用することができる。他の実装形態も可能である。
【０１４３】
コンピュータシステム８００の要素については、以下でさらに詳細に説明される。具体的には、ネットワークインタフェース８１６は、コンピュータシステム８００と、イーサネット（Ｅｔｈｅｒｎｅｔ）（登録商標）（例えば、ＩＥＥＥ８０２．３）ネットワーク、バックプレーンなどの広範なネットワークとの間の通信を提供する。大容量記憶装置８１８は、上記で特定されたそれぞれのコンピューティングシステムによって実装される上記で説明されるプロセスおよび特徴を実行するためのデータおよびプログラミング命令の永久記憶を提供し、システムメモリ８１４（例えば、ＤＲＡＭ）は、プロセッサ８０２によって実行されると、データおよびプログラミング命令の一時記憶を提供する。Ｉ／Ｏポート８２０は、コンピュータシステム８００と結合することができる追加の周辺デバイス間の通信を提供する１つまたは複数のシリアルおよび／またはパラレル通信ポートであり得る。
【０１４４】
コンピュータシステム８００は、様々なシステムアーキテクチャを含み得、コンピュータシステム８００の様々なコンポーネントは、再構成することができる。例えば、キャッシュ８０４は、プロセッサ８０２内蔵であり得る。あるいは、キャッシュ８０４とプロセッサ８０２は、「プロセッサモジュール」として一緒にパックすることができ、プロセッサ８０２は、「プロセッサコア」と呼ばれる。その上、本発明のある実施形態は、上記のコンポーネントのすべてを必要とすることも、含むこともない場合がある。例えば、標準Ｉ／Ｏバス８０８と結合された周辺デバイスは、高性能Ｉ／Ｏバス８０６と結合することができる。それに加えて、いくつかの実施形態では、単一のバスしか存在しない場合があり、コンピュータシステム８００のコンポーネントは、単一のバスに結合される。その上、コンピュータシステム８００は、追加のプロセッサ、記憶装置またはメモリなどの追加のコンポーネントを含み得る。
【０１４５】
一般に、本明細書で説明されるプロセスおよび特徴は、オペレーティングシステムもしくは特定のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュールまたは「プログラム」と呼ばれる一連の命令の一部として実装することができる。例えば、１つまたは複数のプログラムは、本明細書で説明される特定のプロセスを実行するために使用することができる。プログラムは、通常、１つまたは複数のプロセッサによって読み取られて実行されると、本明細書で説明されるプロセスおよび特徴を実行するための動作をコンピュータシステム８００に実行させる、コンピュータシステム８００の様々なメモリおよび記憶装置に１つまたは複数の命令を含む。本明細書で説明されるプロセスおよび特徴は、ソフトウェア、ファームウェア、ハードウェア（例えば、特定用途向け集積回路）またはそれらの任意の組合せで実装することができる。
【０１４６】
一実装形態では、本明細書で説明されるプロセスおよび特徴は、分散型コンピューティング環境で個別にまたはまとめて、コンピュータシステム８００によって実行される一連の実行可能なモジュールとして実装される。前述のモジュールは、ハードウェア、コンピュータ可読媒体（または機械可読媒体）上に格納された実行可能なモジュールまたは両方の組合せによって実現することができる。例えば、モジュールは、プロセッサ８０２などのハードウェアシステムのプロセッサによって実行される複数のまたは一連の命令を含み得る。最初は、一連の命令は、大容量記憶装置８１８などの記憶装置上に格納することができる。しかし、一連の命令は、適したいかなるコンピュータ可読記憶媒体上にも格納することができる。その上、一連の命令は、ローカルで格納する必要はなく、ネットワークインタフェース８１６を介してリモート記憶装置（ネットワーク上のサーバなど）から受信することができる。命令は、大容量記憶装置８１８などの記憶装置からシステムメモリ８１４にコピーされ、次いで、プロセッサ８０２によってアクセスされて実行される。様々な実装形態では、１つまたは複数のモジュールは、並列処理環境における複数のサーバなどの１つまたは複数の場所で、１つのプロセッサまたは複数のプロセッサが実行することができる。
【０１４７】
コンピュータ可読媒体の例は、これらに限定されないが、揮発性および不揮発性メモリデバイス、ソリッドステートメモリ、フロッピー（登録商標）ディスクおよび他の取り外し可能型ディスク、ハードディスクドライブ、磁気媒体、光ディスク（例えば、コンパクトディスク読み取り専用メモリ（ＣＤＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、他の同様の非一時的な（または一時的な）有形の（または非有形の）記憶媒体、または、本明細書で説明されるプロセスおよび特徴のいずれか１つまたは複数を実行するためにコンピュータシステム８００によって実行するための一連の命令の格納、符号化もしくは運搬に適した任意のタイプの媒体などの記録可能なタイプの媒体を含む。
【０１４８】
説明を目的として、多くの特定の詳細は、説明の徹底的な理解を提供するために記載される。しかし、当業者であれば、これらの特定の詳細なしで本開示の実施形態を実践できることが明らかである。いくつかの例では、モジュール、構造、プロセス、特徴、およびデバイスは、説明を曖昧にすることを避けるため、ブロック図の形態で示される。他の例では、データおよび論理フローを表すため、機能的なブロック図およびフロー図が示される。ブロック図およびフロー図のコンポーネント（例えば、モジュール、ブロック、構造、デバイス、特徴など）は、本明細書で明確に説明されるものや示されるもの以外の方式で、様々に組み合わせる、分離する、取り除く、並べ替える、および置き換えることができる。
【０１４９】
この明細書における「一実施形態」、「他の実施形態」、「一連の実施形態のうちの１つ」、「いくつかの実施形態」、「様々な実施形態」、または同様のものに対する言及は、実施形態に関連して説明される特定の特徴、設計、構造、または特性が本開示の少なくとも１つの実施形態に含まれることを意味する。例えば、本明細書の様々な場所での「一実施形態では」という記載は、必ずしもすべてが同じ実施形態を指すとは限らず、他の実施形態と相互に排他的な別々の実施形態または代替の実施形態ということでもない。その上、「一実施形態」または同様のものへの明確な言及の有無にかかわらず、様々な特徴が説明され、様々な特徴は、いくつかの実施形態では、様々に組み合わせたり、含めたりすることができるが、他の実施形態では、様々に省略することもできる。同様に、いくつかの実施形態に対する優先または要件であり得るが、他の実施形態ではそうではない、様々な特徴が説明される。
【０１５０】
本明細書で使用される言語は、主に、読み易さと教示の目的のために選択されており、発明の主題を叙述するまたは限定するためには選択されていない。したがって、本発明の範囲は、この詳細な説明によってではなくむしろ、これに基づく出願において開示される任意の請求項によって限定されることを意図する。それに従って、本発明の実施形態の開示は、以下の特許請求の範囲に記載される本発明の範囲を例示することを意図するが、限定することは意図しない。
【図１】
2018085775.tif 000025
【図２】
2018085775.tif 000026
【図３】
2018085775.tif 000027
【図４】
2018085775.tif 000028
【図５】
2018085775.tif 000029
【図６】
2018085775.tif 000030
【図７】
2018085775.tif 000031
【図８】
2018085775.tif 000032