(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023064085
(43)【公開日】2023-05-10
(54)【発明の名称】マーカーを画像または映像コンテンツに埋め込むためのコンピューター実装方法および対応するマーカーの検出方法
(51)【国際特許分類】
H04N 1/32 20060101AFI20230428BHJP
H04N 21/83 20110101ALI20230428BHJP
H04N 5/92 20060101ALI20230428BHJP
【FI】
H04N1/32 144
H04N21/83
H04N5/92 010
【審査請求】未請求
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022169607
(22)【出願日】2022-10-24
(31)【優先権主張番号】21306480.1
(32)【優先日】2021-10-25
(33)【優先権主張国・地域又は機関】EP
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVASCRIPT
(71)【出願人】
【識別番号】500102435
【氏名又は名称】ダッソー システムズ
【氏名又は名称原語表記】DASSAULT SYSTEMES
(74)【代理人】
【識別番号】110001243
【氏名又は名称】弁理士法人谷・阿部特許事務所
(72)【発明者】
【氏名】マクシム ピア
【テーマコード(参考)】
5C053
5C164
【Fターム(参考)】
5C053FA14
5C053GB06
5C053JA21
5C053LA11
5C164MB01S
5C164MB21P
5C164PA38
5C164SB02S
5C164SB06S
(57)【要約】 (修正有)
【課題】マーカーを、画像または映像コンテンツに埋め込むコンピュータ実装方法を提供する。
【解決手段】方法は、埋め込みのための入力画像またはフレームを受信し、ビットシーケンスを含む入力画像またはフレーム内で符号化されるバイナリメッセージを判定し、入力画像またはフレーム内の領域を検出し、領域が選択された長さおよび高さを提示し、それぞれのビットシーケンスを均一領域内の色から判定された対応する符号化色および符号化規則に関連させ、それぞれの要素がビットシーケンスに関連される符号化色を格納するマーカー色テーブルを生成し、色テーブルがバイナリメッセージの色符号化を構成し、マーカーを領域に埋め込む。マーカー色テーブルのそれぞれの要素は、画素ブロックに関連付けられる動作を備える。
【選択図】
図2
【特許請求の範囲】
【請求項1】
マーカーを画像または映像コンテンツに埋め込むためのコンピューター実装方法であって、
a)埋め込みのための入力画像またはフレームを受信し、
b)2つまたはそれより多くの同一のビット数を有するビットシーケンスを含む前記入力画像またはフレーム内で符号化されるバイナリメッセージを判定することであって、前記バイナリメッセージは、同一ではない少なくとも2つの連続するビットシーケンスを含む少なくともヘッダー部分を含み、
c)領域内の色が均一であり、前記領域が選択された長さおよび高さを示すように、前記入力画像またはフレーム内の前記領域を検出し、
d)それぞれの前記色が互いにすべて異なるように、それぞれの可能なビットシーケンスを前記均一領域内の前記色および符号化規則から判定された対応する符号化色に関連させ、
e)色テーブルがバイナリメッセージの色符号化を構成するように、それぞれの要素が前記バイナリメッセージのビットシーケンスに関連される符号化色を格納するマーカー色テーブルを生成し、
f)少なくとも選択された画素数を含む画素ブロックを付加する方向に指向的に付加することによって、前記マーカーを前記領域に埋め込むことであって、所与の画素ブロック内の画素は、それぞれが前記マーカー色テーブルの要素の前記符号化色で彩色され、前記マーカー色テーブルのそれぞれの要素は、少なくとも1つの画素ブロックに関連付けられる動作を備える、
方法。
【請求項2】
動作e)は、水平方向の付加方向を用いて、前記付加方向における4画素数を含み、さらに正方形を有する画素ブロックを作成する、
請求項1に記載のコンピューター実装方法。
【請求項3】
動作e)は、次の画素ブロックを付加する前に、前記ヘッダー部分のそれぞれの画素ブロックを選択された数繰り返すことをさらに含む、
請求項1または2に記載のコンピューター実装方法。
【請求項4】
前記ヘッダー部分は、それぞれのビットシーケンスが、そのすぐそばの隣接するものと異なるように配置されたビットシーケンスを含み、2つの隣接するビットシーケンスのそれぞれの組み合わせが前記ヘッダー部分で一意である、
請求項1ないし3のいずれか一項に記載のコンピューター実装方法。
【請求項5】
前記バイナリメッセージは、ヘッダー部分、および少なくとも2つのビットシーケンスを含むペイロード部分を含み、動作b)は、ロバストなペイロード部分を取得するためにエラー訂正コードを前記ペイロード部分に適用すること、およびロバストなペイロード部分をインタレースすることを含む、
請求項1ないし4のいずれか一項に記載のコンピューター実装方法。
【請求項6】
マーカーを画像または映像コンテンツに埋め込むためのコンピューター実装方法であって、
a)検出のための入力画像またはフレームを受信し、
b)画像解析方向に沿って整列される画素グループによって入力画像またはフレームを解析することであって、それぞれの画素グループの前記画素は、前記画像解析方向に画像内で画素ブロックのサイズに等しい画素数によって分離され、前記画素グループは、ヘッダーにおけるビットシーケンス数のサイズを有し、
c)それぞれの画素グループにおいて、それぞれの画素の色を検出し、前記色をビットシーケンスの符号化色のうちの1つと一致させ、
d)結果となるビットシーケンスの組をそれらの位置を考慮してヘッダー部分のビットシーケンスの組と比較して、選択された一致する組の数のビットシーケンスを検出すると、第1の画素の位置を潜在的なマーカー開始位置として対応する画素グループに格納する動作を備える請求項1ないし5のいずれか一項に記載の方法に従う、
方法。
【請求項7】
動作b)、動作c)、および動作d)は、並行して付加方向に選択された画素数に等しい画素グループ数を解析することによって順次実行される、
請求項6に記載のコンピューター実装方法。
【請求項8】
前記画像解析方向は、水平である、
請求項6または7に記載のコンピューター実装方法。
【請求項9】
埋め込まれたマーカーに符号化されたバイナリメッセージは、ペイロード部分をさらに含み、前記方法は、画像解析方向に従って画像を解析して、前記ペイロード部分の画素ブロックに対応するすべての画素を検索して、それぞれの画素の色を検出して、前記色をビットシーケンスの符号化色のうちの1つと一致させる動作e)をさらに備える、
請求項6ないし8のいずれか一項に記載のコンピューター実装方法。
【請求項10】
動作e)が画素と符号化色との一致に失敗した場合、動作b)から動作d)を再開する、
請求項9に記載のコンピューター実装方法。
【請求項11】
前記ペイロード部分は、請求項5に従って符号化されており、それに応じて前記ビットシーケンスを復号化する動作f)と、動作f)が成功した場合、潜在的なマーカーの開始位置の周りの領域を付加方向に前記選択された画素数に等しいサイズを有する正方形のウィンドウで探索することであって、前記ウィンドウは、前記潜在的なマーカーの開始位置を中心に置かれ、および、元々埋め込まれていたマーカーに最もよく色的に対応する画像区域を暗黙に画定する前記画素を識別すること、をさらに備える、
請求項9または10に記載のコンピューター実装方法。
【請求項12】
動作f)が前記ペイロード部分を復号化できない場合、動作b)~動作d)を再開する、
請求項11に記載のコンピューター実装方法。
【請求項13】
請求項1ないし12のいずれか一項に記載の方法を実行するための命令を備える、
コンピュータープログラム。
【請求項14】
請求項13に記載のコンピュータープログラムの上に記録した、
データストレージ媒体。
【請求項15】
メモリに結合されたプロセッサを備えるコンピューターシステムであって、前記メモリは、請求項13に記載のコンピュータープログラムの上に記録した、
コンピューターシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータービジョンの分野に関する。
【背景技術】
【0002】
所与のコンテンツが常にアクセス可能ではない特定の構造を有するか、またはこの特定の構造にアクセスするために利用可能なツールを用いることが常に望ましいとは限らないことがあるコンテキストがある。
【0003】
これは、例えば、画像またはストリーミングを介して画面共有を含むあるウェブアプリケーションの場合であり、これは、セキュリティー要件および/またはサードパーティーのコンポーネントに依存しないユーザー選択に関連付けられる問題を引き起こす特定のモジュールを用いることを要求する。
【0004】
それ故に、既存の方法またはAPI(「アプリケーションプログラミングインターフェース」)を用いることなく、画像または映像コンテンツの特定の部分を検出することが可能である必要がある。APIは、ソフトウェアインターフェースのタイプであり、他のソフトウェアの一部にサービスを提供する。マーキングは、この問題を解決するための周知の方法である。マーキングは、オーディオ、映像、または画像データなどのノイズ耐性信号に秘密裏に埋め込まれたマーカーを用いることと定義されてよい。これは、マーキング方法がマークされている媒体の高い不可逆圧縮に対してロバストであり、容易に用いられるべく検出が速い必要があるものとしてより複雑である。
【0005】
色情報の最も重要でないビットの情報を画素ごとに符号化するような周知の些細な技術は、圧縮によって失われるために用いられることが可能ではない。不可逆圧縮を考慮に入れることが可能となるアプローチは、2タイプあり、
-圧縮を認識するソリューションは、これらが周知の圧縮アルゴリズムで安全なスポットを見出すことを試みて、これらを利用して情報を検索可能な方法で圧縮メディアに隠して、
-フィーチャー認識ソリューションは、これらがソース画像のフィーチャーを変更することによって、一般的なエラー訂正コードを経たメッセージを符号化する。
【0006】
明らかに、前者のソリューションは、実装に用いられる多くの圧縮アルゴリズムおよび変形があるけれども、本発明の目的のために用いられることが可能ではない。
【0007】
Sun, ShuliangによるInternational Arab Journal of Information Technology, 15, 2018の(2018)「Image Steganography Based on Hamming Code and Edge Detection」は、画像内の検出されたエッジ画素を修正することによってステガノグラフィーを実行する方法を説明する。これは、特にサードパーティーのコンテンツを埋め込むために用いられる場合に、ドキュメントにおけるこれらのエッジの制御を有することを要求し、これは、とても厳格な要件である。より一般的に、機能認識ステガノグラフィー法は、常に、隠れた部分の情報を受信する媒体の視覚的外観を完全に制御することを想定しており、これは、また、非常に厳格な要件である。
【0008】
上記を考慮すると、現在、扱いやすい算出時間の検出方法を提示する圧縮耐性ステガノグラフィー技術を提供する既存の満足するソリューションは、存在しない。
【発明の概要】
【0009】
本発明は、この状況を改善することを目的としている。この目標に向けて、本出願人は、以下の動作を含む画像または映像コンテンツにマーカーを埋め込むためのコンピューター実装方法を提案する。
-a)埋め込みのための入力画像またはフレームを受信すること、
-b)2つまたはそれより多くの同一のビット数を有するビットシーケンスを含む当該入力画像またはフレーム内で符号化されるバイナリメッセージを判定することであって、当該バイナリメッセージは、同一ではない少なくとも2つの連続するビットシーケンスを含む少なくともヘッダー部分を含むこと、
-c)領域内の色が均一であり、前記領域が選択された長さおよび高さを示すように、当該入力画像またはフレーム内の前記領域を検出すること、
-d)それぞれの前記色が互いにすべて異なるように、それぞれの可能なビットシーケンスを当該均一領域内の色および符号化規則から判定された対応する符号化色に関連させること、
-e)色テーブルがバイナリメッセージの色符号化を構成するように、それぞれの要素が当該バイナリメッセージのビットシーケンスに関連される符号化色を格納するマーカー色テーブルを生成すること、および
-f)少なくとも選択された画素数を含む画素ブロックを付加する方向に指向的に付加することによって、前記マーカーを当該領域に埋め込むことであって、所与の画素ブロック内の画素は、それぞれがマーカー色テーブルのそれぞれの要素の符号化色で彩色され、マーカー色テーブルのそれぞれの要素は、少なくとも1つの画素ブロックに関連付けられることである。
【0010】
この方法は、マーカーを埋め込むことを可能にするために有利であり、これは、線形複雑性を有する検出方法で検出されることが可能であり、不可逆圧縮に耐性がある。
【0011】
さまざまな実施形態において、この方法は、以下の特徴のうちの1つまたは複数を提示してよい。
-動作e)は、水平方向の付加する方向を用いて、付加方向における4画素数を含み、さらに正方形を有する画素ブロックを作成する、
-動作e)次の画素を付加する前に、ヘッダー部分のそれぞれの画素ブロックを選択された数繰り返すことをさらに含み、
-当該ヘッダー部分は、それぞれのビットシーケンスは、そのすぐそばの隣接するものと異なるように配置されたビットシーケンスを含み、2つの隣接するビットシーケンスのそれぞれの組み合わせが当該ヘッダー部分で一意であり、
-当該バイナリメッセージは、ヘッダー部分、および少なくとも2つのビットシーケンスを含むペイロード部分を含み、動作b)は、ロバストなペイロード部分を取得するためにエラー訂正コードを当該ペイロード部分に適用すること、およびロバストなペイロード部分をインタレースすることを含む。
【0012】
本発明は、以下の動作を含む先行する請求項のうちのいずれか一項に記載の方法に従って、画像または映像コンテンツに埋め込まれたマーカーを検出するためのコンピューター実装方法にさらに関する。
-a)検出のための入力画像またはフレームを受信すること、
-b)画像解析方向に沿って整列される画素グループによって入力画像またはフレームを解析することであって、それぞれの画素グループの当該画素は、画像解析方向に画像内で画素ブロックのサイズに等しい画素数によって分離され、当該画素グループは、ヘッダーにおけるビットシーケンス数のサイズを有することと、
-c)それぞれの画素グループにおいて、それぞれの画素の色を検出し、当該色をビットシーケンスの符号化色のうちの1つと一致させること、
-d)結果となる当該ビットシーケンスの組をそれらの位置を考慮して当該ヘッダー部分のビットシーケンスの組と比較すること、およびビットシーケンスの選択された一致する組の数を検出すると、第1の画素の位置を潜在的なマーカー開始位置として対応する当該画素グループに格納することである。
【0013】
さまざまな実施形態において、この方法は、以下の特徴のうちの1つまたは複数を提示してよい。
-動作b)、動作c)、および動作d)は、並行して付加方向に選択された画素数に等しい画素グループ数を解析することによって順次実行されて、
-画像解析方向は、水平であり、
-埋め込まれたマーカーに符号化されたバイナリメッセージは、ペイロード部分をさらに含み、当該方法は、画像解析方向に従って画像を解析して、ペイロード部分の画素ブロックに対応するすべての画素を検索して、それぞれの画素の色を検出して、および当該色をビットシーケンスの符号化色のうちの1つと一致させる動作e)をさらに備え、
-動作e)が画素を符号化色に一致させることに失敗した場合、動作b)~動作d)を再開して、
-当該ペイロード部分は、上記の符号化方法に従って符号化されており、当該方法は、それに応じて当該ビットシーケンスを復号化する動作f)をさらに備え、動作f)が成功した場合、潜在的なマーカーの開始位置の周りの領域を付加方向に当該選択された画素数に等しいサイズを有する正方形のウィンドウで探索して、当該ウィンドウは、当該潜在的なマーカーの開始位置を中心に置かれて、元々埋め込まれていたマーカーに最もよく色的に対応する画像区域を暗黙に画定する当該画素を識別して、および
-動作f)がペイロード部分の復号化に失敗した場合、動作b)~動作d)を再開する。
【0014】
本発明は、また、本発明に従って、方法を実行するための命令を含むコンピュータープログラム、このようなコンピュータープログラムを記録したデータストレージ媒体、およびこのようなコンピュータープログラムを記録したメモリに結合されるプロセッサを含むコンピューターシステムに関する。
【図面の簡単な説明】
【0015】
本発明の他の特徴および利点は、以下の図面の説明に容易に現れることとなり、これは、本発明の例示的な実施形態を示す。
【0016】
【
図1】本発明にかかるシステムの一般的な概略図を示す図である。
【
図2】
図1の埋め込み器によって実行されるマーカー埋め込み関数の例示的な実施形態を示す図である。
【
図3】
図2の関数を用いて生み出されたマーカーの概略的な例示を示す図である。
【
図4】
図1の検出器によって実行されるマーカー検出関数の例示的な実施形態を示す図である。
【発明を実施するための形態】
【0017】
図面および以下の説明は、積極的で且つ明確に定義された機能の大部分を構成している。結果として、それらは本発明を理解することに有用であるだけでなく、必要が生じた場合にその定義に寄与するために用いられることも可能である。
【0018】
図1は、本発明にかかるシステムの一般的な概略図を図示している。システム2は、メモリ4、埋め込み器6、および検出器8を含む。
【0019】
メモリ4は、システム2で用いられるすべてのデータを長期的または一時的であろうとなかろうと格納する。すべての入力および出力を受信する。メモリ4に格納されるデータの主なタイプは、画像または映像/ストリーミングフレーム10、埋め込みおよび符号化パラメーター12、バイナリメッセージ14、およびマークされた画像16である。
【0020】
本明細書で説明される実施形態から容易に現れることとなるように、システムは、パーソナルコンピューター、ラップトップ、タブレット、携帯電話などのすべておよび任意のタイプのコンピューターであってよい。本発明に従って処理される画像は、システム2に接続されたディスプレイによって表示されてよい。
【0021】
以下において、「画像」という表現は、システム2の主題である媒体の任意または抽出を参照することに用いられることとなる。より正確には、システム2は、画像を取り扱うが、これらの画像は、部分的または全体において、それ自体が画像であるファイルから来ることがあるが、それらは、また、記録されたものまたはライブであろうとなかろうと、映像ストリームのフレームであってよく、フレーム内のDOMエレメントのような別のファイルのサブパーツであってよい。
【0022】
本明細書で説明される例示において、メモリ4は、任意の適切な方法、つまり、ハードディスクドライブ、半導体ドライブ、フラッシュメモリ、プロセッサに埋め込まれたメモリ、クラウドにおけるアクセス可能な遠隔ストレージ、または任意の他の適切な手段によって実現されてよい。
【0023】
データの一部は、メモリ4とは別のメモリに格納されてよく、これは、それ自体が別々のユニットで構成されてよい。必要に応じてデータの一部を落としてよく、すべてのデータを1つのメモリに格納する要件はない。
【0024】
本明細書で説明される例示において、埋め込み器6および検出器8は、1つまたは複数のプロセッサで実行されるコンピュータープログラムである。このようなプロセッサは、CPU、GPU、CPUおよび/またはGPUグリッド、リモート計算グリッド、特別に構成されたFPGA、特別に構成されたASIC、SOCまたはNOCなどの特殊チップ、AI特殊チップなどの自動計算を実行するための任意の周知の手段を含む。
【0025】
埋め込み器6は、入力画像10、埋め込みおよび符号化パラメーター12、および符号化されて埋め込まれるバイナリメッセージ14を受信するために配置される。埋め込み器6は、このデータを処理して、メモリ4に格納され得る、または別の当事者に送信され得るマークされた画像16を戻す。
【0026】
逆に、検出器8は、埋め込みパラメーターおよび符号化パラメーター12と同様に、推定上のマークされた画像16を受信する。検出器8は、このデータを処理して、バイナリメッセージ14または別のタイプの関連する情報を戻す。
【0027】
図2は、埋め込み器6によって実行される機能の例示的な実施形態を図示する。
【0028】
この機能は、
図2の関数の入力が受信される可変入力動作200から始まる。これは、グローバル変数として用いられることとなる引数として入力画像Img、マーカー生成パラメーターPar、およびメッセージBinMsgが提供される関数Inp()によって実行されてよい。
【0029】
これは、ヒューマンマシンインターフェース(HMI)によって行われることが可能である。任意のタイプのHMIは、ユーザーがこれらのグローバル変数を含むファイルを指定するか、またはそうでなければメモリ4におけるエントリーを指定することを通してインターフェースを提供する限り用いられることが可能である。例えば、これは、マウスまたはキーボードを用いようとなかろうと、テレビ会議アプリケーションのディスプレイの指定区域を指摘することによって行われることが可能である。これは、自動的に行われることが可能である。
【0030】
動作200の後に、ヘッダーおよび画像に埋め込まれるマーカーのペイロードが判定されるメッセージコンポーネント判定動作210が続く。これは、メッセージBinMsgおよびパラメーターParを引数として受信して、ベクトルHeader[]およびPayload[]の組を戻す関数Prepare()によって行われてよい。
【0031】
本明細書で説明される例示において、ベクトルHeader[]は、埋め込まれるマーカーのバイナリヘッダーを含んでおり、常に同一である。それは、関数Prepare()でハードコード化されているか、またはそれ以外で判定されているパラメーターParに含まれてよい。代替的に、ベクトルHeader[]は、パラメーターParに従って構築されてよく、またはメッセージBinMsgから抽出されてもよい。
【0032】
ベクトルPayload[]は、メッセージBinMsgのペイロードであり、マーカーで伝送されることを意図された情報を含む。一実施形態において、ペイロードは、共有されるために意図されるDOMオブジェクトに関する情報を含んでよい。別の実施形態において、ペイロードは、マークされている画像に関する識別子を含んでよい。さらに別の実施形態において、ペイロードは、トラッキングの目的のために用いられてよい。ある実施形態において、ベクトルPayload[]は、省略されてよい。
【0033】
Header[]Payload[]ベクトルPayload[]は、パラメーターParに従って固定されるか、または暗黙に固定されるサイズを有する。メッセージBinMsgがベクトルPayload[]より劣っているサイズを有する場合、ベクトルPayload[]は、0パディングされてよい。別の代替の実施形態において、関数Prepare()は、また、以下でさらに説明される動作250の動作を実行して、ベクトルPayload[]は、ペイロードの符号化されたバージョンを含む。
【0034】
動作210の後に、マーカー開始位置判定動作220が続く。これは、画像ImgおよびパラメーターParを引数として受信する関数Locate()によって行われてよく、マーカー開始点StartPointおよび基本色RefColorを戻してよい。代替の実施形態において、動作220は、動作210の前に実行されることが可能であり、またはそれらは、並行して実行されることが可能である。
【0035】
動作220の関数Locate()は、画像Imgにおいて検出することに用いられ、これは、マーカーが格納され得る領域である。以下でさらに現れることとなるように、本発明は、ステガノグラフィーに関連する方法で、目立たないことがあるマーカーを格納することを可能にする。マーカー自体のサイズは、パラメーターParによって指示されて、元の画像が均一またはとても均質な色を有していた情報を符号化する変化する色を有する画素のラインの一般的な形態をとる。目立たないマーカーの場合において、色の変化が選択されることによって、コンテンツを見る人によって容易に区別されない。それ故に、このようなマーカーを埋め込むべく、マーカーのサイズを包含するために十分に均質であるか、または均一な色の画像Imgの領域を見出す必要がある。
【0036】
動作220の関数Locate()の結果は、均一な色RefColorを有して、埋め込み器6によって生成されるマーカーを含むために十分に大きい画像Img内の第1の領域の最左の点の座標を含む。マーカーのサイズは、パラメーターParから派生するように、事前に周知される。
【0037】
図3に図示される例示において、マーカーは、4×4画素で作成されたそれぞれが正方形の形状を有する画素ブロック30で作成される。これは、高周波情報の破棄の効果に対抗して、あらゆるタイプの圧縮に弾力性があることを可能とする。実に、圧縮アルゴリズムが画素ブロックのエッジ画素を変更する場合、中心領域は、比較的影響を受けないこととなる。結果として、正方形の形状は、犠牲画素(画素ブロックの外側のエッジ)を画定するものとみなされてよく、それによって、アルゴリズムの不可知論性および圧縮アーチファクトの回復に関するアルゴリズムを確実にする。より一般的には、画素ブロック30は、双方の寸法が3またはそれより長い限り、長方形または正方形形状であることが可能である。
【0038】
ヘッダー部分32において、画素ブロックは、ブロック34として2回繰り返され、これは、外部視覚的なアーチファクトの場合と同様に、たとえマウスポインターが上にあるとしても、マーカーのヘッダー部分を検出することを可能とする。メッセージ部分36は、ヘッダー部分32の画素ブロックと同一のサイズを有する1つの画素ブロックで作成される。
【0039】
この違いの背後にある論理は、マーカーのヘッダー部分を検出することが可能であることが重要であり、これは、意味のある情報を持たないように、より短くすることを意図している。この理由のために、画素ブロックを繰り返すことは、ヘッダーの存在および正確な位置に関する演繹的な知識の欠如のため、エラーコーディングが利用できないコンテキストにおいて回復力を提供する良い方法である。反対に、マーカーのペイロード部分は、通常、ヘッダー部分よりも長いことを意図しており、以下で現れることとなるようにエラーコーディングを受けることがあり、これは、画素ブロックを複製するよりも最適である。ある実施形態において、ヘッダーは、任意に長く作成されてよく、ペイロードは、任意に短く選択されてよい。
【0040】
さまざまな実施形態において、画素ブロックのサイズおよびそれらの形状は、変化してよく、互いに異なっていてもよい。また、メッセージ部分の画素ブロックは、2回またはそれより多く繰り返されてよい。
【0041】
動作220の後に、パラメーターParと同様に、関数ColorMix()が動作220で判定された基本色RefColorを受信して、結果として、テーブルEncodingColorBitSequences[]に戻されることとなる色のセットを判定する色符号化判定動作230が続き、マーカーの画素ブロックを彩色することに用いられることとなる。テーブルEncodingColorBitSequences[]は、二次元であってよく、ビットシーケンスおよび対応する符号化色の両方を格納してよく、または1次元であってもよく、ビットシーケンスが暗黙的であることを有する。
【0042】
先述のように、パラメーターParは、ビットシーケンスのサイズを含み、これは、異なるビットシーケンスを符号化するためにいくつの異なる色が必要かを指示する。例えば、ビットシーケンスサイズが2であることに対して、可能となるビットシーケンスは、00、01、10および11であり、参照色RefColorに基づいて異なるビットシーケンスを符号化するために4つの色が必要であることを意味する。ビットシーケンスのサイズが3であることにおいて、8つの色が必要となる。一般に、2^n色は、ビットシーケンスのサイズnを符号化するために必要となることとなる。
【0043】
本出願人は、ビットシーケンスのサイズが2に等しいビットを用いることがビットシーケンスを符号化するために必要となる色の数を低減させるために有利である(ビットシーケンスのサイズがより大きいほど、画素ブロックがより多くのビットを符号化することを意味するが、異なる色がより多く存在するように、マーカーを目立たないように保つことがより困難であることを意味する)と見出した。
【0044】
色のセットをビットシーケンスに関連するために用いられることが可能である多くの方法がある。これらの方法のうちの1つは、参照色RefColorのRGB(赤緑青、これは、一般的なほとんどのコンピューターアプリケーションにおいてどのように色が算定されたかであり、具体的には、ウェブアプリケーションにおける)の値を取り、Rおよび/またはBチャネルを修正することである。Gチャネルを変更しない理由のうちの1つは、ヒトの目が緑色に特に敏感であり、Gチャネルを修正しないことは、例えば、ステガノグラフィーのための例示に対して、より目立たないマーカーを可能とする。代替的に、すべてのチャネルは、変更されてよい。例えば、固定値は、加算されてよく、または減算されてもよく、符号化である+3または-3を、RまたはBチャネルのいずれか、またはその両方に実行する。目立たないことを促進すべく、複合時の良好なロバスト性を確保しながら、最小の絶対固定値を確保するためにトレードオフされる。値3は、その関連で優れた結果を示した。本出願人は、ステガノグラフィーアプリケーションと互換性のある良好な目立たない結果を用いて、最大で6までの値が保持され得ることを発見した。
【0045】
本出願人は、また、参照色のチャネル値が128より劣っている場合、値を加算して、それ以外の場合は、値を減算することが有利であると発見した。実に、これは、たとえ固定値が用いられなくても、任意の参照色RefCol値を用いることを可能とする。代替的な実施形態において、動作220は、固定値と互換性のない開始点を拒絶するために修正されてよく、つまり、それがRGB極値の限界にあまりに近い場合である。例えば、固定値の+3または-3を用いることで、動作220は、修正され得る色チャネルR、GまたはBを有して、3より小さいか、または252よりも大きい開始点を拒絶してよい。言うまでもなく、3とは別の値が用いられてよい。さらに、2つの異なる境界値は、用いられることが可能である。
【0046】
これは、RGB値(130,64,127)を有する参照色について、符号化は、
-ビットシーケンス00は、(130,64,127)
-ビットシーケンス01は、(130,64,130)
-ビットシーケンス10は、(127,64,127)
-ビットシーケンス11は、(127,64,130)である。
【0047】
代替的に、値は3と異なることがあり、加算および減算に対して異なることがあり、加算だけであってよく、または減算だけなどであってもよい。
【0048】
本出願人は、また、互いに誤解されやすい色間のハミング距離を最小限に抑える方法において、ビットシーケンスに色を割り当てるために有利であることを発見した。実に、ハミング距離は、文字列(特にビットの文字列)を比較する場合のデフォルト距離であり、それは、以下で説明されるハミング補正の使用と一致し、そのエラー訂正能力は、符号化されて復号化されたメッセージのハミング距離に依拠する。
【0049】
明確にするために、等しい長さの2つの文字列間のハミング距離が対応する記号が異なる位置での数であることが思い出される。つまり、それは、ある文字列を他の文字列へと変更するために要求される最小の置換数、またはある文字列を他の文字列へと変換し得る最小のエラー数を測定する。
【0050】
これは、色間のマンハッタンRGB距離と対応するビットシーケンス間のハミング距離との差の合計を最適化することによって行われる。これは、以下の式を最小化することと同様である。
【0051】
【0052】
ここで、ARGBおよびBRGBは、参照色RefCol値から派生した色を指定して、AbitsおよびBbitsは、結果となるテーブルEncodingColorBitSequences[]における色ARGBおよびBRGBに関連され得るビットシーケンスを指定する。
【0053】
明確にするために、2色間のマンハッタンRGB距離は、これらの色のそれぞれのRGBチャネル、つまり2色のC1およびC2|R(C1)-R(C2)|+|G(C1)-G(C2)|+|B(C1)-B(C2)|の距離の合計であることが思い出される。
【0054】
この割り当ては、関数ColorMix()によって算定されることが可能であり、または性能を目的とするためのルックアップテーブルで事前に算定されることもある。
【0055】
ヘッダー、ペイロード、および符号化色が判定されると、マーカーは、生成されてよい。これは、3つの動作240、動作250、および動作260によって行われる。動作240および動作250は、動作260と共に、順次または並行して実行されてよい。
【0056】
マーカーヘッダー生成動作240は、ベクトルHeader[]、テーブルEncodingColorBitSequences[]、およびパラメーターParを受信して、マーカーヘッダーを符号化する画素ブロックのための色を含むマーカーヘッダーテーブルMarkerHeader[]を戻す関数MarkerHeader()を実行する。
【0057】
上記のように、パラメーターParは、マーカーヘッダー画素ブロックの冗長パラメーターと同様に、画素ブロックのサイズおよび形状を含む。マーカーヘッダーテーブルMrkHeader[]は、最左端の画素から開始して、所与の行の画素が徐々に右に進み、下の行の画素が徐々に低くなるために、暗黙的に画素を指定してよい。
【0058】
ペイロード符号化動作250は、ペイロードベクトルPayload[]およびパラメーターParを引数として受信して、符号化されたペイロードに対応するビットシーケンスのベクトルErrorCodedPayload[]を戻す関数Encode()を実行する。この符号化の目的は、主に、ペイロードを非常に損失の多い符号化によりロバストにさせることである。そのようにすべく、本出願人は、ベクトルPayload[]を用いて、それをハミングエラーコード、ここでは、ハミング(8,4)で符号化することが有利であることを発見した。例えば、これは、ペイロード1100 0101に対するベクトルPayload[]が01111000 01001011として符号化されることとなることを意味する。
【0059】
ハミング(8;4)エラーコードを用いる利点は、それが最適なハミング(7;4)エラーコードへのさらなる1つのエラーの検出を可能とするさらなるパリティビットを提供して、また、その出力の長さが入力の長さの倍数であり、これは、パディングの必要性を除去することである。ハミングエラーコード以外のエラーコードを用いてよい。
【0060】
その後、Encode()は、可能なエラーのバーストを異なるハミングチャンクに拡散すべく、その結果をさらにインタレースする。ハミングエラーコード以外のエラーコードを用いてよく、インタレースすることは、任意であってよい。
【0061】
これは、ハミング符号化されたペイロードがサイズ8のブロック(ハミングブロックのサイズ)へと切り込まれて、それらのブロックは、2つの櫛のように絡み合っていること(第1のブロックの第1のビットの後に、第2のブロックの第1のビットなどが続き、最後のブロックの第1のビットまで続き、次に、第1のブロックの第2のビットの後に、第2のブロックの第2のビットなどが続く)は、01111000 01001011が00111010 11000101となることを意味する。
【0062】
最後に、関数Encode()は、その結果をベクトルErrorCodedPayload[]におけるビットシーケンスとして格納する。偶発的に、ビットシーケンスのサイズが2に等しい場合に、ビットシーケンスは、インタレースすることと同時に行われることが可能であり、これは、より速く関数Encode()を実行することを可能とする。上述のように、動作250は、動作210と同時に実行されてよい。
【0063】
マーカーエラー符号化ペイロード生成動作260は、ベクトルErrorCodedPayload[]、テーブルEncodingColorBitSequences[]およびパラメーターParを引数として受信して、マーカーペイロードを符号化する画素ブロックための色を含むマーカーペイロードテーブルMarkerPayload[]を戻す関数MarkerPayload[]を実行する。
【0064】
関数MarkerPayload[]は、上述のように、画素ブロックを生成するための規則がペイロードに対して異なる可能性が高いことを除き、関数MarkerHeader()と極めて類似している。
【0065】
最後に、マーカーヘッダーおよびマーカーペイロードが生成されると、埋め込み器6は、マーカーヘッダーテーブルMarkerHeader[]、マーカーペイロードテーブルMarkerPayload[]、開始点StartPoint、および画像Imgを引数として受信して、マーカー埋め込み画像EmbeddedImgを戻す関数Embed()を実行する画像マーキング動作270においてその機能を完了する。関数Embed()は、画像Imgにおける開始点StartPointから単に開始して、開始点StartPointに続く画素をマーカーヘッダーテーブルMarkerHeader[]に従って彩色された画素と交換する。
【0066】
その結果は、符号化色の選択のため、目立たないマーカーを有する画像であり、これは、不可逆圧縮に非常に耐性がある。上記のウェブコンテキストにおいて、これは、任意の外部ライブラリを頼ることなく、または別のセキュリティーリスクのあるアドオンのJavaScriptを用いることなく、オブジェクトまたはサブオブジェクトを指定することを可能とする。上記のように、ある実施形態において、マーカーは、特にマーカーが関心領域に配置されることが可能である場合、ヘッダーだけに低減されてよい。
【0067】
図4は、検出器8によって実行される機能の例示的な実施形態を図示する。
【0068】
以下に示されることとなるように、検出器8は、入力画像が埋め込み器6によって導入されるマーカーを含むかを判定することが可能である。上記のウェブコンテキストにおいて、画像共有デバイスは、ストリーミングの上流にある埋め込み器6を用いることとなり、受信デバイスは、ストリーミングの下流にある検出器を用いることとなる。
【0069】
以下に現れることとなるように、検出器8は、ペイロードメッセージを戻してよく、または埋め込み画像の使用に関連する別の情報を戻してもよい。
【0070】
図4の機能は、以下のように実行することを意味するいくつかのループを含む。
-画像は、画素ブロック側のサイズに等しい画素数を処理することによって、有利に水平方向に解析される。したがって、任意の所与のループは、画素ブロックおよびラインあたり最大で1つの情報を有する画素だけを検出することが可能であり、画素ブロック設計のロバスト性から十分に利点を得るために、非常に冗長性を有する画素単位で色を情報に変換することを可能にさせ、
-可能な限り速くヘッダーを試行および検出すべく、色遷移をヘッダーのビットシーケンス遷移と比較される。正確に配置されたビットシーケンスの選択された数は、識別されるとすぐに、画像解析は、停止され、ペイロードを試行および復号化し、
-ペイロードの正しいコンテンツを推測するための情報がない場合、ペイロードの色復号化は、非常に厳密に実行されて、ペイロード画素ブロック色検出における任意のエラーは、復号化の試みを失敗させ、誤ったメッセージ復号化にわたる復号化失敗を促進し、
-画像の右端が出会った場合、またはヘッダーの周知のサイズが解析された場合、ヘッダーが検出された、または画像のすべての画素の解析が不成功に終わるとみなされるまで、新たな画素グループが生成される。
【0071】
関数Inp()が入力画像Img(
図1に図示される例示における埋め込み器6の結果である画像EmbImgが用いられる)、およびパラメーターParを引数として受信するこの関数は、入力動作400から開始する。
【0072】
これは、ヒューマンマシンインターフェース(HMI)によって行われることが可能である。任意のタイプのHMIは、ユーザーがこれらのグローバル変数を含むファイルを指定するか、またはそうでなければメモリ4におけるエントリーを指定することを通してインターフェースを提供する限り用いられることが可能である。例えば、これは、マウスまたはキーボードを用いようとなかろうと、テレビ会議アプリケーションのディスプレイの指定区域を指摘することによって行われることが可能である。これは、自動的に行われることが可能である。
【0073】
入力動作400は、画像の座標(i0,j0)で指定された画像解析開始点を戻す。通常、i0とj0は、0と等しくなることとなる(画像の左上角から開始することを意味する)。しかしながら、パラメーターParは、異なって示すことがある。
【0074】
動作400の後に、ローカル変数i,j,およびxが開始されることとなるインデックスの初期化動作402が続く。xは、関数がマーカーヘッダーを用いて識別を試行している異なる画素グループを識別することとなる一方で、インデックスiおよびjは、画像における画素色を検索するために用いられることとなる。
【0075】
動作402の後で、画素グループの色検索ループは、ローカル変数yが0で開始される画素グループ解析の位置リセット動作404から開始する。変数yは、それぞれの画素グループ内で解析される画素の位置を示すこととなる。
【0076】
その結果として、動作404の後で、4つの動作406、408、410、412が順次または並行して実行され、ここで、入力画像Img、インデックスiの増加値、およびインデックスjを引数として受信して、画素グループGP[]のテーブルにおける色を戻す関数Col()によって、xインデックスを増加させる画素の4つのグループがそれらの位置yに埋められる。
【0077】
入力Imgが検出器8によって受信される前に、高い不可逆圧縮を受け得るため、画素の色がテーブルEncodingColorBitSequences[]の色と一致しない高い可能性がある。結果として、関数Col()は、テーブルEncodingColorBitSequences[]における色のうち、所与の画素の色に最も近いものを判定することを試行する。
【0078】
この距離は、許容閾値内のマンハッタンRGB距離に基づいてよい。許容値として0を用いることは、明らかに検出漏れを引き起こすこととなるが、本出願人は、許容閾値がテーブルEncodingColorBitSequences[]の最も近い要素間の最小色距離よりも大きくないことが望ましいことを発見して、許容閾値が大き過ぎると、EncodingColorBitSequences[]の色に対応するように解釈される完全に無関係な色を引き起こすこととなり、誤検出のマーカーヘッダー検出につながる。本出願人は、合理的な経験値が、例えば、[1/2×d(RGB(±0,±0,±0),RGB(±0,±0,±3)]=2であるテーブルEncodingColorBitSequences[]の最も近い要素間の最小色距離の半分であることを発見した。関数Col()がテーブルEncodingColorBitSequences[]からの色を解析された画素に関連付けることが可能ではない場合、テーブル要素GP[x,y]は、無効のままに残されるか、または対応の失敗を示す値で埋められる。
【0079】
動作406~412を見る場合に、それは、このループが画像Imgの水平スライドウィンドウとしてテーブルGP[]を埋めているように見える。その結果として、動作412の後に、画像Imgの次の4つの水平画素を解析すべく、インデックスiが4増分される動作414が続く。ここで、埋め込みプロセスの間にヘッダー画素ブロックが繰り返される場合、インデックスiは、8または別の4の倍数分増加してよい。このプロセスおよびマーカーの水平性は、CPUにおける推測キャッシュを利用することを可能とし、これは、(画像が画素ごとに、左から右、次に上から下にメモリ画素に格納されるように)所与のラインの所与の画素に基づいて、その画像ラインの残余を用いてキャッシュを満たす。解析は、効率を低下させる代償として、異なる方法で行われることが可能である。
【0080】
動作414の後に、ヘッダー検出動作416が続き、これは、画素グループのうちの1つがマーカーヘッダーに対応する一連の色を含むかを判定する。そのようにすべく、関数HdDtct()は、動作416において実行されて、画素グループGP[x]において示される色遷移をマーカーヘッダーから予測される色遷移と比較する。ヘッダーにおけるそれらの予測されるスポットで、選択された数の正確に対応する遷移、例えば3つのうちの2つが見出されると、マーカーヘッダーは、画像Imgにおいて潜在的に識別されたとみなされる。
【0081】
この場合において、動作416の後に、関数PLDtct()が実行されるペイロード検出動作418が続く。この関数は、以下の提示されるマーカーヘッダーからマーカーのペイロード長までのすべての画素を水平方向に解析する。それぞれの画素は、関数Color()によって処理され、テーブルEncodingColorBitSequences[]における色に関連付けられているかを判定し、関数PLDtct()は、その後、結果となるペイロードの復号化を実行することを試行する。これは、まず、検出された色に対応するビットシーケンスをインタレース解除して、次に、結果となるメッセージをハミング復号化(または、埋め込み器6によって用いられるエラーコードの関数を復号化)することによって行われる。言うまでもなく、インタレースすることおよび/またはエラーコーディングが用いられなかった場合、インタレース解除および復号化は、実行されない。ペイロードの正しいコンテンツを推測する情報がない場合、関数PLDtct()におけるペイロードの色復号化は、非常に厳密に実行される。ペイロード画素ブロック色検出における任意のエラーは、誤ったメッセージの復号化にわたる復号化の失敗を促進すべく、関数PLDtct()に負の結果を戻すことを引き起こすこととなる。
【0082】
復号化が成功した場合、マーカーヘッダーが正常に識別されたとみなされる。それ故に、動作418の後に、関数Ref()がテーブルGP[]および画像Imgを変数として受信して、確定されたマーカーヘッダーの最左位置を戻す任意の動作419が続く。
【0083】
関数Ref()は、マーカーヘッダーの検出が成功につながった画素グループの最左辺りの画素を探索して、より良い開始解析点があるかを確かめる役割を有する。この目的で、関数Refは、マーカーヘッダーを左上角として検出が成功につながった画素グループのうちの最左の画素を有して、画素ブロック側のサイズを有する辺を有するウィンドウの開始点に基づいて、すべての画素を復元する。その後、関数Ref()は、それぞれの結果となる候補マーカーヘッダーに対して、候補マーカーヘッダーの画素と埋め込まれたものとしてのマーカーヘッダーの明度との間のマンハッタンRGB距離の合計を算出する。有利に、これらのマンハッタンRGB距離は、マーカーヘッダーが少なくとも部分的に隠されている(例えば、マウスカーソルによって、これは、異常に高いマンハッタンRGB値を生成することとなる)場合を考慮すべく、すべての符号化色間の最大マンハッタンRGB距離によって拘束される。関数Ref()による算法は、以下の式の最適化としてよくわかる。
【0084】
【0085】
ここで、
【0086】
【0087】
は、最適化される値であり、MWおよびMHは、正確なスペック色(speck colors)を用いて、復号化されたペイロードから再構築されたマーカーの幅および高さを表現して、Iは、探索領域であり、maxdistは、テーブルEncodingColorBitSequences[]の最も遠い2色間のマンハッタンRGB距離である。
【0088】
その後、関数Ref()は、最高の候補、つまりマンハッタンRGB距離の合計が最小の開始点を戻す。その後、検出は、開始点および/または復号化されたペイロードの戻りを用いて終了する。マンハッタンRGB距離以外の関数を用いてよいが、それは、本出願人の探索に従ったハミングエラーコーディングの使用との最高の組み合わせを構成する。
【0089】
関数HdDtct()またはPLDtct()のいずれかが負の値を戻す場合、次の画素グループは、解析されて、試験されなくてはならないことを意味する。まず、動作420は、現在のループがマーカーヘッダーの長さまで画素グループを埋めたかを試験する関数GP()を実行する。そうでない場合、インデックスyは、動作422において増分され、ループは、動作406~412を用いて再開する。
【0090】
画素グループが埋められていれば、これらの候補は、有効ではなく、動作424は、関数I()を実行して画像imgの右端に到達したかを判定する。そうでない場合、新たなグループが動作426においてインデックスxが4増分されることによって埋められ、動作404においてインデックスyを0にリセットして、新たな画素グループを用いてループを再起動させる。
【0091】
画像Imgの右端に到達した場合、次の画像Imgのラインを解析するために動作428においてインデックスjが増分され、画像Imgの右下角に到達したかを判定するために動作430において関数J()が実行される。その場合、マーカーヘッダーが見出されることはなく、関数は、動作432において終了する。そうでない場合、インデックスiは、動作434において0にリセットされて、インデックスxは、動作426において4増分されて、新たなグループは、動作404においてインデックスyを0にリセットすることによって埋められて、新たな画素グループを用いてループを再起動させる。
【0092】
水平方向の埋め込みが、プロセッサの推測キャッシュを活用することを可能とするため、これは、バッファを水平方向に埋めることとなり、特に有利であると思われる。
【0093】
上記の発明の使用例は、自分の画面またはウィンドウの共有に関連付けられている。従来、ウェブブラウザは、html2canvasを使用することなく、(これは、JavaScriptを用いてスクリーンショットを作成するために用いられる方法)を使用せずに、この要素を対象としたスクリーンショットを取得するために、get Display Mediaストリームのフレーム内でDOM(Document Object Model)要素を検出する可能性を提供しなかった。よりよい理解のために、getDisplayMedia()は、ユーザーに選択を促して、ディスプレイのコンテンツまたはその一部(ウィンドウなど)をMediaStreamとしてキャプチャする許可を与えるMediaDevicesインターフェースの方法であり、結果となるストリームは、MediaStream Recording APIを用いて録画可能であるか、またはWebRTCセッションの一部として伝送可能である。本発明は、これらの従来の手段を用いることなく、画面またはウィンドウの一部の容易な共有の提供を可能とする。
【0094】
上記は、本発明の使用例としてだけに意図されており、それが用いられ得る多くの他の設定があるため、その範囲を制限することに用いられるべきではない。
【外国語明細書】