【0011】
図2に,潜像技術の概念図を示す。
特定の画像処理に反応して大きく画質劣化するような、潜像パターンを重畳する。潜像パターンをメッセージ203の形で埋め込んだ画像204をコピーすると、想定した画像処理が加わった場合には、メッセージを文字として読み取りやすくなる。すなわち、現れたメッセージによって不正行為をけん制できる。想定した画像処理と少し異なる画像処理であっても、エイリアシング効果によって、画質劣化しやすい性質の画像となるため、不正利用抑止に寄与する。さらに、いろいろな画像処理に反応するよう、それらに対応する複数の特性を持った潜像を混在させると、効果的にメッセージを表出させやすくなる。
第1の実施例について説明する。
図1に,第1の実施例の潜像埋め込み方法を備えた計算機を示す。
計算機102は,CPU(Central Processing Unit)106,ディスク105,メモリ104,入力装置101,出力装置103を備える。入力装置101は画像,ユーザ入力,通信入力などを受けて計算機102にデータを入力する。出力装置103は,計算機102から出力された画像,ユーザ出力,通信出力を受け,ディスプレイ,録画機,別システムとの連携手段などの役割を担う,メモリ104またはディスク105に,潜像埋め込み処理107,電子透かし埋め込み処理109,全体統括処理106を行うプログラムを備え,CPU106の制御のもとで,画像に潜像を重畳して出力する計算処理を行う。
全体統括処理106は計算機全体を制御する。さらに,現在時刻やユーザ名などの情報を管理データ108として記録あるいは読み出しを行う。さらに,入力画像を潜像埋め込み処理107に渡し,入力装置101から入力されたユーザ入力あるいは管理データ108に基づき,潜像埋め込み処理107と電子透かし埋め込み処理109を切り替え,必要なデータを渡す。
潜像埋め込み処理107は,原画像入力110,潜像メッセージ入力111,潜像パターン生成112,潜像適合性分析113,潜像重畳114,潜像埋め込み画像出力115を行うそれぞれの処理方法を備える。入力あるいは自動生成された潜像メッセージ画像から,潜像パターン生成処理112によって,潜像パターンを生成する。計算機タイマから日付時刻や利用者IDの文字列を取得し,それを画像変換することによって,潜像メッセージ画像を自動生成してもよい。入力された原画像から,潜像適合性分析処理113によって,どこにどの程度潜像を埋め込むべきか判定する。判定結果に基づき,潜像重畳処理114によって,原画像に潜像パターンを重畳する。潜像埋め込み画像出力処理115によって,重畳された画像を出力する。
ここで,潜像の信号を,電子透かしの信号よりも強く設定するとき,潜像を埋め込んだ後に,電子透かしを埋め込む処理を行う。さらに,画像を小領域に分割して分析し,不可視の電子透かしに適した高周波領域と,潜像に適した低周波領域を識別した上で,両者の共存を行う。
図3に,潜像適合性分析処理の全体的な流れを示す。
ステップ301において,原画Y[w,h]307を読み込む。
ステップ302において,原画Yにフィルタ演算を施してフィルタ画像を作成し,さらに,原画Yとの差分から,フィルタ差分画像dY[w.h]を生成する。フィルタfa()には,ノイズ除去用の画質維持フィルタ,平滑化フィルタなどを用いる。
ステップ303において,潜像で用いるメッセージ画像(サイズpw×ph)の大きさに基づき,潜像埋め込み適合性について,関数fb()を用いて大域的に判定を行う。関数fb()の処理を示す。まず,メッセージ画像を構成する1文字の縦横半分ずつの大きさを1つのブロックとして,フィルタ差分画像を小領域に分割する。1文字をまとめて処理することにより,潜像の可読性を高める。次に,ブロック内のフィルタ差分画像の値の最大値をブロック値として,ブロック全体に適用する。最大値の逆数を用いてもよい。
前記ブロック値を,あらかじめ定めたしきい値と比較し,値の上限下限を調整する。最大値が一定値以上の小領域は,高周波領域であり,潜像埋め込みに必ずしも適さない。最大値が小さい領域は低周波領域であり,潜像に適する。高周波領域には,オブジェクトのエッジ部分を含む。潜像埋め込みにより画像のエッジ部分を変更すると,潜像埋め込み画像の画質劣化を生じやすい。ブロック値が低い場所に潜像を埋め込まないことにより,潜像埋め込み画像の画質を維持できる。すなわち,潜像を埋め込んだ小領域では,表出する潜像メッセージの1文字以上の可読性を確保すると共に,可読性が確保しにくい性質の画像小領域では,潜像埋め込み画像の画質維持ができる。このようにして,大域判定結果D[w.h]310を得る。
ステップ304において,大域判定データD[w.h]310をそのまま潜像適合性情報として利用すると,ブロックごとに潜像埋め込み強度がステップ状に分かれるため,隣接するブロック同士の境目が潜像固有のブロックノイズを生じうる。そこで,補正処理fc()を行って,ブロック境界近くの値を隣接するブロックの値に近づけたE[w,h]を得る。例えば,ブロック境界にある複数画素について,線形補完値を利用してもよい。
ステップ305において,ユーザが指定する潜像強度を反映する。
ステップ306において,潜像強度マップSを作成,保存(あるいは出力)する。
図4に,潜像パターン生成処理を示す。
ステップ401において,メモリ領域確保など,変数の初期化を行う。
ステップ402において,入力装置からのユーザ指定,あるいは,あらかじめ定めておいたパラメータを用いて,メッセージ画像MP[pw,ph]を生成する。前提条件が整って潜像が表出した際に,メッセージ画像を人が認知してメッセージを読み取る。
ステップ403において,潜像基本パターンを生成する。潜像基本パターンは,2値データ(0か1)の2次元配列であって,縦横の要素数が原画像と同じ大きさであるような擬似乱数列である。多値でもよいし,負号があってもよい。縦横の要素数が原画像より少なくても,縦長でも横長でも,繰り返し利用すればよい。
ステップ404において,潜像パターンP[w,h]の中に,メッセージ画像MP[pw,ph]を複数回繰り返し配置する。水平方向i,垂直方向jは,何番目のメッセージ画像を処理するか,XY座標での位置(i,j)を示す。i,jの最大値は,それぞれ,水平あるいは垂直方向に潜像パターンPの中に配置可能なメッセージ画像の数であり,最大,w/pw,h/phである。座標(x,y)は,メッセージ画像内の座標系の元で,メッセージ画像内の注目画素の座標を示し,それぞれ最大値はpw,phである。繰り返し処理パラメータi,j,x,yの値を順次変えながら,次の処理を繰り返し行う。
ステップ405において,座標(Xp,Yp)は,潜像パターンP[w,h]における処理対象画素の座標を示し,i,j,x,yの値によって定まる座標である。また,同時に,潜像基本パターン[w,h]における処理対象画素の座標を示す。
ステップ406において,潜像パターンの特定画素の値P’(Xp,Yp)は,対応する画素の潜像基本パターンP(Xp,Yp)と,メッセージ画像MP(x,y)の積の値を用いて,α,βをパラメータとする1次線形変換した値として得る。
ステップ407において,生成した潜像パターンP’[w,h]を出力する。すなわち,潜像としての画像処理特性を備えたメッセージ画像がタイル状にならぶ。複数メッセージ画像の一部が反転してもよい。
ここで,数1,数2を用いて,潜像ポテンシャルの作成方法を示す。
【0014】
数1(a)を用いて,原画s(縦hs,横ws)をコピー画tに縮小率αで縮小する想定にて,変数を初期化する。コピー画t座標系上の注目画素Pt(p,q)について,次の処理を繰り返す。
数1(b)を用いて,注目画素Pt(p,q)に対応する原画座標系上の参照点Rs(Rx,Ry)座標を計算する。
数1(c)を用いて,原画座標系にて,参照点Rs(Rx,Ry)の左上最近傍にある原画sの画素の座標(NNx,NNy),および,その画素と参照点Rsとの距離dx,dyを計算する。
数2(a)を用いて,原画座標系にて,ある画素と参照点との距離dに応じた重み値を算出する関数fw()を定義する。バイキュービック法の重み付け例などが利用できる。
数2(b)を用いて,原画座標系にて,参照点Rsの周辺16点について,それぞれの重み値Wを計算する。
数2(c)を用いて,原画座標系の対応画素(x,y)の重み値Sw(x,y)に重み値Wを加算する。Wの絶対値を加算してもよいし,変換テーブルを介して重み付け加算してもよい。
以上の繰り返し処理によって,原画座標系における重み値Sw(x,y)を得る。これを潜像ポテンシャルと呼ぶ。上記潜像ポテンシャルSwは,縮小率αに固有の周波数特性を備えて,値の強弱の分布が格子模様状の2次元配列となる。潜像ポテンシャルは原画画素の位置が持つ属性であって,潜像適合性の判定要素のひとつである。潜像ポテンシャルの計算においては,想定する画像処理を,バイキュービック縮小処理以外の信号処理,例えば,拡大,圧縮符号化などとして演算してもよい。
潜像の表出箇所に埋め込む信号と消失箇所に埋め込む信号とが,均等な電力であって,画像の小領域ごとに電力量がゼロ近くとなるよう信号波を調整するために,潜像ポテンシャルを補整しながら利用する。潜像メッセージの模様を潜像ポテンシャルの大きな画素に重畳し,潜像ポテンシャルの小さな画素には,潜像メッセージと逆の模様を重畳することにより,小領域における潜像信号の信号電力総和を小さくすることができる。逆の模様とは,例えば,潜像メッセージが(0,2,5,−2)とあるとき,符号反転して(0,−2,−5,2)とする。もし,小領域において,潜像ポテンシャルの大きな画素が多すぎる場合には,信号電力総和を小さくするよう,重み付けをして模様を描いても良い。
さらに,潜像ポテンシャル計算結果を利用して潜像基本パターンを生成する方法を示す。
潜像ポテンシャルを示す2次元配列Sw[x][y]を用いて,潜像基本パターンを得る方法は次の通りである。
潜像の強度をV,乱数をR(乱数の範囲は0〜1,0.5〜1,−1〜1など),2値形式であって,前景1,背景−1の値を取る潜像メッセージをM[i][j]{=−1,1|0≦i≦w,0≦j≦h},潜像メッセージを原画上にタイル状に並べて埋め込む時,原画座標系(x.y)に相当する潜像メッセージ上の座標系の画素の座標を(x’,y’),と定義する。(x’,y’)は,x/w,y/hの剰余として計算する。このとき,これらの積の計算,すなわち,Sw[x][y]×V×M[x’][y’]×Rによって,潜像基本パターンを得る。あるいは,Sw[x][y]の平均値によってしきい値を設定し,Sw[x][y]を2値化して潜像基本パターンとしてもよい。
潜像基本パターン,潜像パターン,潜像メッセージ画像を横長の形で図示したが,これらの形状が横長であってもよいし,縦長であってもよい。さらに,3次元投影変換などを想定した球形などの任意の形状を利用してもよい。例えば,初期設定の潜像メッセージ画像を縦方向に2倍拡大してから利用することができる。このとき,縦長矩形領域に表現した潜像は,インタレースプログレッシブ変換処理やダウンコンバーション処理など,垂直方向固有の画像処理を受ける場合に特に有効であり,潜像埋め込み画像を画像処理した後の潜像可読性を向上させる,
図5にブロック境界領域補正処理の概要を示す。
メッセージ画像(pw×ph)502を構成する1文字503の大きさを示す領域に対して,その半分程度の大きさ(bw×bh)をブロックサイズとして利用する。さらに,隣接する複数ブロックとして,あるブロック(i.j)と(i−1,j)に注目する。大域判定データの1要素D[i,j]の値が,大域判定データの隣の要素D[i−1,h]と異なる場合には,隣接する複数ブロック504の境界部分の補正幅cwの範囲において,隣のブロックの大域判定データD[i−1,h]の値を参照した補正処理を行う。メッセージ画像を構成する1文字の縦横半分ずつの大きさを補正幅cwとしてもよい。ブロック境界領域補正処理によって,ブロック境界領域補正データE[w,h]505を得る。この補正により,潜像固有のブロックノイズを軽減する。
図6に,ユーザ指定強度反映処理の処理内容を示す。
ブロック境界領域補正データE[w,h]505と,原画307を用いる。入力装置を用いた入力,あるいは,ディスクにあらかじめ保存しておいた情報等によって,潜像強度を定める。潜像強度は,潜像によって変更する画素値の量とそれに関連するパラメータ郡である。絵柄に依存する部分を考慮し,ユーザが指定する強度を反映させる。ユーザ指定強度反映処理603では,原画の輝度成分を参照し,画像の明るいところに潜像を強く入れる判断を行う。原画の特徴を反映させる他のルールを利用してもよい。その際に,ユーザが指定する強度を反映する倍率関数b()について,
図6に示すように,関数入力と関数出力について,それぞれの上限と下限(Imax,Imin,Bmax,Bmin)をステップ状関数で指定する。すなわち,これらがユーザ指定パラメータである。
図7に,潜像重畳処理の流れを示す。
ステップ701において,原画Y[w.h],ステップ702において,潜像パターンP’[w.h],ステップ703において,潜像強度マップS[w.h]をそれぞれ読み込む。
ステップ704において,潜像パターンと潜像強度マップの積を原画に加算,すなわち,Y’=Y+S*Pの計算により,潜像埋め込み画像Y’706を作成する。複数画像の重畳表示機能を備える計算機などでは,加算処理部分を別の処理ブロックが担ってもよい。
ステップ705において,潜像埋め込み画像Y’を出力する。
本発明の第2の実施例として,ディスプレイセキュリティへの応用システム例を示す。本実施例ではウィンドウ単位での潜像埋め込み方法を示す。PCモニタのデバイスドライバ等に潜像技術を装備することにより,重要情報が表示されたPC画面を携帯電話等で撮影した際に,撮影画像上あるいは保存写真から撮影者に対して警告メッセージを示すことができる。また,ネットワーク透過性を備えたウィンドウシステムでは,サーバ機器での処理結果はサーバ機器から描画要求,あるいは描画結果送信として出力され,クライアント機器で再度描画されて出力する。クライアントPCモニタのデバイスドライバでなくとも,ウィンドウ単位のサーバ処理において潜像重畳することができる。データセンタの管理オフィス内など,重要情報を管理する機器におけるディスプレイセキュリティに寄与する。
図8は,第2の実施例で,ウィンドウ単位での潜像埋め込み方法の課題とその解決イメージを示す。
潜像は,特殊な画像処理を加えない限りは可視化しない性質を持つ。しかし,
図8では説明のために,潜像が可視化した場合の見え方を示している。
スクリーン801は,背景としてスクリーン全体に潜像を重畳した状態を示す。いわばPCのウィンドウシステム起動直後である。
スクリーン802は,前景となるウィンドウが生成され,そのウィンドウだけに潜像を単純に埋め込み,スクリーン801の背景と重畳描画した結果である。潜像の位置が全体として不均質となる。
スクリーン803は,前景のウィンドウが移動して再描画された状態を示す。不均質な状態は継続し,ウィンドウ位置などによっては,さらに,潜像の模様に起因したブロックノイズが生じうる。
スクリーン804は,本実施例における潜像の埋め込み方法を用いて,前景となるウィンドウが生成され,そのウィンドウだけに潜像を単純に埋め込んだ結果を示す。
スクリーン805は,本実施例における潜像の埋め込み方法を用いて,前景のウィンドウが移動して再描画された状態を示す。
図9は,第2の実施例で,ウィンドウ単位での潜像埋め込み方法において,ウィンドウ移動時の幾何的な位置関係を示す図である。
スクリーン901の原点に対して潜像904の重畳位置を固定させるものとする。スクリーン座標系において,あるウィンドウ903の左上の点902(AXs,AYs)が,別の点910(AXs’,AYs’)に移動するという,(X,Y)ベクトル移動するイベントが発生したと考える。この時,移動前のウィンドウ903の中の座標系における注目画素905の位置(xa,ya)に重畳する潜像の画素は,スクリーン原点から見て移動しないよう,ウィンドウ907の中の座標系においては,潜像が(−X,−Y)移動したとみなすのが基本的なアプローチとなる。さらに,ウィンドウ単位の逐次高速描画,画面全体としての潜像均質化,ウィンドウ境界部分のブロックノイズ低減のために,以下の方法を用いる。
図10は,第2の実施例で,モニタデバイスドライバにおいて潜像技術を適用した応用システム構成例である。
計算機1001は,入力機器1002,出力機器1003を備え,CPU1009,タイマ1010,ディスク1008,通信制御手段1007,入力制御手段1006,メインメモリ1004,グラフィックカード1005を備える。
メインメモリ1004上に,複数のアプリ(ソフトウェアプログラム)1011と,計算機1001を統括するOSカーネル1012と,実モニタデバイスドライバ1014,仮想モニタデバイスドライバ1013を読み込み,CPU1009の制御のもとで,利用者の入力指示に従って,あるいは,アプリの動作に従って,計算機は計算処理を行う。仮想モニタデバイスドライバ1013は,潜像パターン作成処理1015,潜像重畳処理1016を行う方法を備える。
グラフィックカード1005は,グラフィックメモリ1018とGPU(Graphic Processing Unit)1017を備える。グラフィックメモリ1018上に,潜像パターンデータ1019,重畳方法1020,描画方法1021を読み込み,GPU1017の制御のもとで,実モニタデバイスドライバ1016,仮想モニタデバイスドライバ1014の要求に沿った連携動作を行う。
潜像を埋め込まない場合には,仮想モニタデバイスドライバ1013を通った描画要求は,実モニタデバイスドライバ1014に送られ,グラフィックカード1005にて,描画方法1021によって描画した出力データを,出力バッファ1023に格納する。出力バッファ1023に格納された描画内容は,信号出力方法1024によって,最新の内容を逐次読み出し,モニタ信号として出力機器(モニタなど)1003に対して信号出力する。
潜像を埋め込む場合には,仮想モニタデバイスドライバ1013上に搭載した,潜像パターン作成処理方法1015によって,潜像パターンデータ1019を作成し,これをグラフィックカード1005のグラフィックメモリ1019に格納する。潜像パターンデータ1019はインストール時や起動時など,あらかじめ作成したものを繰り返し用いてもよい。潜像重畳処理方法1016によって,描画結果に潜像を重畳するよう,グラフィックカードに指示を送る。アプリ1011,OSカーネル1012から送られた描画要求は,実モニタデバイスドライバ1015の処理を経て,グラフィックカード1005に送られ,描画方法1021によって,画面を描画する。
描画方法1021によって作成された出力データに対して,潜像パターンデータ1019に基づいて潜像を重畳した後に出力バッファに送る。
ネットワーク接続された2台の計算機,クライアント機とサーバ機において,実モニタデバイスドライバ1014をクライアント機に備え,仮想モニタデバイスドライバ1016,潜像パターンデータ1019,重畳方法1020,描画方法1021をサーバ機に備えて,サーバ出力画面をクライアント機で表示してもよい。これらの機能モジュールをサーバ,クライアントどちらの機器内に装備しても,ネットワーク透過性を持ったウィンドウへの潜像重畳ができる。
図11に,第2の実施例で,ウィンドウ内描画における潜像パターン生成処理の処理フローを示す。スクリーン座標系において,ウィンドウ左上の点の座標がPs(AXs,AYs)とする。潜像基本パターンおよびメッセージ画像は,スクリーン座標系においてタイル状に敷き詰める位置に配置する。
ステップ1101において,潜像として表出させたいメッセージ画像の二次元配列MP[0〜pws][0〜phs]を読み込む。
ステップ1102において,特定条件の画像処理を受けると反応する特性を備えた潜像基本パターンをあらかじめ作成しておき,その二次元配列データP[0〜wb][0〜hb]を読み込む。
ステップ1103において,ウィンドウ内座標系における注目点(xa,ya)について,以降の繰り返し処理を行う。
ステップ1104において,スクリーン座標系における注目点の座標(xs,ys)を計算する。
ステップ1105において,注目点が含まれるメッセージ画像内座標系における注目点の座標(px,py)を計算する。AをBで割った余りを求める関数をReminder(A,B)と表す。メッセージ画像がスクリーンにタイル状に並ぶとき,スクリーン座標系の座標値を,メッセージ画像のサイズで割った余りが,求める座標値となり,Reminder関数で得ることができる。
ステップ1106において,注目点が含まれる潜像基本パターン内座標系における注目点の座標(bx,by)を計算する。
ステップ1107において,潜像パターンを示す二次元配列の1要素Pw[xa][ya]は,積算MP[px][py]×P[bx][by]によって得る。
スクリーン全体(画面の背景)も1つのウィンドウであり,スクリーン全体の潜像パターンPwをこの処理によって計算し,潜像パターンデータとして,グラフィックメモリに格納する。メッセージ画像もグラフィックメモリに格納する。
図12に,第2の実施例で,ウィンドウ内描画における潜像パターン生成処理の別の例を示す。
ステップ1201において,グラフィックメモリ1018にスクリーン全体の潜像パターンをあらかじめ格納しておき,これを再利用すると,あるウィンドウT’における潜像パターンは,
図11に示した処理によらず,より高速な方法によって,潜像パターンを計算できる。なお,潜像パターン作成処理1015をグラフィックカード上メモリ1018に搭載し,GPUを用いて処理を行ってもよい。スクリーン座標系において,ウィンドウT’の左上の点の座標がPs(AXs,AYs)であるとする。
ステップ1201において,メッセージ画像の二次元配列MP[0〜pws][0〜phs]を読み込む。
ステップ1202において,潜像パターンの二次元配列データP’[0〜ws][0〜hs]を読み込む。
ステップ1203において,ウィンドウ内座標系における注目点(xa,ya)について,以降の繰り返し処理を行う。
ステップ1204において,潜像パターンを示す二次元配列の要素Pt[xa][ya] は,P’[AXs+xa][AYs+ya]によって得る。
ステップ1205において,ウィンドウT’の潜像パターンを示す二次元配列Ptを得る。
なお,モニタデバイスドライバの扱うウィンドウは大小様々である。ボタンひとつひとつに潜像を重畳しなくとも,ある特性(例えば一定大きさ以下)のウィンドウに対しては,潜像作成処理,潜像重畳処理を行わずに,実モニタデバイスドライバを用いて普通に描画してもよい。そのためのウィンドウ判定処理を仮想モニタデバイスドライバに備える。
図13に,第2の実施例で,ウィンドウ単位での潜像重畳処理の処理フローを示す。
ステップ1301において,描画処理によって,ウィンドウ描画画像Y[0〜ww][0〜hw]1306を生成する。ウィンドウに文字列を表示するイベントがあった場合を想定する。
ステップ1302において,仮想モニタデバイスドライバの指示によって,潜像パターン生成処理を行い,潜像パターンP’[0〜ww][0〜hw]1307を生成する。
ステップ1303において,潜像強度マップS[0〜ww][0〜hw]1308を生成する。
ステップ1304において,潜像埋め込み画像Y’1309を作成する。ウィンドウ描画画像1301を原画として,潜像強度マップS1308と潜像パターンP’1307の積を原画に加算(Y’=Y+S×P)することによって,Y’を計算する。
ステップ1305において,潜像埋め込み画像Y’[0〜ww][0〜hw]1309を出力バッファに書き込む。
潜像強度マップ1308は,例えば,ウィンドウ描画画像Y1306に対してローパスフィルタを施したフィルタ値を用いてもよいし,任意の画像処理フィルタ出力値を利用できる。あらかじめ定めたパラメータを用いてもよい。ローパスフィルタを施した場合,ウィンドウ描画画像Yの高周波成分,すなわち,エッジ界隈への潜像埋め込みが抑制され,潜像埋め込み画像Y’1309の画質維持に寄与する。また,ウィンドウ周辺部分への埋め込みを抑制するドーナツ型(あるいは矩形状)のフィルタをお用いてもよいし,その逆に強調してもよい。ドーナツ型のフィルタ例は,ウィンドウサイズが3x3のとき,[0,0,0][0,1,0][0,0,0]である。
図13の潜像強度マップ1308では,中央値の潜像が残り,周辺部の潜像は消失,あるいは,ウィンドウ周辺方向に向けて連続的に弱体化する。適切なフィルタの適用により,ウィンドウ境界部分でのブロックノイズが弱まって,スクリーン全体の画質が維持される。潜像を埋め込む代わりに,電子透かしを埋め込んでもよい。
また,ゲームやCG(コンピュータグラフィックス)の描画処理では,複数オブジェクトを1スクリーンに重畳表示させて1枚のユーザ画面を構成する。CGは,複数のユーザ画面を連続生成した結果が動きとなりうる点で動画でもある。潜像を個々のオブジェクト画像に重畳する場合には,ウィンドウシステムの描画処理と技術的に同等であり,ユーザ画面に潜像を重畳する上で,本実施例が適用できる。