図面を全体的に参照すると、様々な実装形態による、背景画像とブレンドされる画像を準備するための方法が説明されている。一部の実装形態では、本明細書に記載の方法は、2つの部分を有し得るピクセル単位の変換を含む。1つ目は、赤、緑、青、アルファ(RGBA)色空間の投影であり、本明細書ではこれをアルファ投影と呼ぶ。2つ目は、画像のエッジに近いアルファチャンネル値の補正であり、本明細書ではこれを透明度強制(transparency forcing)と呼ぶ。アルファ投影は、以下の例を参照すると理解することができる。Tと呼ぶ、完全に透明にすることを望み得るRGB色に対して、RGB空間内のその周囲の他の色のボリュームを定義することができる。画像ピクセルがこのボリュームに属する色Cを有する場合、CはTから離れて、ボリュームの境界、すなわちボリュームの投影面上のRGB色Pに直線的に投影される。次に、色Pが色Tの上にレンダリングされた場合に、アルファブレンディングの式によって、元のRGB色Cが再構築されるように、色Pのピクセルにアルファチャンネル値を割り当ることができる。
この変換の結果として、「投影ボリューム(projected volume)」内の全ての色には、ある透明度が割り当てられ、Tに近い色ほど透明度が高くなる。この画像が色Tの背景の上にレンダリングされた場合に、アルファブレンドされた結果は、(量子化および丸めによる小さな影響を無視すると)原画像をおおよそ再構成するはずである。背景色がTから他の色Uにシフトされると、元は色Tであったピクセルが色Uに見えるだけでなく、投影ボリューム内の全ての色が、合わせてスムーズに再マッピングされる。
第2のステップは、パディングされたエッジのアルファ補正、すなわち、透明度強制である。上記の例を続けると、入力画像のエッジ上の全てのピクセルは、Tに非常に近い色を有する場合を除いて、完全に透明にはならない。その場合、かつ、ビューポートからのパディングを使用して画像をレンダリングする必要がある場合(画像がビューポートをフル解像度で満たすのに十分な大きさでないか、または画像およびビューポートのアスペクト比が一致しないため)、画像の境界が完全に透明でないと、画像が終了し、ビューポートが開始する箇所が明瞭になってしまい、ビューポートに広がる連続した1枚の画像の錯覚が崩れ得る。この問題を回避するために、これらのパディングされたエッジ付近のアルファチャンネルに追加の変換を実行して、境界におけるほぼ透明のピクセルを完全に透明なピクセルにスムーズに変換することができる。この透明度強制の方法は、画像の境界から離れるに従い効果を弱めることによって、画像の境界から少し離れた距離において、ピクセルが第1段階で割り当てられた透明度を使用するようにし得る。
中央の被写体(たとえば、商品の画像、服のモデルの画像など)が無地の背景の上に表示された画像は一般的であり、その理由は、これが閲覧者の注意を被写体に保つのに役立ち、中立的な提示によって、多くのユーザインターフェース(UI)に適合するためである。しかしながら、様々なUIは、異なる背景色、グラデーション、およびパターンを使用した(必要に応じてレンダリングされる領域と対比またはブレンドするため)、または異なるサイズもしくはアスペクト比にパディングされた(それによって所望のビューポートを完全に埋めることができる)、前記画像の他のバージョンの恩恵を受ける場合がある。一部の実装形態では、サイズおよび背景の所望の組み合わせごとに、画像の異なるバージョンを生成することができる。しかしながら、これにより、ストレージおよびサービス提供能力が著しく使用され得る。
1つの解決策は、背景が透明になるように画像を変換することであろう。そのようにして、画像の単一のバージョンを記憶および提供し、その後、所望の背景およびサイズのビューポート上にレンダリングして、所望の画像をシミュレートすることができる。しかしながら、そのような透明な背景の画像を生成するのは難しい場合があり、その理由は、画像撮影中に特別な準備またはツールが必要となる場合があり、あるいは人間の編集および/または自動化された方法を使用して、標準的な(非透明の)画像において前景領域および背景領域を区分することが必要となる場合があるためである。
これらの手法は時間と労力とを要し、および/またはエラーが起こりやすい場合がある。他の人により生成された画像を表示したい場合、問題はさらにいっそう難しくなる。透明な背景の画像は比較的一般的ではないので、所望の効果を実現するために、エラーが起こりやすい画像セグメンテーション技法に頼ることが必要になる可能性が高くなる。画像が多くの様々なソースからのものであり、表示する際に一貫性がない場合、考えられる全ての画像および被写体のバリエーションの下で適切に機能する信頼性の高い方法を作成することはさらに難しくなり得る。
これはショッピングウェブサイトが直面する1つの問題であり、多くの異なる業者により提供される巨大なコーパスから商品画像を提示できるようにする必要がある。ショッピングウェブサイトに表示される必要がある画像の多くは、不透明な白または非常に明るい色の背景の上に表示され得る。検討中の新たなコンテンツ形式は、異なる(明るいグレーなどの)背景色で、一貫したアスペクト比でそれらの画像を表示することから恩恵を受けるであろう。ショッピングウェブサイトが既に有している白背景画像から画像を生成することは有益であり得る。
画像撮影中に、クロマキーイング(たとえば、グリーンスクリーン)および深度マッピングなどの方法を使用することができる。クロマキーイングは、既知の色のステージ背景(staged background)の前で画像被写体を撮影し、次いでその色の存在を使用して、どのピクセルが背景に属するかを検出することができる。背景色は、被写体のどの色とも重ならないように慎重に選択される必要があり、そうしないと、被写体の色が一致する部分が背景として誤分類され得る。
さらに、深度マッピングを使用することができる。いくつかの画像撮影の構成では、各ピクセルの色だけでなく、カメラからの距離もキャプチャすることができる。背景が被写体から距離的に十分に離れている場合、被写体に属するピクセルを背景に属するピクセルから分離することが可能である。使用される技法に応じて、深度マッピング技法およびクロマキー技法は、専用のハードウェア、管理された撮影条件、および被写体への制限(たとえば、反射しすぎたり、透明なコンポーネントを有したりしない)を必要とし得る。
画像撮影後、画像セグメンテーション/マッティングおよび均一画像透明度を使用することができる。画像のセグメンテーションおよびマッティングは、2つ以上の意味論的に意味のある領域にピクセルを割り当てようとする進行中のコンピュータビジョンの研究領域である。「セグメンテーション」および「マッティング」は密接に関連しているがわずかに異なる概念であり、前者は各ピクセルを厳密に1つの領域に割り当てることを指し、後者はピクセルに1つまたは複数の領域への少数の所属を割り当てることを指す(たとえば、オブジェクト境界のピクセルは、半分背景であって、半分前景であり得る)。どの技法も完璧ではなく、潜在的なエラーには、他の領域と類似の特性を有するある領域の部分の混同が含まれる(たとえば、白背景画像において、前景のあらゆる白い部分が背景として誤ってラベル付けされる)。最もロバストな技法には他の欠点があることが多く、たとえば、計算時間が遅い、訓練データの大きなセットが必要となる、画像の特性に関する仮定がある、などである。
背景色をある程度制御できるようにするための1つの技法は、画像内の全てのピクセルに部分的で均一な透明度を割り当て、次いで、アルファブレンドされた背景色を希望の色に向かわせるビューポート色の上に画像をレンダリングすることである。この技法は計算的に非常に軽量であるが、いくつかの重大な欠点があり、画像のコントラストが大幅に低下し、知覚される色が全体的に歪む場合があり(たとえば、背景を暗くしたい場合、画像全体を暗くしなければならない)、また、画像の境界を完全に透明することができず、すなわち、画像を異なるアスペクト比のビューポート内にレンダリングするとすぐにわかる。
ピクセルに前景または背景としてラベル付けすることを含む上記の技法の一部には(すなわち、均一透明度を除くそれら全て)、本明細書に記載のアルファ投影方法および透明度強制方法によって克服できる欠点がある。第1に、背景を置換される完全に透明な領域にすることによって、背景領域内の特徴(たとえば、影、反射、および背景テクスチャ)を保存できなくなる。第2に、前景と類似した色の背景上に透明な画像をレンダリングすると、前景および背景の境界において全てのコントラストが失われる可能性がある。
アルファ投影および透明度強制のための本明細書に記載の方法は、一部の実装形態では、白に近いピクセルを透明にすることができる。均一透明度の方法とは異なり、本明細書に記載の方法は、前景と背景とを明確に区別しようとしなくてもよい。本明細書に記載の方法は、入力色に基づいて透明度を割り当てることによって、変換された画像により望ましい特性を与えることができる。この方法は前景と背景とを明示的に区別しようとしないので、一部の実装形態では、背景色の変化は前景のその色にも影響を与えるので、この技法は背景色のわずかな変化に対して最も確実に機能し得る。
本明細書に記載の方法は、セグメンテーションベースの技法にとって有利であり得る。この技法では前景領域にある程度の透明度を割り当てることが多くなり得るが、背景色が大幅に変更されない限り、アルファブレンディング後のこれらのエラーの視覚的痕跡はより些細になる傾向がある。セグメンテーションエラーは、無地領域の中央で透明度の変化を引き起こし得るので、より視覚的に明白になる傾向があり(ブレンドされた色の不連続性は非常に目立つ)、誤って背景として分類し得る領域における全てのコントラストを消し去ってしまう傾向がある。この技法は、画像の目に見えるコントラストを保存する傾向があるので、背景色が元の前景色に一致するように変更されても、前景は背景に溶け込むことはない。この技法は、影、反射、およびテクスチャを含む、背景における細かなパターンおよび特徴を保存することができる。
本明細書で提供する例示的な方法は、一部の実装形態では、他の色再マッピング方式(均一透明度を含む)と比較して利点を有し得る。元の背景色が使用される場合、画像はアルファブレンディング後に色およびコントラストの変化が最小限になる。色の歪みおよびコントラストの損失は、背景色が変化した程度に比例し得るので、背景色の変化がわずかな場合、色が大きく歪まなくなり得る。変換の時点で投影ボリュームのサイズを調節することにより、色の保存(より小さいボリューム)と、コントラストの保存(より大きいボリューム)とをトレードオフすることができる。選択された投影ボリュームに関係なく、RGB立方体の境界上の色の少なくとも半分は、この変換によって完全に保持されるはずである。例示的な実施形態によれば、本明細書で提示する方法は、不透明な背景上にレンダリングされる単一の透明画像を仮定してもよいが、アルファブレンディングアルゴリズムにより、複数の透明画像を合成することが可能になり得る。1つの代替の実装形態は、互いにアルファブレンドされると、このアルゴリズムによって直接計算されたような画像になる2つ以上の透明な画像を作成することであろう。これは明らかに、ユーザに提示するために画像ごとに複数の画像ファイルを記憶することを必要とするが、背景を動的に色変更する同様の機能をもたらす。
前景を背景から意味的に区別しようとするセグメンテーション/マッティング技法と比較して、アルファ-ホワイトの「エラー」(前景ピクセルへの透明度の割り当て)はより多く起こるが、より視覚的に些細である。結果として、アルファ投影方法では、失敗する可能性のある画像に対してあまり積極的にフィルタリングしない余裕があり、透明な背景を有する画像の数を増やすことができる。
セグメンテーション/マッティングの視覚的に明らかな失敗のタイプには、無地の色領域に激しいアルファ遷移がもたらされることが含まれ、これにより、非白の背景色の上に画像をアルファブレンドした後に、急峻な色の不連続が生じる。アルファ投影方法は、入力色の大きな変化にわたってアルファの大きな変化を生成するだけであり得るので、背景色を変更しても同様に明らかな不連続性は生じない。
セグメンテーション/マッティングが前景を背景として誤って分類した場合、それらのピクセルのアルファがゼロに設定され、それらの領域におけるRGBコントラストが消し去られ得る。アルファ-ホワイト変換は、これらの領域におけるコントラストを低下させ得るが、完全に消し去るわけではない。
2つの入力ピクセルがゼロでないコントラストを有する場合、同じことがアルファブレンドの結果にも当てはまる。特に、白背景に投じられた商品の影は常に保存され、白に近い商品は、背景が暗くされて商品の元の色(original color)を帯びるようになっても、背景に完全には溶け込まない。セグメンテーションおよびマッティングは領域の分類を目的としており、アルファ計算での色マッピングを保証するようには設計されていない。
本明細書に記載の方法の変換、すなわち、アルファ投影および透明度強制は、非常に高速でリソースが軽量なので、フルサイズのサムネイルを計算することができ、すなわち、それらの結果はより多様なUIで使用可能である。セグメンテーションおよびマッティングの方法ははるかに遅く、それらの実行時間は一般に画像ピクセル数に対して超線形的に長くなる。
アルファ-ホワイトアルゴリズムは、背景の白いピクセルを商品に属するピクセルと区別しようとしないので、その効果は、ビューポート色が白付近(たとえば、グレー235まで)に保たれている場合、全てのケースにおいてうまく機能する。うまく機能する場合、セグメンテーション技法およびマッティング技法は前景を不透明に維持するはずであり、背景置換色をさらに自由に選択することが可能になる(ただし、第1の点で述べたように、前景色と一致しないように注意する必要があり得る)。
動的な色変更の他の選択肢は、単に画像全体を均一に透明にして、各ピクセルに中間のアルファを割り当てることであろう。これは高速であり得るが、色をさらに全体的に歪ませる。具体的には、この単純な変換にアルファαを使用する場合、全てのアルファブレンドされた色チャンネルは(選択されたビューポート色に関係なく)サイズαの範囲に制限され、色空間全体のコントラストが低下する。また、「パディングされたエッジへの強制透明度」として説明する、同じパディングの不連続性が生じ、ただしこれは、原画像の境界の色がビューポート色と完全に一致する場合を除く(これはそもそも透明性を追加する目的に反し得る)。
対照的に、アルファ投影されたサムネイルは、一部の色にわたるコントラストしか犠牲にせず、ビューポート色が白からどれだけ離れているかのみに比例する。ビューポート色が白である場合、アルファブレンディングにより、原画像の大部分が再構築されるはずである(変換中およびアルファブレンディング中の量子化による、場合によっては小さな歪みを除く)。選択された投影半径およびビューポート色に関係なく、アルファ-ホワイトのサムネイルは、少なくとも1つの色チャンネルが0に設定された色を常に完全に保存し得る(すなわち、完全な不透明度を割り当てる)。これには、全ての虹色の最も彩度の高いバージョン、ならびにそれらと黒との間に存在し得る全ての色が含まれ得る。
ここで図1を参照すると、例示的な実装形態による画像管理システム120および関連する環境100のブロック図が示されている。1つまたは複数のユーザデバイス104をユーザが使用して様々なアクションを実行し、および/または様々なタイプのコンテンツにアクセスすることができ、その一部はネットワーク102(たとえば、インターネット、LAN、WANなど)を介して提供され得る。本明細書で使用する「ユーザ」または「エンティティ」は、ユーザデバイス104などを介してリソースまたはコンテンツアイテムとインタラクトする、ユーザデバイス104を操作する個人を指し得る。ユーザデバイス104は、ウェブサイト(たとえば、インターネットブラウザを使用)、メディアファイル、および/または他の任意のタイプのコンテンツにアクセスするために使用され得る。コンテンツ管理システム108は、リソース(たとえば、ウェブページ、アプリケーションなど)内のユーザに表示すべきコンテンツを選択し、リソース内の表示すべきコンテンツアイテムを、ネットワーク102を介してユーザデバイス104に提供するように構成され得る。コンテンツ管理システム108がアイテムを選択するコンテンツは、1つまたは複数のコンテンツプロバイダデバイス106を使用して、ネットワーク102を介して1つまたは複数のコンテンツプロバイダにより提供され得る。
一部の実装形態では、コンテンツ管理システム108は、ユーザデバイス104に表示されるコンテンツアイテムをコンテンツプロバイダから選択し得る。そのような実装形態では、コンテンツ管理システム108は、リソース(たとえば、ウェブページ、アプリケーションなど)の1つまたは複数のコンテンツインターフェースにおいて公開されるコンテンツを決定し得る。コンテンツ管理システム108は、サードパーティコンテンツプロバイダ間でコンテンツオークションを実施して、どのサードパーティコンテンツがユーザデバイス104に提供されるかを決定するように構成することができる。オークションの勝者は、入札額と、優良性スコア(すなわち、ユーザデバイス104のユーザがコンテンツをクリックする可能性の尺度)とに基づいて決定することができる。一部の実装形態では、コンテンツ管理システム108により、コンテンツプロバイダはコンテンツキャンペーンを作成することが可能になる。キャンペーンは任意数のパラメータ、たとえば、最小および最大入札額、目標入札額、ならびに/あるいは1つまたは複数の予算額(たとえば、日毎の予算、週毎の予算、合計予算など)を含むことができる。
画像管理システム120は、1つまたは複数のプロセッサ(たとえば、任意の汎用または専用プロセッサ)を含むことができ、1つまたは複数の一時的および/または非一時的記憶媒体および/またはメモリデバイス(たとえば、磁気ストレージ、光学ストレージ、フラッシュストレージ、RAMなどの任意のコンピュータ可読記憶媒体)を含むことができ、および/またはこれらに動作可能に結合することができる。様々な実装形態において、画像管理システム120およびコンテンツ管理システム108は、別々のシステムとして実装するか、または単一のシステム内に統合することができる(たとえば、コンテンツ管理システム108は、画像管理システム120の機能/能力の一部または全部を組み込むように構成することができる)。
画像管理システム120は、データベース130に通信可能かつ動作可能に結合することができる。画像管理システム120は、データベース130に情報を問い合わせ、データベース130に情報を記憶するように構成することができる。様々な実装形態において、データベース130は、様々な一時的および/または非一時的記憶媒体を含む。記憶媒体には、磁気ストレージ、光学ストレージ、フラッシュストレージ、RAMなどが含まれ得るが、これらに限定されない。データベース130および/または画像管理システム120は、様々なAPIを使用してデータベース関数を実行する(すなわち、データベース130に記憶されたデータを管理する)ことができる。APIは、SQL、ODBC、JDBCなどとすることができるが、これらに限定されない。
画像管理システム120は、環境100に示す任意のデバイスまたはシステムとネットワーク102を介して通信するように構成することができる。画像管理システム120は、ネットワーク102から情報を受信するように構成することができる。この情報には、閲覧履歴、Cookieログ、テレビ広告データ、印刷出版物広告データ、ラジオ広告データ、および/またはオンライン広告活動データが含まれ得る。画像管理システム120は、ユーザデバイス104がネットワーク102上で行ったインタラクションを受信および/または収集するように構成することができる。
画像ソース110は、画像(たとえば、画像132)を生成および/または記憶するシステムであってもよい。画像コントローラ122は、サードパーティシステム(たとえば、画像ソース110)から画像132を受信することができる。サードパーティシステムは、業者、製造業者、および/または他の任意のエンティティもしくはシステムであってもよい。一部の実施形態では、画像管理システム120自体が画像を生成し、および/または画像記憶システムから画像を取得する。画像は商品の画像であってもよい。一部の実施形態では、画像は、線図画像、たとえば、図表、地図、漫画、特定の画像被写体に焦点を合わせたストック写真などであってもよい。本明細書に記載の方法は、任意のタイプの画像に適用することができる。
画像管理システム120は、様々なメトリックまたは処理された画像に関する情報および/または通知をコンテンツプロバイダデバイス106に送信するように構成することができる。これにより、コンテンツプロバイダデバイス106のうちの1つのユーザは、画像管理システム120が決定および/または生成する様々なメトリックまたは画像をレビューすることが可能になり得る。さらに、画像管理システム120は、様々なメトリックを使用して、ユーザと連絡を取る適切なタイミング、または様々なメディアチャンネル(たとえば、テレビ広告、インターネット広告、ラジオ広告など)で消費する適切な金額(たとえば、最適な混合メディアの支出)を特定することができる。画像管理システム120は、コンテンツ管理システム108が特定の時間に特定のユーザと連絡を取るべきであり、および/またはコンテンツキャンペーンが特定のパラメータで実施されるべきであることを示すメッセージを、コンテンツ管理システム108および/またはコンテンツプロバイダデバイス106へ送信させることができる。これにより、コンテンツ管理システム108に、それに応じてコンテンツオークションを管理させ、および/または様々なシステム負荷を特定させることができる。
画像管理システム120は、画像管理システム120の様々な機能を実行するように構成される1つまたは複数のモジュール(すなわち、プロセッサにより実行可能なコンピュータ可読命令)、ならびに/あるいは回路(すなわち、ASIC、プロセッサとメモリとの組み合わせ、論理回路など)を含んでもよい。一部の実装形態では、モジュールは、アルファ投影回路124、強制透明度回路126、および画像ブレンド回路128を含むように図示した画像コントローラ122であってもよく、またはこれを含んでもよい。
画像コントローラ122は、データベース130と通信し、および/またはこれを管理するように構成することができる。画像コントローラ122は、データベース130に対して、画像および/または他の任意のデータを記憶および/または取得するように構成することができる。画像コントローラ122は、画像ソース110から様々な画像を受信し、受信した画像をデータベース130に記憶するように構成することができる。画像ソース110は、業者、アーティスト、写真家、および/または画像を有し得る他の任意のエンティティのためのシステム(たとえば、サーバ、ユーザデバイス、たとえば、ユーザデバイス104、画像データベース、および/または他の任意のコンピューティングまたはストレージデバイス)であってもよい。画像コントローラ122は、画像ソース110から受信した画像を画像132として記憶するように構成することができる。
画像132は、RGB画像またはRGBA画像であってもよい。アルファ投影回路124は、画像132のピクセルに対してアルファ値を作成し、および/または画像132のピクセルに対して既に存在するアルファチャンネル値を調整することにより、画像132にアルファ投影を実行するように構成することができる。アルファ投影回路124が実行するように構成され得るアルファ投影により、アルファ投影画像136が生成され得る。
アルファ投影画像136は、アルファ投影回路124によって実行されたアルファ投影により、アルファ投影画像136のピクセルに対して選択されたアルファチャンネル値を有し得る。強制透明度回路126は、アルファ投影画像136に基づいて強制透明度画像138を生成するように構成することができる。強制透明度回路126は、透明度関数と、アルファ投影画像136のエッジからの各ピクセルの距離とを使用して、アルファ投影画像136のピクセルのアルファチャンネル値を調整するように構成することができる。透明度関数は、アルファ投影画像136のピクセルの入力アルファチャンネル値を取得し、そのピクセルの出力アルファチャンネル値を生成することができ、これにより、アルファ投影画像136のピクセルのアルファチャンネル値を調整することができる。
画像ブレンド回路128は、ブレンド画像140を生成するように構成することができる。ブレンド画像140は、ユーザデバイス104に提供されるコンテンツアイテム、ショッピングウェブサイト上の商品リスト、および/またはユーザに表示される他の任意の画像であってもよく、および/またはこれらに含まれてもよい。画像ブレンド回路128は、背景画像である背景画像134の上に強制透明度画像138またはアルファ投影画像136を表示することにより、ブレンド画像140を生成するように構成することができる。背景画像134は、無地の色、たとえば、白、明るいグレー、および/または他の任意の色であってもよい。一部の実装形態では、背景画像134は、パターンまたは他の任意のタイプの背景画像であってもよい。画像ブレンド回路128は、アルファ投影画像136または強制透明度画像138を背景画像134とアルファブレンドすることにより、ブレンド画像140を生成するように構成することができる。
一部の実装形態では、ユーザデバイス104は画像コントローラ122を含むことができ、および/または画像コントローラ122の機能の一部および/または全部を実行することができる。ユーザデバイス104は、1つまたは複数のプロセッサ、1つまたは複数のメモリデバイス(たとえば、RAM、ROMなど)、ならびに/あるいは他の任意の非一時的または一時的記憶媒体を含む処理回路を含むことができる。ユーザデバイス104の処理回路は、画像コントローラ122、および/または画像コントローラ122の機能の一部を実装するように構成することができる。これに関して、画像コントローラ122の機能の一部および/または全部は、たとえば画像管理システム120によりクラウド内で実行するのではなく、ユーザデバイス104によりローカルに実行することができる。ユーザデバイス104は、図22を参照して説明するコンピューティングシステム2200の一実施形態であってもよく、および/またはこれを含んでもよい。
一部の実装形態では、画像管理システム120は、アルファ投影画像136および/または強制透明度画像138を生成する。画像管理システム120は、アルファ投影画像136および/または強制透明度画像138をネットワーク102経由でユーザデバイス104に送信するように構成することができる。画像管理システム120は、ショッピングウェブサイトインターフェースにおいて、および/または任意のタイプのウェブサイト上の画像として、コンテンツアイテムに関して表示される画像をユーザデバイス104に送信してもよい。ユーザデバイス104は、画像管理システム120から受信され得る背景画像および/または背景色、たとえば、ビューポート、コンテンツアイテムなど、および/または背景画像134との、受信した画像(たとえば、アルファ投影画像136および/または強制透明度画像138)のアルファブレンディングを実行するように構成することができる。
一例として、ユーザデバイス104は、ユーザデバイス104上で実行されるブラウザ内に、ウェブサイトおよび/またはウェブサイト上のコンテンツアイテムを表示し得る。ユーザデバイス104は、画像コントローラ122からネットワーク102を介してアルファ投影画像136および/または強制透明度画像138を受信し得る。ユーザデバイス104のウェブブラウザがウェブページおよび/またはウェブページに表示される画像を要求したことに応答して、ユーザデバイス104との間で画像が受信および/または送信され得る。ユーザデバイス104は、ユーザデバイス上で実行されるウェブブラウザが、ウェブブラウザに表示されるウェブページ上に透明画像をレンダリングすることに応答して、受信した透明画像を背景画像および/または背景色とアルファブレンドすることができる。
画像コントローラ122は、アルファブレンディングを実行して画像を一緒にブレンドするか、アルファ投影を実行するように構成することができる。具体的には、アルファ投影回路124は、アルファブレンド(たとえば、数2で定義されるアルファブレンド)を使用して、アルファ投影を実行し、アルファ投影画像136を生成するように構成することができる。さらに、画像ブレンド回路128は、アルファ投影画像136または強制透明度画像138を背景画像134とアルファブレンドすることにより、ブレンド画像140を生成するように構成することができる。
アルファブレンディングを使用して、透明なピクセルを他の色の上にレンダリングすることができる。RGB(不透明)背景色(B
r,B
g,B
b)上の前景RGBA色(F
r,F
g,F
b,F
a)について、アルファブレンドされた結果(R
r,R
g,R
b)は、
を重みとして使用した、2色のRGB空間線形補間とすることができる。たとえば、赤のチャンネルは(
数2)に等しくなる。
緑および青のチャンネルの値も同様とすることができ、数2によって決定することができる。本明細書に記載の方法に関して、透明色の赤、緑、青、アルファの(RGBA)表現が画像に使用されると仮定され得る。一部の実装形態では、各チャンネル値が0〜255の範囲(両端含む)の8ビット符号なし整数であると仮定することもでき、ここで、アルファ0は完全な透明を表し、アルファ255は完全な不透明を表す。しかしながら、本明細書に記載の方法では、他の数体系を使用することができる(たとえば、範囲[0.0,1.0]内の浮動小数点値)。
アルファチャンネルは、画像の合成に使用することができる。これを使用して、ピクセルの何割が、その色を決定する画像被写体によって占められているかを分類することができるので、大きな固体オブジェクトの場合、ほとんどの前景ピクセルは完全に不透明である必要があり、ほとんどの背景ピクセルは完全に透明である必要があり、中間の値は、ピクセルが前景と背景との両方に部分的に重なるオブジェクトの境界のみに存在する。透明度をより創造的に使用して「画像のフェザリング」技法のように、2つの画像をスムーズにブレンドすることもできる。
ここで図2を参照すると、例示的な実装形態による、画像にアルファ投影を実行し、アルファ投影画像に透明度を強制するための処理200が示されている。画像コントローラ122、具体的にはアルファ投影回路124、強制透明度回路126、および画像ブレンド回路128は、処理200を実行するように構成することができる。さらに、本明細書に記載の任意のコンピューティングデバイス、たとえば図22を参照して説明するコンピュータシステム2200は、処理200を実行するように構成することができる。本明細書に記載の方法、具体的には処理300の実行は、高速であり、入力ピクセル数に比例し得る。出力バッファに割り当てられるメモリは別として、本明細書に記載の方法のメモリの使用量は無視可能であり得る。
ステップ202において、画像コントローラ122は、1つまたは複数の画像を記憶する画像記憶システムから、画像、すなわち画像132を受信するように構成することができる。一部の実施形態では、画像コントローラ122は、サードパーティシステム、たとえば画像ソース110から画像132を受信する。一部の実施形態では、画像コントローラ122は、データベース130、ユーザデバイス104、および/またはコンテンツプロバイダデバイス106から画像132を取得する。
ステップ204において、アルファ投影回路124は、受信した画像132をアルファ投影するように構成することができる。受信した画像132をアルファ投影することにより、アルファ投影画像136が生成され得る。受信した画像132がアルファチャンネル値を有さないRGB画像である場合、画像をアルファ投影することは、受信した画像132の各ピクセルのアルファチャンネル値を決定することを含み得る。受信した画像132のピクセルの一部または全部が既にアルファチャンネル値を有する場合、アルファ投影回路124は、完全な不透明(たとえば、255)を下回るアルファチャンネル値を有する受信した画像132の任意のピクセルを白背景とアルファブレンドして、ステップ204を実行する前に、前記ピクセルの完全な不透明を確保することができる。
画像132のピクセルをアルファ投影することは、投影立体(Projection Solid)によってRGB色ボリュームを定義することを含み得、すなわち、色ボリュームは、RGB立方体内の投影立体のボリュームであり得る。画像132をアルファ投影することは、定義された色ボリューム内にある画像132の各ピクセルを投影立体の面に投影することと、投影された色をデフォルト色と(たとえば、白、デフォルトのグレーと)アルファブレンドすると、ピクセルの元の色が実現されるように、前記ピクセルのアルファチャンネル値を設定することと、をさらに含み得る。アルファ投影回路124によって実行できるアルファ投影は、図3の処理300および本明細書の他の箇所を参照してさらに詳細に説明する。
ステップ206において、強制透明度回路126は、ステップ204で生成されたアルファ投影画像136に透明度を強制して、強制透明度画像138を生成するように構成することができる。アルファ投影画像136に透明度を強制することは、第2の投影立体によって第2のRGB色ボリュームを定義することを含み得る。第2の色ボリューム内にあるアルファ投影画像136のピクセルは、強制透明度回路126によって選択することができる。
選択されたピクセルは、強制透明度回路126により強制透明度関数によって、アルファチャンネル値が調整され得る。強制透明度関数は、選択されたアルファチャンネル値への調整を定義することができる。強制透明度関数は、選択された画像のどのアルファチャンネル値が調整されるか、およびそれらが調整される量を定義する強制閾値および保存閾値を含むことができる。透明度を強制することは、図4の処理400および本明細書の他の箇所を参照してさらに詳細に説明する。強制透明度関数は、図14のチャート1400および本明細書の他の箇所を参照して説明する。
ステップ208において、画像ブレンド回路128は、コンテンツアイテム、ウェブサイトバナー、オンラインショッピングインターフェース、および/または他の任意のインターフェースに表示するためのブレンド画像140を生成するように構成することができる。画像ブレンド回路128は、強制透明度画像138(またはアルファ投影画像136)を前景画像とし、背景画像134を背景として、ブレンド画像140を生成するように構成することができる。画像ブレンド回路128は、強制透明度画像138と背景画像134とをアルファブレンドすることにより、ブレンド画像140を生成するように構成することができる。一部の実施形態では、背景画像134は、強制透明度画像138よりも大きい寸法を有する(たとえば、図5に図示)。画像ブレンド回路128は、画像を合成する前に、強制透明度画像138を背景画像134の中心に配置するように構成することができる。
ステップ210において、画像コントローラ122は、ブレンド画像140をコンテンツアイテム内またはウェブサイト上に表示させるように構成することができる。たとえば、ブレンド画像140は、コンテンツデータベース107のコンテンツアイテム112に含めることができる。ブレンド画像140を有するこれらのコンテンツアイテム112は、ユーザデバイス104に提供することができる。一部の実施形態では、ブレンド画像140は、ショッピングウェブサイトなどのウェブサイトに表示することができる。
ここで図3を参照すると、例示的な実装形態による、アルファ投影の処理をより詳細に記述した処理300が示されている。処理300は、図2を参照して説明した処理200のステップ204を実行するための処理であり得る。画像コントローラ122、具体的にはアルファ投影回路124は、処理300を実行するように構成することができる。さらに、本明細書に記載の任意のコンピューティングデバイス、たとえばコンピューティングシステム2200は、処理300を実行するように構成することができる。処理300のステップ302において、赤、緑、青(RGB)色立方体における第1の色ボリュームは、第1の投影立体に基づく。投影立体は、投影半径によって定義される立体、たとえば、球体、直方体、四面体、および/または他の任意の形状であってもよい。これらの投影立体の例は、図19、図20、および図21において見ることができる。投影立体は投影原点色(projection origin color)に基づいて定義されてもよく、そこから投影半径が投影される。
ステップ304において、第1の色ボリューム内にある画像のピクセルは、第1の投影立体に基づいて元の色から第2の色に投影される。投影は、投影色原点から元の色までの線を生成することによって実行することができる。投影立体の面、すなわち「投影面」と交差する線を投影することにより、第2の色が定義され得る。これは図6を参照してさらに詳細に説明する。
一部の実装形態では、投影立体は、接続された赤、緑、および青(RGB)点のセットである。この点のセットでは、投影立体内の任意の点と、背景色セット内の任意の点との間に直線の線分を引くことができる。背景色セットは、投影原点色を含んでもよく、投影立体の接続されたRGB点のサブセットであってもよい。投影立体の接続されたRGB点のセットは、背景色セットのスーパーセット(superset)であってもよい。さらに、前記線分は、接続されたRGB点のセットの色のみを含んでもよい。一部の実装形態では、投影立体は、立方体、球体、直方体、または四面体などの3次元立体である。投影立体は、投影原点色(たとえば、白)から伸びる投影半径によって定義され得る。投影半径は、投影立体の投影ボリュームおよび投影面を定義することができる。
アルファ投影回路124は、投影ピクセルのアルファチャンネル値を選択および/または調整(置換)するように構成することができる。アルファ投影回路124は、第2の色が、選択された背景色(たとえば、白)、すなわち投影原点色とアルファブレンドされると、元の色になるアルファチャンネル値を決定することにより、投影ピクセルのアルファチャンネル値を決定するように構成することができる。
本明細書に記載のように、軸に沿った直方体内の離散的なRGB点のセットと、連続空間内の実際の直方体との間の明らかな類似性に暗黙的に依存している場合がある。前記連続空間では、ボリュームの「面」が何であるか、およびその面を「光線」と交差させることが何を意味するかが明確であり得る。
そのような「投影」を定義する複数の方法が存在し得る。たとえば、投影ボリュームに属するRGBグリッド点と、そうでないものとを分離する連続面を定義する。そのようにするためのいくつかの技法が存在し、たとえば、「マーチングキューブ」メッシュアルゴリズムなどがある。それが行われた後、連続空間での光線と面との交点の定義を信頼することができる。
他の例は、あるRGB点から他のRGB点への光線を離散化して、光線自体がRGB点で構成されるようにすることとすることができる。(離散化は、コンピュータグラフィックスにおいて知られている任意数の線描画アルゴリズムを介して実行することができる。)次に、この離散化光線に沿った、投影ボリュームの「面」と交差する点を決定することができる。繰り返すが、これを行うには多くの方法があり、たとえば、ソースからの距離がある距離閾値を下回る光線上の最後の点、投影ボリュームに属する光線上の最後の点などがある。
所与の投影ボリュームおよび投影源の投影面は単に、投影ボリューム内の任意の入力に対して投影関数により出力できる全ての点のセットであり得ることに留意されたい(ただし、RGB投影が未定義であるが、常に完全に透明なために問題にならない投影源を除く)。
ステップ306において、アルファ投影回路124は、投影ピクセルのアルファチャンネル値を選択するように構成することができる。アルファ投影回路124は、投影原点色とブレンドされた第2の色が元の色になるアルファチャンネル値を決定することにより、投影ピクセルのそれぞれに対して適切なアルファチャンネル値を決定するように構成することができる。投影原点色は、完全な透明度が望まれる色であり得る。この理由で、画像の任意のピクセルは、投影原点色である場合に、完全な透明度が割り当てられ得る。一部の実装形態では、投影原点色は白または明るいグレーである。しかしながら、投影原点色は任意の色にすることができる。
ここで図4を参照すると、例示的な実装形態による、透明度を強制する処理をより詳細に記述した処理400が示されている。処理400は、図2を参照して説明した処理200のステップ206を実行する処理であり得る。画像コントローラ122、具体的には強制透明度回路126は、処理400を実行するように構成することができる。さらに、本明細書に記載の任意のコンピューティングデバイス、たとえば、図22を参照して説明するコンピューティングシステム2200は、処理400を実行するように構成することができる。
ステップ402において、強制透明度回路126は、第2の投影立体に基づいてRGB色立方体における第2の色ボリュームを定義するように構成することができる。第2の色ボリュームおよび/または第2の投影立体は、第1の色ボリュームおよび第1の投影立体と同一または類似であってもよい。ステップ404において、強制透明度回路126は、第2の色ボリューム内にある画像(たとえば、画像132および/またはアルファ投影画像136)のピクセルを選択するように構成することができる。
ステップ406において、強制透明度回路126は、画像の選択されたピクセルのアルファチャンネル値を調整するように構成することができる。透明度回路126は、透明度関数を使用して画像のアルファチャンネル値を調整するように構成することができる。透明度関数は、選択されたピクセルの各入力アルファチャンネル値に対する出力アルファチャンネル値を定義する1つまたは複数の関数であってもよい。透明度関数は、図14にグラフで示している。透明度関数は、1つまたは複数の非減少関数であってもよい。透明度関数はさらに、1つまたは複数の線形関数または非線形関数であってもよい。透明度関数は、強制閾値および保存閾値によって定義されてもよい。強制閾値および保存閾値は、入力アルファチャンネル値であってもよい。選択されたピクセルの入力アルファチャンネル値が強制閾値を下回る場合、第1の透明度関数がピクセルに適用されてもよい。選択されたピクセルの入力アルファチャンネル値が強制閾値および保存閾値の間にある場合、第2の透明度関数がピクセルに適用されてもよい。一方、選択されたアルファチャンネル値の入力アルファチャンネル値が保存閾値を上回る場合、アルファチャンネル値は全く変更されなくてもよい。
強制透明度関数は、画像の選択されたピクセルの、画像のエッジからの距離を使用してもよい。画像のエッジに近いピクセルは、画像のエッジから遠いピクセルよりも積極的に調整されてもよい。これは図14に示すように複数の線によって定義され、これらの線は恒等変換に近づく(すなわち、画像のエッジから特定の距離において入力は出力に等しくなる)。
透明度関数は1つまたは複数の関数であってもよく、たとえば、透明度関数は区分的関数であってもよい。関数は線形でも非線形でもよく、関数は任意の次数であってよい。関数は非減少関数であってもよい。たとえば、入力アルファチャンネル値および距離入力に関して、関数は、増加するアルファ入力値および増加する距離に対して、増加するアルファ値を出力してもよい。さらに、透明度関数の出力は、ゼロと入力アルファチャンネル値との間にあってもよい。
透明度関数は、保存閾値および強制閾値に基づいて定義することができる。透明度関数の出力は、保存閾値および強制閾値に基づいてもよい。保存閾値および強制閾値は、入力アルファ値が強制閾値を下回るか、強制閾値と保存閾値との間であるか、または保存閾値より大きいかに基づいて、入力ピクセルアルファ値の特定の処理を定義してもよい。保存閾値は、強制閾値より大きいアルファチャンネル値であってもよい。さらに、入力アルファチャンネル値が強制閾値と保存閾値の間にある場合、アルファチャンネル値は、強制閾値未満の入力アルファチャンネル値よりも高いアルファチャンネル値に調整されてもよい。さらに、透明度関数は、保存閾値よりも大きいアルファチャンネル値を調整しなくてもよい。
一部の実装形態では、透明度関数は区分的線形関数であり、すなわち、複数の線形透明度関数である。線形関数は、特定の範囲の入力アルファ値に適用されてもよい。たとえば、第1の線形関数を使用して、ゼロから強制閾値までの範囲の入力値のアルファチャンネル値を調整してもよい。第2の線形関数は、強制閾値と保存閾値との間にあるアルファチャンネル値に適用されてもよい。
ここで図5を参照すると、画像132のうちの1つまたは複数が無地の白色の背景画像134上に表示されたコンテンツアイテム500(たとえば、コンテンツアイテム112と同一および/または類似のコンテンツアイテム)が表示されている。商品画像502、504、および506は、背景画像134上に表示される。図5は、白のカード上に3つの例示的な画像を有するコンテンツユニットの一例を示している。図5の左の画像、すなわち商品画像506は、理想的には全ての画像に望み得るタイプのグレー背景を有する画像である。図1の中央の画像、すなわち商品画像502は、上述の第1の問題を示す白背景の画像である。図1の右の画像、すなわち商品画像504は、上述の第2の問題を示す、背景が完全に白でない非矩形画像である。技術的には、両方の問題が、透明度を導入せずに、問題を解決可能であり得る。静的な色の再マッピングを行い、背景色のパディングをもう少し追加することはできるが、本明細書に記載の方法により提供される透明な背景は、多くの冗長ファイルを記憶することなく(これは、多くのショッピングウェブサイトの規模では、所望の背景ごとに数百TBのファイルを意味し得る)、複数の背景のグレーの陰影を自由に試すことができる。
再び図2、図3、および図4を参照すると、本明細書に記載する方法は、第1段階の方法および第2段階の方法として実施することができる。第1段階はアルファ投影段階(たとえば、処理300)であり、第2段階は画像に透明度を強制するための段階(たとえば、処理400)である。第1段階は単一のパラメータ、すなわち、範囲[1,255]内の「投影半径」に依存することができ、すなわち、任意のチャンネル値>0である。辺の長さがその半径に等しく、最大角(max corner)が白にあるRGB立方体において、その立方体内の全ての色が、白から離れて反対側の立方体の面の1つに投影される。3つの対向する立方体の面をまとめて投影面と呼ぶ場合があり、その立方体の内部を投影ボリュームあるいは色ボリュームと呼ぶ場合がある。
投影面に投影される色ボリューム内の各RGB色にアルファ値を割り当てて、白背景上に表示された場合に、アルファブレンディングによりおおよそ元のRGB色となるようにすることができる。図6〜図11は、(たとえば、青が飽和している平面における)赤座標および緑座標のみの投影を示している(たとえば、緑はz軸上にあり、Rはy軸上にあり、Bはx軸上にあり得る)。しかしながら、本明細書の方法は3次元RGB色立方体に適用され、本明細書に記載の2次元の例に限定されないことを理解されたい。
図6を参照すると、チャート600は、例示的な実装形態による、立方体内部の点がアルファ投影によって、白から離れて、元の色602から第1の投影立体の面606上の第2の色604に投影される方法を示している。図6において、第1の色ボリュームは、第1の投影立体によって定義される。図6において、色ボリュームおよび投影立体は、投影半径608の値によって定義される。投影立体および投影半径によって定義される第1の色ボリューム内にある全ての色は、投影立体の投影面に投影され得る。図6では、2つの投影面610および606のみが、緑(投影面610)および青(投影面606)についてラベル付けされているが、緑についての第3の投影面が存在することを理解されたい。
図7を参照すると、チャート700は、例示的な実装形態による、投影後に同じアルファチャンネル値を受け取り得る事前投影点の線を示しており、より白い線はより低いアルファチャンネル値に対応し、より黒い線はより高いアルファチャンネル値に対応する。色が白、すなわち立方体の投影原点色に近いほど、割り当てられ得るアルファ値が低くなる(すなわち、より透明になる)ことに留意されたい。極端な場合、投影された第1の色ボリュームの外側の全ての色は、アルファチャンネル値255の元のRGB値のままになり、白はアルファチャンネル値0の色に再マッピングされる。白が投影されるRGB値は、完全に透明になり得るので、視覚的に問題にならない場合があるが、投影面の反対側の角に投影すると圧縮に効果的である場合があり、全てのアルファチャンネルを255から投影半径を引いた値に設定することができ、他の投影された全てのRGB値は、値が同じ少なくとも1つのチャンネルを有することを保証することができる。
ここで図8〜図9参照すると、チャート800および900は、例示的な実装形態による、背景色とアルファブレンドされたアルファ投影画像の色マッピングが示されている。投影原点色802は、画像をアルファ投影するために使用される原点色であり得、完全な透明度を受け取る色であり得る。図9において、マッピングされた色804は、投影原点色802がアルファブレンディング後にマッピングされる色を示す。この補間された透明度の結果として、背景色(たとえば、無地色の場合は背景画像134の色)が白から離れるにつれて、投影された立方体の元々は白の角がそれに応じて移動し、図8〜図9に示すように投影された立方体のボリュームはスムーズに、新たな白の角位置を含むように押しつぶされる。
ここで図10〜図11を参照すると、チャート1000および1100は、背景画像とアルファブレンドされたアルファ投影画像の色マッピングの結果を示しており、アルファ投影画像は異なる投影半径によってアルファ投影されている。図10では、第1の投影半径1002が使用され、投影半径は255未満である。図11では、使用される投影半径は、図10よりも大きく、255である。第1の投影立体の投影半径の選択は、色の保存とコントラストの保存とをトレードオフさせ、これは図10〜図11に概略的に示している。ビューポート色が暗くなるにつれて、半径を小さくすると、より少ない色が変化するが、投影された色の間のコントラストがより大きく失われる(白の角の所与のシフトに対して、投影された立方体をより小さくするには、さらに押しつぶす必要がある)。半径を大きくすると、白位置の任意の変化がより広範囲の色に分散されることになる(したがって、コントラストがよりよく保存される)が、(明らかに)より多くの色がシフトし、明るい色がより急激に暗くなる(赤で図示した内向きの矢印の相対的な大きさを確認されたい)。
図12を参照すると、画像1200、1202、および1204は、異なる投影半径によるアルファ投影の結果を示している。図12では、例示的な実装形態による、半径を大きくすると、白位置の任意の変化がより広範囲の色に分散されることになるが、より多くの色がシフトし、明るい色がより急激に暗くなるという結果を示している。原画像、すなわち商品画像1200は左側にあり、中央の画像、すなわち商品画像1202は投影半径40で作成されており、右側の画像、すなわち商品画像1204は半径255で作成されている。中央の画像は色を保存するより良い仕事をしている(肌および白のトップスが右の画像では他の2つのいずれよりも著しく暗い)が、右の画像は元のコントラストを保存するより良い仕事をしていることに留意されたい。
既に透明なピクセルを有する入力画像をサポートするために、上記の変換を適用する前に、アルファ<255(最大)のあらゆる入力ピクセルを白背景とアルファブレンドして、不透明なRGB色を作成することができる。高いアルファを有するRGBA入力ピクセルは、このアルファブレンディング後に白に近いRGB色にマッピングされ得るので、アルファ-ホワイト変換後に高いアルファ値になることに留意されたい。
画像のアスペクト比がビューポートのアスペクト比と完全に一致しない場合、画像をスケーリングして、「長すぎる」軸が正確にビューポートに収まるようにすることができるが、他の軸はビューポートピクセルによってパディングされる必要がある。これが発生し、パディングされたエッジが完全に透明(すなわち、アルファ0)でないことがある場合、閲覧者は画像とビューポートピクセルとの間の遷移を見ることができ、「フルブリード」画像の錯覚が崩れる。この影響は図13の画像に示している。
ここで図13を参照すると、例示的な実装形態による、パディングされたエッジが完全に透明でないことの影響を示すための商品画像1300、1302、および1304が示されている。図13では、白背景を有する原画像、すなわち商品画像1300を左に示している。白を投影の原点とするアルファ投影(アルファ-ホワイト投影)のみの効果を中央の商品画像1302に示している。この理由で、図2および図4の処理200および400を参照して説明したパディングされたエッジへの強制透明度を実行することができ、結果の一例を右側の画像、すなわち商品画像1304に示している。
パディングされたエッジの近くにおいて、アルファチャンネル値をより積極的に0にプッシュすることができ、図13の右に示す画像、すなわち商品画像1304のような画像になり、これにより画像境界の場所がわかりにくくなる。パディングされたエッジに沿った全てのピクセルが完全な透明度に強制されるわけではなく、その理由は、一部の高アルファピクセルは、保存すべき前景オブジェクトに正当に属し得るためである。代わりに、(投影半径に類似した)「透明半径」が、ゼロのアルファチャンネル値に強制すべきである、色原点(たとえば、白)付近の色の第2の色ボリュームを定義する。透明度強制(処理400)は、アルファ-ホワイト投影(処理300)の後に行われるアルファ調整として画像に実施することができる。
図14を参照すると、例示的な実装形態による透明度関数が、チャート1400によって示されている。チャート1400では、強制閾値1402および保存閾値1404を示している。透明半径に位置する全ての色に、投影により同じアルファを割り当てることができ、これは強制閾値1402と呼ぶ場合があり、その理由は、その値を下回る全てのアルファが長い画像エッジに沿ってゼロに強制されるためである。色の不透明度の突然の不連続性を回避するために、第2のより高い閾値、すなわち、保存閾値1404を定義することができ、これを上回るとアルファ値は変更されず、それら2つの閾値間でアルファは線形にスケーリングされる。図14の下部(黒色)の区分的曲線は、このアルファ変換を示している。強制透明度がパディングされたエッジから遠ざかるにつれて、強制アルファ閾値を徐々に高いアルファにマッピングすることにより、強制透明度の効果を縮小することができる。これは、図14の徐々に明るくなる曲線のシーケンスによって示しており、最も明るいグレーの恒等変換で終わる。
ショッピングウェブサイトに使用されるビューポートは主に正方形であり得るので、実稼働環境では、非正方形画像の長いエッジのみにこの変換を適用することができる。(異なるアスペクト比のビューポートが好まれる場合、そのアスペクト比に比べて長すぎるエッジを変換することができる。)画像は大抵、1つの軸をパディングすれば済むほど十分な大きさであり得るが、そうでない場合、この変換を4つ全てのエッジに適用してもよい(ただし、モデルの顔および脚が画像の境界によって切り取られている上記の例のように、被写体が短い境界と交差する場合、より頻繁にアーティファクトが生じ得る)。
図14に示す強制透明度関数は、区分的に線形であってもよいが、同様の効果を有し得る他の非線形関数を使用することができる。たとえば、パディングされたエッジにおいて、強制閾値と保存閾値との間の関数は、(強制閾値,0)を(保存閾値,保存閾値)に接続する任意の非減少関数とすることができる。その点は、ゼロに強制される入力アルファと、完全に保存される入力アルファとの間でスムーズに遷移し得る。さらに、パディングされたエッジから距離dにおいて、入力アルファから出力アルファへの関数(aout=F(ain,d))は、出力が0とainとの間にあって、ainとdとの両方に対して非減少である関数とすることができる。
上記のように、パディングされたエッジ上のピクセルが多すぎて透明にすることができない場合、画像はフルブリード(full-bleed)画像のように見えない場合がある。そのため、アルファ0のパディングされたエッジのピクセルの割合が閾値より高くない場合、変換は失敗するように設定することができる。正方形のビューポートを想定すると、正方形の画像が完全に透明なエッジピクセルを有することはあまり問題にならない場合があり、その理由は、画像がビューポートを完全に埋め、ブレンドする必要のあるビューポートのパディングが存在しないためである。しかしながら、正方形のエッジ上に白に近いピクセルがほとんど/全くない場合、アルファ-ホワイト変換を実行しないほうがよい場合があり、画像自体によって、ビューポートと、それが表示される白いカードとの間に必要なコントラストが提供される。そのため、この方法は、白に近いピクセルが少なすぎる場合に、変換を失敗としてマークすることもできる(「少なすぎる」および「白に近い」のユーザ指定値)。
図1〜図11を全体的に参照すると、本明細書に記載の方法は、白背景の置き換えを対象とし得るが、これと同じアイデアの変形例を使用して、他の色を置き換え、わずかに異なる投影動作を実装することができる。白は図6〜図11に示した1つの投影源であり、完全な透明にマッピングされる色となるが、これは、その目的のために他の色を使用するように一般化することができる。
白の代わりに、投影源(投影原点色)をRGB点s=(Sr,Sg,Sb)とする。投影ボリュームを、sからの座標ごとの差が全て投影半径(すなわち、L∞-ball)未満である全てのRGB点のセットとする。これは2つの立方体(sの周りのL∞-ballおよびRGB立方体自体)の空でない共通部分であるので、結果のボリュームは直方体になるはずであるということに留意されたい。したがって、その境界は6つの長方形の面で構成される。
所与の面Fについて、sがその上に現れない場合、sから始めて点XをFに投影することの意味は明らかであり、sからxへの光線は、単一の点でFと交差するか、または全く交差しない。しかしながら、sがFに属する場合、前述の光線とFとの交点は点の線分全体となるので、投影は同じくF上の他のXに対して一意に定義されなくなる。この曖昧さを避けたい場合があり、また、境界点と内部点との間で空間的に一貫したアルファの割り当てを維持したい場合がある(後者は全て、属していない角柱の面に投影される)。両方の理由により、投影面は、属さない少なくとも1つの面に現れる、投影色ボリュームの境界上の点に制限され得る。
本明細書に記載のアルファ-ホワイト投影方法(ソース色が白であるアルファ投影)は、アルファ投影の一実装形態であり得ることに留意されたい。sが白色点の場合、投影ボリュームは、その面のうちの3つがRGB立方体の最大面に位置するように、クリップされる。白色点もこれらの投影ボリュームの面のうちの3つの上に位置するので、投影面は他の3つの面上の点で構成される。また、sがRGB立方体の内部または境界上にある場合、投影およびそれに続くアルファブレンディングは、わずかに異なって動作し得ることに留意されたい。
ここで図15〜図16を参照すると、チャート1500および1600は、例示的な実装形態による、RGB立方体のエッジ上に位置する非白色投影原点色を使用したアルファ投影およびアルファブレンディングを示す。マーカー1502によってマークされた投影原点色sは、RGB立方体のエッジ上に位置するように図示している。1504によってマークされた投影半径は投影立体を定義するが、投影立体はRGB立方体内に完全に含まれない。sが境界上にある場合、ビューポート色がその境界を離れると、アルファブレンディングによって二度と再構築されない一部の色(s自体を含む)が存在することになる。(この理由で、白を投影原点色とするアルファ投影によって、ビューポート色が白でない限り、アルファブレンドされた画像の境界の色が白にならないことが保証される。)
ここで図17〜図18を参照すると、チャート1700および1800は、例示的な実装形態による、RGB立方体内に存在する非白色投影原点色を使用したアルファ投影およびアルファブレンディングを示している。マーカー1702によってマークされた投影原点色sは、RGB立方体内に存在するように図示している。投影半径1704は投影立体を定義し、これは図15および図16と同様に、RGB立方体内に完全に含まれない。図17〜図18に示すように、その色がRGB立方体の内部にある場合、投影およびアルファブレンディングは、単に投影ボリューム内の色の再分配を表す。アルファブレンドされた結果から欠落することが保証されている色は存在しない。そのため、たとえば中間のグレーを選択した場合、アルファブレンディング後にグレーの濃淡が境界に現れないことは保証できない(これが問題になり得るのは、この変換を計算して、画像とその特定のグレーの濃淡とのコントラストを生成する場合である)。
ここで図19〜図21を参照すると、チャート1900、2000、および2100は、例示的な実装形態による、3つの異なる投影立体を示している。図19では、投影立体は立方体である。図20では、投影立体は球体であり、図21では、投影立体は四面体である。本明細書で定義する投影面は、有益な特性を有し得る。RGB空間内の点は、その面に属し得る。整数の投影半径の場合、RGB点は、投影ボリュームの内部、投影面上、または投影ボリュームの外部に一義的に存在し得る(それぞれ、Sからの最大の単一チャンネルの差が投影半径より小さいか、等しいか、または大きいかに依存する)。任意のRGB点の、白から離れた、その面への投影を定義することができる。技術的には、離散的なRGB空間では、その「面」は離散点のセットであり得るが、離散トポロジの詳細を掘り下げなくても、それらの点を結ぶ直感的な連続面を定義することができる。次いで、任意のRGB点をその上に投影し、最も近い離散点に再マッピングすることができる。
白に近い/投影面に近すぎないビューポート色の場合、2つのピクセルは、原画像において非常に似た色でない限り、同じ色にアルファブレンドすることはできない。これは、投影面全体が、白と、関心対象の全てのビューポート色との両方から「見える」(自己遮蔽しない)という事実の結果であり得る。面上のある点が、面上の他の(遠い)点へのビューポート色の視界を遮る可能性がある場合、これは、それら3つの点がほぼ同一直線上にあり、アルファブレンディング(これは線形補間である)によって、それらの遠い面の点を、特定のアルファのペアに対して同じ色にマッピングできることを意味する。
したがって、本明細書で使用するL∞-sphereの投影面は、これらの特性を有するという点で一意ではない場合がある。可能性のある面の多様性を示すために、図19〜図21は白の周りの「球体」を示しており、ここで「球体」とは、それぞれの場合の距離を定義する異なるLノルム:L∞(図19)、L2(図20)、およびL1(図21)を使用した、白から同じ距離にある点のセットを指す。投影面もこれらの球体に限定されない。投影ボリュームとしても使用できるソースを含む任意数の接続されたRGB点セットが存在する。
繰り返すが、最初に説明したアルファ-ホワイトアルゴリズムは、この一般的なアルゴリズムの特殊なケースであって、投影源は白であり、投影ボリュームはL∞-ballとRGB立方体との共通部分であり、投影は近くのRGBグリッド点にスナップする前にユークリッド3D空間で行われることに留意されたい。
一例として、Bを、投影原点色を含む必要がある、新たな背景色として使用したい可能性のある色のセットとすることによって、投影立体を定義することができる。有効な投影立体V(これはBのスーパーセットであり得る)は、Vの任意の点vとBの任意の点bとの間に直線の線分を引くことができ、その線分全体がVの点で構成されるような、接続されたRGB点の任意のセットとすることができる。任意のそのような立体について、投影源から離れる投影動作を明確に定義することが可能であり、結果の画像の、Bの任意の背景色とのアルファブレンディングは正常に動作する。離散化された色空間における「直線」の意味と、投影動作を定義できる方法とについては、以下でさらに詳細に説明する。
図22は、たとえば、本明細書に記載のシステムおよび方法を実装するために使用できるコンピュータシステム2200の図解を示している。たとえば、例示的なユーザデバイス、例示的なコンテンツ管理システム、例示的なコンテンツプロバイダデバイス、例示的な分析システム、および/または本開示に記載の様々な他の例示的なシステムを実装するためのものである。コンピューティングシステム2200は、情報を伝達するためのバス2205または他の通信コンポーネントと、情報を処理するための、バス2205に結合されたプロセッサ2210とを含む。コンピューティングシステム2200は、情報と、プロセッサ2210によって実行される命令とを記憶するための、バス2205に結合されたメインメモリ2215、たとえば、ランダムアクセスメモリ(RAM)または他の動的記憶デバイスをさらに含む。メインメモリ2215は、プロセッサ2210による命令の実行中に位置情報、一時変数、または他の中間情報を記憶するために使用することもできる。コンピューティングシステム2200は、静的情報およびプロセッサ2210用の命令を記憶するための、バス2205に結合された読み取り専用メモリ(ROM)2210または他の静的記憶デバイスをさらに含んでもよい。情報および命令を永続的に記憶するためのストレージデバイス2225、たとえば、ソリッドステートデバイス、磁気ディスク、または光ディスクが、バス2205に結合される。
コンピューティングシステム2200は、ユーザに情報を表示するためのディスプレイ2235、たとえば、液晶ディスプレイまたはアクティブマトリックスディスプレイに、バス2205を介して結合されてもよい。情報およびコマンド選択をプロセッサ2210に伝達するための入力デバイス2230、たとえば、英数字および他のキーを含むキーボードがバス2205に結合されてもよい。他の実装形態では、入力デバイス2230はタッチスクリーンディスプレイ2235を有する。入力デバイス2230は、方向情報およびコマンド選択をプロセッサ2210に伝達し、ディスプレイ2235上のカーソル移動を制御するためのカーソルコントロール、たとえば、マウス、トラックボール、またはカーソル方向キーを含むことができる。
一部の実装形態では、コンピューティングシステム2200は通信アダプタ2240、たとえば、ネットワーキングアダプタを含んでもよい。通信アダプタ2240は、バス2205に結合されてもよく、コンピューティングもしくは通信ネットワーク2245、および/または他のコンピューティングシステムとの通信を可能にするように構成されてもよい。様々な実装形態において、任意のタイプのネットワーク構成、たとえば、有線(たとえば、Ethernet)、無線(たとえば、WiFi、Bluetooth(登録商標)など)、事前構成されたもの、アドホック、LAN、WANなどが、通信アダプタ2240を使用して実現され得る。
様々な実装形態によれば、本明細書に記載の例示的な実装形態を実現する処理は、プロセッサ2210がメインメモリ2215に含まれる命令の配列を実行したことに応答して、コンピューティングシステム2200により実現することができる。そのような命令は、ストレージデバイス2225などの他のコンピュータ可読媒体からメインメモリ2215に読み込むことができる。メインメモリ2215に含まれる命令の配列を実行することにより、コンピューティングシステム2200は、本明細書に記載の例示的な処理を実行する。マルチプロセッシング構成の1つまたは複数のプロセッサを使用して、メインメモリ2215に含まれる命令を実行してもよい。代替の実装形態では、ソフトウェア命令の代わりに、またはこれと組み合わせてハードワイヤード回路を使用して、例示的な実装形態を実装してもよい。このように、実装形態はハードウェア回路とソフトウェアとのいかなる特定の組み合わせにも限定されない。
例示的な処理システムを図22に記載しているが、本明細書に記載の主題および機能的動作の実装形態は、他のタイプのデジタル電子回路を使用して、または本明細書で開示した構造およびそれらの構造上の均等物を含むコンピュータソフトウェア、ファームウェア、もしくはハードウェアで、あるいはそれらの1つまたは複数の組み合わせによって実施することができる。
本明細書に記載の主題および動作の実装形態は、デジタル電子回路を使用して、または本明細書で開示した構造およびそれらの構造上の均等物を含む有形媒体上に具体化されたコンピュータソフトウェア、ファームウェア、もしくはハードウェアで、あるいはそれらの1つまたは複数の組み合わせによって実施することができる。本明細書に記載の主題の実装形態は、データ処理装置により実行するための、またはその動作を制御するための、1つまたは複数のコンピュータ記憶媒体上にエンコードされた1つまたは複数のコンピュータプログラム、すなわち、コンピュータプログラム命令の1つまたは複数のモジュールとして実装することができる。代替的または追加的に、プログラム命令は、データ処理装置により実行するために適切な受信装置に送信される情報をエンコードするために生成される人工的に生成された伝播信号、たとえば、機械生成の電気、光、または電磁信号にエンコードすることができる。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムまたはシリアルアクセスメモリアレイまたはデバイス、あるいはそれらの1つまたは複数の組み合わせとすることができ、またはこれらに含めることができる。さらに、コンピュータ記憶媒体は伝播信号ではないが、コンピュータ記憶媒体は、人工的に生成された伝播信号にエンコードされたコンピュータプログラム命令のソースまたは宛先とすることができる。また、コンピュータ記憶媒体は、1つまたは複数の別個のコンポーネントまたは媒体(たとえば、複数のCD、ディスク、または他の記憶デバイス)とすることができ、またはこれらに含めることができる。したがって、コンピュータ記憶媒体は有形かつ非一時的である。
本明細書に記載の動作は、1つまたは複数のコンピュータ可読記憶デバイスに記憶されたデータ、または他のソースから受信したデータに対して、データ処理装置によって実行される動作として実装することができる。
「データ処理装置」または「コンピューティングデバイス」という用語は、例として、プログラム可能プロセッサ、コンピュータ、システムオンチップ、もしくは複数のもの、あるいはこれらの組み合わせを含む、データを処理するためのあらゆる種類の装置、デバイス、および機械を包含する。装置は専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)、またはASIC(特定用途向け集積回路)を含むことができる。装置は、ハードウェアに加えて、当該コンピュータプログラムの実行環境を生成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、またはそれらの1つまたは複数の組み合わせを構成するコードを含むこともできる。装置および実行環境は、様々な異なるコンピューティングモデルインフラストラクチャ、たとえば、ウェブサービス、分散コンピューティングおよびグリッドコンピューティングインフラストラクチャなどを実現することができる。
コンピュータプログラム(別名、プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコード)は、コンパイル型またはインタプリタ型言語、宣言型または手続き型言語を含む、任意の形式のプログラミング言語で記述することができ、スタンドアロンプログラム、またはモジュール、コンポーネント、サブルーチン、オブジェクト、またはコンピューティング環境での使用に適した他のユニットを含む任意の形式で展開することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応してもよいが、必須ではない。プログラムは、他のプログラムまたはデータを保持するファイルの一部(たとえば、マークアップ言語ドキュメントに記憶された1つまたは複数のスクリプト)、当該プログラム専用の単一ファイル、または複数の協調ファイル(たとえば、1つまたは複数のモジュール、サブプログラム、あるいはコードの一部を記憶するファイル)に記憶することができる。コンピュータプログラムは、1つの場所に配置されるか、または複数の場所に分散され、通信ネットワークにより相互接続された1つのコンピュータまたは複数のコンピュータ上で実行されるように展開することができる。
本明細書に記載の処理および論理フローは、1つまたは複数のプログラム可能なプロセッサが1つまたは複数のコンピュータプログラムを実行して、入力データに作用して出力を生成することによりアクションを実行することによって、実施することができる。たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの専用論理回路によって処理および論理フローを実行することもでき、装置をその専用論理回路として実装することもできる。
コンピュータプログラムの実行に適したプロセッサには、例として、汎用および専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサが含まれる。一般に、プロセッサは、読み取り専用メモリまたはランダムアクセスメモリあるいはその両方から命令およびデータを受け取る。コンピュータの重要な要素は、命令に従ってアクションを実行するためのプロセッサ、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。一般に、コンピュータはまた、データを記憶するための1つまたは複数の大容量記憶デバイス、たとえば磁気ディスク、光磁気ディスク、または光ディスクを含み、またはそれらからデータを受信するもしくはそれらにデータを転送するように動作可能に結合され、あるいはその両方である。ただし、コンピュータは、そのようなデバイスを有する必要はない。また、コンピュータは他のデバイス、たとえば、ほんの数例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤー、ゲーム機、全地球測位システム(GPS)受信機、またはポータブルストレージデバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)に組み込むことができる。コンピュータプログラム命令およびデータを記憶するのに適したデバイスは、全ての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、これには、例として、半導体メモリデバイス、たとえばEPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば、内蔵ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクが含まれる。プロセッサおよびメモリは、専用の論理回路によって補完するか、またはそれに組み込むことができる。
ユーザとのインタラクションを提供するために、本明細書に記載の主題の実装形態は、情報をユーザに表示するためのディスプレイデバイス、たとえば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、ユーザがコンピュータに入力を提供できるキーボードまたはポインティングデバイス、たとえば、マウスまたはトラックボールとを有するコンピュータを使用して実行することができる。他の種類のデバイスを使用して、ユーザとのインタラクションを提供することもでき、たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックとすることができ、ユーザからの入力は、音響、音声、または触覚の入力を含む任意の形式で受け取ることができる。加えて、コンピュータは、ユーザにより使用されるデバイスからドキュメントを送受信することにより、ユーザとインタラクトすることができ、たとえば、ウェブブラウザから受信した要求に応答して、ユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって行う。
本明細書に記載の主題の実装形態は、たとえばデータサーバとしてバックエンドコンポーネントを含み、もしくはアプリケーションサーバなどのミドルウェアコンポーネントを含み、またはユーザが本明細書に記載の主題の一実装形態とインタラクトできるグラフィカルユーザインターフェースもしくはウェブブラウザを有するクライアントコンピュータなどのフロントエンドコンポーネントを含み、あるいは1つまたは複数のそのようなバックエンド、ミドルウェア、またはフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムを使用して実行することができる。システムのコンポーネントは、任意のデジタルデータ通信の形態または媒体、たとえば通信ネットワークによって相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、インターネットワーク(たとえば、インターネット)、ならびにピアツーピアネットワーク(たとえば、アドホックピアツーピアネットワーク)が含まれる。
コンピューティングシステムは、クライアントおよびサーバを含むことができる。通常、クライアントおよびサーバは互いに離れており、典型的には通信ネットワークを介してインタラクトする。クライアントおよびサーバの関係は、コンピュータプログラムがそれぞれのコンピュータで実行され、互いにクライアント-サーバ関係を有することによって生じる。一部の実装形態では、サーバは、データ(たとえば、HTMLページ)をクライアントデバイスに送信する(たとえば、クライアントデバイスとインタラクトしているユーザにデータを表示し、ユーザからユーザ入力を受け取るため)。クライアントデバイスにおいて生成されたデータ(たとえば、ユーザインタラクションの結果)は、サーバにおいてクライアントデバイスから受信することができる。
一部の例示的な実装形態では、本明細書で開示した特徴は、スマートテレビモジュール(またはコネクテッドテレビモジュール、ハイブリッドテレビモジュールなど)において実装されてもよく、スマートテレビモジュールは、インターネット接続をより従来型のテレビ番組ソース(たとえば、ケーブル、衛星、地上波、または他の信号を介して受信されるもの)と統合するように構成される処理回路を含んでもよい。スマートテレビモジュールは、テレビセットに物理的に組み込まれてもよく、または別個のデバイス、たとえば、セットトップボックス、ブルーレイもしくは他のデジタルメディアプレーヤー、ゲーム機、ホテルテレビシステム、および他のコンパニオンデバイスを含んでもよい。スマートテレビモジュールは、視聴者がウェブ上の、ローカルケーブルテレビチャンネル上の、衛星テレビチャンネル上の、またはローカルハードドライブに記憶されているビデオ、映画、写真、および他のコンテンツを検索して見つけることを可能にするように構成されてもよい。セットトップボックス(STB)またはセットトップユニット(STU)は情報機器デバイスを含んでもよく、情報機器デバイスはチューナーを含み、テレビセットおよび外部信号源に接続して、信号をコンテンツに変換してもよく、コンテンツは次いで、テレビ画面または他の表示デバイスに表示される。スマートテレビモジュールは、ウェブブラウザおよび複数のストリーミングメディアサービス(たとえば、Netflix(登録商標)、Vudu、Hulu(登録商標)など)、接続されたケーブルまたは衛星メディアソース、他のウェブ「チャンネル」などの、複数の異なるアプリケーションのアイコンを含むホーム画面またはトップレベル画面を提供するように構成されてもよい。スマートテレビモジュールは、電子番組ガイドをユーザに提供するようにさらに構成されてもよい。利用可能な番組に関する追加情報をユーザに提供し、ユーザがスマートテレビモジュールを操作できるようにするなどする、スマートテレビモジュールのコンパニオンアプリケーションが、モバイルコンピューティングデバイス上で動作可能であってもよい。他の実装形態では、これらの特徴はラップトップコンピュータもしくは他のパーソナルコンピュータ、スマートフォン、他の携帯電話、ハンドヘルドコンピュータ、タブレットPC、または他のコンピューティングデバイス上に実装されてもよい。
本明細書は多くの特定の実装形態の詳細を含んでいるが、これらはいかなる発明または特許請求し得るものの範囲を制限するものとしてではなく、特定の発明の特定の実装形態に特有の特徴の説明として解釈されるべきである。本明細書において別々の実装形態の文脈で説明している特定の特徴は、組み合わせて、または単一の実装形態において実行することもできる。逆に、単一の実装形態の文脈で説明している様々な特徴は、複数の実装形態において別々に、または任意の適切なサブコンビネーションで実行することもできる。また、特徴は、特定の組み合わせで機能するものとして上記で説明している場合があり、さらには最初からそのように特許請求されている場合があるが、特許請求した組み合わせの1つまたは複数の特徴は、場合によってはその組み合わせから削除することができ、特許請求した組み合わせはサブコンビネーション、またはサブコンビネーションの変形を対象としてもよい。さらに、特定の見出しに関して説明している特徴は、他の見出しの下で説明している例示的な実装形態に関して、および/またはこれと組み合わせて利用することができ、見出しは、提供されている場合、読みやすさのみを目的として含まれており、そのような見出しに関して提供しているいかなる特徴も制限するものと解釈されるべきではない。
同様に、動作は図面に特定の順序で記述しているが、これは、望ましい結果を実現するために、そのような動作が図示した特定の順序または順次的な順序で実行されること、または全ての例示した動作が実行されることを必要とするものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利な場合がある。また、上述の実装形態における様々なシステムコンポーネントの分離は、全ての実装形態においてそのような分離を必要とするものとして理解されるべきではなく、説明したプログラムコンポーネントおよびシステムは、一般に単一のソフトウェア製品に共に統合するか、または有形媒体に具現化された複数のソフトウェア製品にパッケージすることができることを理解されたい。
このように、本主題の特定の実装形態が説明されている。他の実装形態は、以下の特許請求の範囲内にある。場合によっては、特許請求の範囲に記載のアクションを異なる順序で実行し、なおも望ましい結果を得ることができる。加えて、添付の図面に示した処理は、望ましい結果を実現するために、図示した特定の順序または順次的な順序を必ずしも必要としない。特定の実装形態では、マルチタスクおよび並列処理が有利な場合がある。