hirax.net::Keywords::「モアレ」のブログ



1998-11-20[n年前へ]

モアレはデバイスに依存するか? 

 まず、以下のような2つの同心円画像をつくる。(なお、このような画像を簡単に作るために、Photoshop用のフィルターを作った。詳しくは「Photoshopの同心円フィルターを作る。」を参照して頂きたい。)
 以下の2つの画像は少し中心位置がずれている。また白く見えるところは255の値を持ち、黒く見えるところは0の値を持っている。(画像自体は512x512であり、表示の際に128x128に変換している。だから、この画像をそのまま保存して頂ければ、512x512のサイズで保存することができる。)
2つの同心円画像、画像1と画像2。上と下は少し中心位置がずれている。
 次に画像1と画像2をPhotoshopで重ね合わせる。ただし、 Photoshopでは黒=0であり、白=255である。すると、
  1. 黒(0)+黒(0)=0(すなわち黒)
  2. 白(255)+白(255)=255(すなわち白)
  3. 黒(0)+白(255)=255(すなわち白)
となってしまう。最初の2つはLBPで出力したOHPの場合と同じだが、最後の(黒+白=白)が違う。黒の方が白より値として小さいのが原因である。そこで、次のようにしてやればよい。
  1. 画像1を白黒反転し、画像1'を作る。
  2. 画像2を白黒反転、画像2'を作る。
  3. 画像1'と画像2'を加算し、画像3を作成する。
  4. 画像3を白黒反転し、画像3'を作成する。
 この画像3'が求める画像である。物理学的には波の干渉などの説明に使うと便利なOHPである。
OHPの重ね合わせをPhotoshopで真似た画像3'

 それでは、以上の画像変換を小さい画像でまとめて表示してみる。
計算実験A:同心円のOHP風重ね合わせ(画像1+画像2=画像3')
画像1
画像2
画像3'
 点光源から発される単波長光の干渉の説明にはちょうどいいOHPである。

 ところで、上の3つの画像をそれぞれ平滑化してみる。すると、以下のようになる。

画像1,2,3'をそれぞれ平滑化したもの
画像1を平滑化したもの
画像2を平滑化したもの
画像3'を平滑化したもの
 かなり平滑な、画像1と画像2を重ね合わせた画像3が平滑でなく、明確な模様を持つのは不可解である。レーザーの干渉であれば当然このような干渉縞ができるが、これはレーザー光の重ね合わせなどではない。それでは、一体なぜこのような現象が生じるのだろうか。なぜ、平均値が保存されていないのだろうか。
 以下でもう少し詳しく考えてみる。

重ね合わせにおける加算演算

 下のような画像A、画像Bを考える。拡大してあるが、画像自体は1x2ピクセルのサイズである。また、白=255、黒=0とすれば、いずれも平均値は128程度である。
画像A、画像B
 ここで、
  1. 黒+黒=黒
  2. 白+白=白
  3. 黒+白=黒
という加算演算がなりたつとして、いくつか演算をしてみる。

加算演算の例(左+中央=右)
画像A
画像A
画像A
画像A
画像B
画像C
画像B
画像B
画像B

 これに平均値も示すと以下のようになる。ここでは、LBPなどの紙に出力する際によく使われる、白=0、黒=255という表記をする。

加算演算の例(左+中央=右)
下段は平均値の加算における変化を示す。
画像A
画像A
画像A
128
+ 128
= 128
画像A
画像B
画像C
128
+ 128
= 256
画像B
画像B
画像B
128
+ 128
= 128

 同じ128+128でも、結果は128になるか256になるかの2種類ある。同じもの同士であれば、結果は128であるし、そうでなければ256になる。そのために、平均値が保存されないのである。このように、平均値が保存されない、言い換えれば、加算演算の結果が線形でない場合にはモアレが発生することになる。もしも、マクロに見て「128+128=256」が多い領域があれば、それはモアレの黒い部分であり、そうでない所は比較的明るい部分であるということになる。

ロゲルギストの-モアレが生じる理由は黒さの非線形性による-という言葉はこの「128+128=128、と128+128=256という結果の違いがあり、それがモアレの原因である」ということを示している。

 それでは、そのような現象「128+128=128という非線形性」が起きない状態を作ってみる。それには加算の結果である黒がサチらないようにすれば良い。

サチらない加算演算の例(左+中央=右)
下段は平均値の加算における変化を示す。
画像A
画像A
画像A
64
+ 64
= 128
画像A
画像B
画像C
64
+ 64
= 128
画像B
画像B
画像B
64
+ 64
= 128


 これでは、いずれの状態でもグレー+グレー=黒、すなわち、64+64=128という風になっている。これは黒がサチっていないからである。すなわち、-モアレが生じる理由である黒さの非線形性さ-がない状態になっている。
 それでは、この状態で計算実験Aと同じことをしてみる。それを計算実験Bとする。念のため、計算実験Aをもう一度示す。

計算実験A:同心円のOHP風重ね合わせ(画像1+画像2=画像3')
画像1
画像2
画像3'
 
計算実験A:画像1,2,3'をそれぞれ平滑化したもの
画像1を平滑化したもの
画像2を平滑化したもの
画像3'を平滑化したもの



計算実験B:グレー+グレー=黒 の場合
画像1の黒=0を128にした画像4を平滑化したもの画像2の黒=0を128にした画像5を平滑化したもの 画像4,5を加算したもの

 モアレができていないのがわかるだろうか。これはグレー(128)+グレー(128)=256(もっと黒)で線形な関係が成り立っているからである。平均化された画像で濃度がどこも倍近くになっているのがわかると思う。

モアレのデバイス依存性

 LBPではトナーが有る所、すなわち、画像が有る所はほぼ完全に影になる。例え、2枚重ねてもやはり影のままである。しかし、インクジェットならどうだろうか。OHPで使うと、黒といってもLBPに比べて薄い。1枚のOHPの黒よりも、2枚のOHPの黒を重ねた方がかなり黒い。ということは、「黒+黒=もっと黒」と同じである。したがって、OHPを重ね合わせても濃度が保存されている。すなわち、モアレが比較的に出来にくいことになる。ということは、OHPを何で作るかによってモアレの具合が変わることになる。付け加えれば、実際のOHPの場合には透過率を考えなければならない。透過率というものは単なる重ね合わせでない、具体的に言えば、加算演算でなく乗算演算である。それでも、話としては大体は同じことである。

 今回はOHPの話に絞ったが、透過原稿でなく反射原稿についても同じである。むしろ、反射原稿の方が乗算演算でなく、加算演算である分、今回の話そのままである。したがって、一般的なモアレについてインク(もしくはそれに相当するもの)の加算演算の具合によって、モアレの発生具合が違うと考えられる。

 また、話の単純のために白黒の話に限ったが、カラーのモアレなどについてもほぼ同じであろう。トナーとインク、また、混ざりやすいものと混ざりにくい物の違いなどでも面白い結果が出そうである。TVや液晶のようにほぼ線形の重ね合わせが成り立つであろうものと比較するのも面白そうである。

 今回の話を考えている途中で、OHPの重ね合わせと干渉の共通点については、結構奥が深いような気がしてきた。そのため、別の回でもう少し詳しく考えたい。


1998-11-21[n年前へ]

同心円を描くPhotohoのプラグインを作る。 

 「モアレのデバイス依存について考える。」の過程で作成した、同心円を描くPhotoshopのプラグインについてメモしておく。
 作ったプラグインの名前はCirclePlotである。プラグインメニューではJunHiraxというジャンルの中に現れる設定にしてある。

Windows版 プラグインファイル (circleplot.8bf)

 右クリックで「ソースを保存」すれば良いと思う。

 これがCirclePlotプラグインの画面である。スライダーを動かすことにより、同心円の周期、中心位置のX座標、中心位置のY座標、振幅の最大値を調節できるようになっている。

プラグインの画面

 例えば、このような画像を作成することができる。フィルターをかけると、元画像がどのようなものであっても、とにかく同心円を描く。

フィルターをかけた時のサンプル画像

 ちなみに、使ったパラメータは以下のようになる。このパラメータを使えば、Macintosh版でも同じくCirclePlotを使うことができる、と思う。また、パラメータを見れば、どのようにして同心円を描いているかわかるだろう。

パラメータ

1998-11-22[n年前へ]

OHPによるモアレと光の干渉の相似について考える。  

ヒラックス・ディザの提案

- ヒラックス・ディザの提案 -
(1998.11.22)
 「モアレのデバイス依存について考える。」の時にOHPの重ね合わせについて考えた。その時に、OHPの重ね合わせで光の干渉を表現するやり方について説明した。その時に、「OHPの光、すなわち、干渉性などほとんどない光を使って、光の表現をするのであるが、本質はほとんど同じである」という気がしたので、考えてみたい。また、OHPの重ね合わせに関連して、面白いディザ処理を思い付いたので、それについても考えてみたい。

「位相保存ディザマトリックス」

 まず初めに、4 x 1ドットからなる基本マトリックスを考える。その各ドットは白か黒の値を持つ。例えば、このような感じである。

4x1ドットからなるマトリックス

 この「黒、黒、白、白」というパターンを次の図と見比べる。

位相遅れ0の矩形波、(4つに分割すると、「黒、黒、白、白」となる)
「黒、黒、白、白」というパターンがよく似ていることがわかると思う。4x 1ドットの左を位相0として、各ドットを左から位相0,90,180,270としてやる。すると、4x1ドットのマトリックスで任意の位相の矩形波を表現できることになる。表現した例を以下に示す。

4x1ドットのマトリックスで各位相の矩形波を表現した例1

「モアレのデバイス依存について考える。」で行ったようにこのようなパターンをOHPで打ち出し、重ね合わせてみる。例えば、位相0と位相180のものを重ね合わせたらどうなるだろうか。4x1ドットのマトリックスの全てが黒になる。すなわち、真っ黒になるのがわかるだろう。それでは、位相0と位相90のものではどうだろうか。4x1ドットのマトリックスの内、3ドットが黒、1ドットが白である。位相が同じものどうしを重ね合わせると、元と同じく、2ドットが黒、2ドットが白である。
 ということは、「位相が同じ物どうしであれば、元の明るさを保持する」、「位相が逆であれば真っ黒になる」、「位相が少しずれているのあれば、明るさはその分少し暗くなる」という性質があることがわかる。光の干渉の場合とほとんど同じ性質を持っているのがわかると思う。違うのは、同じ位相のものどうしが重ね合わさった時に、重ね合わせた分明るさが2倍になるか、そうでなくてそのままなのかという違いだけである。
 つまり、この4x1ドットのマトリックスは「きちんと演算が成立する位相情報が記録されている」ということになる。そして、位相が異なるものを重ね合わせた時の位相情報の保存までも考えてやるならば、先ほどの例1は次のように位相の定義を変えてやるほうがいいと思う。

各矩形波の黒の中心位置として位相の値を定義し、4x1ドットのマトリックスで各位相の矩形波を表現した例2

 この例2では位相の数字は各矩形波の中心位置を現すことにしている。それでは、この定義を用いて、位相90,180のものを足しあわせたらどうなるだろうか。下に示すのがその結果である。

例2の定義を用いて位相90,180を足しあわせると

 位相90と位相180のものを足しあわせると、波形はブロードになり、中心すなわち位相135のものができているのがわかる。また、明るさはこれまでが、2/4だったものが1/4であることになり、強度も弱まっているのが表現されている。

 つまり、このようなマトリックスによる表現は波の持つ位相と強度と波形を表現し、演算も成り立っていることがわかる。それでは、例2の基本マトリックスが縦方向に繰り返されている画像(1(基本マトリックス)x8ピクセル)を考える。こんな感じである。

例2が繰り返されているもの

 これは下方向から進行している矩形波の様子そのままである。なお、この図でも基本となるマトリックスは4x1ドットであるから、この例では要素としては1x8ピクセルを示しているのである。どの要素も振幅(強度)自体は同じである。平均の明るさは同じである、と言い換えても良い。また、波形自体も同じである。しかし、位相が異なっている。波の進行そのままである。

さらに強度情報を加える

 このような白、黒のみの2値表現(といってもこの表現にはモアレが欠かせず、そのためには2値表現がふさわしい)では、波の位相、波形、強度を独立に変化させることはできない。例えば、波の波形を変えると強度も変わってしまう。それを独立にしてやろうと思ったら、階調を増やしてやれば良い。しかし、2値表現のままという制限付きであるから、面積階調を使うことになる。これまで4x1ドットのマトリックスで表現していたものを、例えば、4x4ドットのマトリックスにしてやればよい。以下にその例を示す。例Aの強度が例Bの1/4であることがわかるだろう。


4x4ドットのマトリックスで強度の快調を表現した例A

4x4ドットのマトリックスで強度の階調を表現した例B

 このような「位相、波形、強度情報を保存し、演算も成立する」マトリックス表現を仮に「HiraxDither(ヒラックス・ディザ)」と呼ぼう。先の「モアレのデバイス依存について考える。」で使ったスペックルパターンの例はこのヒラックス・ディザの簡易なもの(2x1基本マトリックスのもの)を使っていた。
 また、「モアレのデバイス依存について考える。」で使った同心円状の画像のモアレのパターンは実はヒラックスパターンの特殊な例(1x1基本マトリックスのもの)を用いていたのである。そこでは、単に位相情報しか記憶されていない。この場合には、白、黒が位相情報を現していたのである。だから、黒、黒どうしの所(すなわち、位相が同じ所)では平均の明るさは変化せず、黒、白が重なった部分(すなわち、位相が反対である所)でのみ打ち消し合い、暗くなっていたわけである。波形も、強度情報もこの場合には記録されていない。

「ヒラックス・ディザ」とホログラフィーの相似点

 このようなヒラックス・ディザの「ディザ・パターン内部、すなわち、微視的には位相情報や振幅情報を記録し、巨視的に見ると強度分布のみが認識される。また、相互の演算(干渉)によって違う画像を再生することができる。」という特徴は実によくホログラフィーと似ていることがわかる。

 また、もう少し深く考えると、もっと他の分野とも繋がるかもしれない。いずれ、また考えてみたい。

1999-03-18[n年前へ]

「踊る大捜査線」風のアプレットをつくる 

おどるでく

 「踊る大捜査線」にはまった人は多いはずだ。何度となく映画館へ行ったり、ビデオを観たりしている人も結構いる。それだけでなく、無駄な会議中に馬鹿な上司達に「事件は会議室で起きてるんじゃない!現場で起きてるんだ!」と叫んだ人もいると人づてではあるが聞いている。あるいは、ポジティブに「俺は現場で頑張る!」と言った人もいるという。少なくとも、そう思ったことのある人はいるだろう。かくいう私も「踊る大捜査線」にはまったそのような一人である。TVシリーズの最終回に青島と室井が2人で話す警視庁(のロケ場所)は私の勤務先でもあり、色々重ねて観てしまうのである。

 私も「踊る大捜査線」が大好きではあるが、世の中には尋常ならざる「刑事物マニア」なども生息しているようであり、これ以上深くは立ち入らないことにしておく。なにしろ、「夜の大捜査線」や「太陽にほえろ」以来のファンがいるらしい。

 というわけで、技術的なことをしようということで、「踊る大捜査線」っぽいJAVAアプレットをつくってみたい。
 まずは、文字がタイプライターで打ったようにタイトルが1文字づつ表示されるアプレットである。ルパン三世風と言う方がわかりやすいかもしれない。ただし、このページはjavaアプレットを三つも動かしているので非常に重いと思う。したがって、速くないコンピューターではスムーズに再生されないかもしれないが、アプレットを一つだけにしてしまえばそんなことはないと思う。



「ルパン三世風」classファイル

 次は、文字がどんどん描かれるタイプである。エバンゲリオン風といった方がわかりやすいか。「ロゴ大暴れ」である。縦に細長いフォントにしたかったのだが、今回は面倒だったので、やめた。


 一応、「踊る大捜査線」っぽい文字でも動かしてみる。


 時間ができたら、写真の重ねあわせにも対応してみたい。ただし、画像を含めてしまうと、Javaアプレットの「ファイルが小さい」というメリットが減少してしまうのが困る所だ。


「ロゴ大暴れ」classファイル

縦書きの文字も重ねるタイプのclassファイルを以下に置いておく。拡張子はclassに戻せば使えるはずだ。動作自体は少し重くなる。

縦書きの文字も重ねるタイプのclassファイル

 このような文字アプレットは漢字だからこそ有効なのだろう。英語などでは単語の区切りが良く分からないし、一文字見ただけでは、意味が頭に入ってこない。表意文字の漢字だからこそ、わかるのであると思う。文字が躍り出すのが実感できるのである。室井光広の「おどるでく」などが思い起こされる。ふと思ったが、「踊るデカ」と「おどるでく」は良く似ている。が、深い意味はない。念のため。今回は、「踊るアホウに見るアホウ、同じアホなら、踊らにゃ損々」という名文句で締めくくりたい。

1999-09-17[n年前へ]

モアレ、デバイス、2項分布の三題話 

淡色インクの副作用

 今回は、9ヶ月間も寝かせた伏線にまつわる話である。いや、別に寝かせるつもりは無かったのだが、いつのまにかそんなに時間が経ってしまった。

 以前、

という話があったが、その2つを結びつけるミッシングリンクについて考えてみたいと思う。「2項分布のムラについて考える(1999.01.08)」の最後に「今回の話はあることの前準備なので、これだけでは話しが全く見えないかもしれない。というわけで、続く...」と書いた。「その続き」というわけである。

 始めに「2項分布のムラについて考える(1999.01.08)」の要点をまとめると以下のようになる。それは、

  1. ランダムと呼ばれるものの内で代表的な2項分布においては、当然のごとく「ある領域での平均値はばらつく」。
  2. そして、そのばらつきは直感的に考える程度よりももっとばらつく。
  3. 例えば、2値画像で考えるならば、2048dpi程度の解像度でランダムなデータを並べた場合には、人間の目はざらつきを感じてしまう。
ということであった。

 そして、「モアレはデバイスに依存するか?(1998.11.20)」での要点は

  1. モアレにはデバイス依存性がある
  2. 線形な重ね合わせが成り立たない場合にはモアレが発生する。
ということであった。

 最近のインクジェットプリンターはCMYKの4色インクだけでなく、淡色インクも使うものもある。淡色のインクを使うことで階調豊かな画像を印字できるわけだ。4色インクだけではディザなどを使って、解像度を下げて階調を出さなければならないわけであるが、それが不要になるわけだ。

 解像度を下げないですむわけであるから、ディザのざらつきを感じないですむわけだ。しかし、淡色のインクを使った場合の効果というのはそれだけではないように思われる。HP(ヒューレッドパッカード)などのWEBのプリンター紹介を読んでいると、「淡色のインクを重ねて濃度を出す」というような記述を目にする。これは「少なくとも淡色インクでは線形性(あるいはそれに近い関係)が成り立つ」ということだ。

 インクジェットプリンターの解像度を上げたときに、インク滴が意図しないところへずれてしまうことはきっとあるだろう。その際に他のインク滴と重なったらどうなるだろうか?意図しなくても他のインク滴との重ね合わせは発生してしまうだろう。
 重ね合わせが成り立たない、非線型なインクではモアレが発生する。言いかえれば、意図しない濃度のばらつき・ざらつきが発生してしまう。「2項分布のムラについて考える(1999.01.08)」で考えたようにランダムに重ね合わさるから広い領域では一定だろうというのは予想外に成り立たないのである。でたらめというのは私の予想外に大きく効いてくるのである。
 しかし、重ね合わせに線形性が成り立つ淡色のインクではモアレが発生しない。すなわち、いくらランダムにインク滴の重ね合わせが生じてしまったとしても、意図した通りの濃度をだすことができ、ばらつき・ざらつきは発生しないことになる。参考までにインクジェットの印字画像の拡大写真を示してみる。

インクジェットの印字画像の拡大写真
(CQ出版 洪 博哲著 お話・カラー画像処理より引用したものとそれを加工したもの)
淡色インクを使った出力例
左をグレイ化したもの
 インク滴が重なったところで濃度の線形性が保たれている、すなわち、重なったところはちゃんと濃くなっている、のがわかると思う。

 「重ね合わせに線形性が成り立つ淡色のインクではモアレが発生しない。すなわち、いくらランダムにインク滴の重ね合わせが生じてしまったとしても、意図した通りの濃度をだすことができ、ばらつき・ざらつきは発生しない」と、書いただけでは意図するところが伝わらないと思うので、「モアレはデバイスに依存するか?(1998.11.20)」で使った画像を用いて考えてみる。この画像は重ね合わせがある幾何学模様で生じているが、この現象がランダムに起こっているものとして読み替えて欲しい。

淡くない色のインクで重ね合わせ(インク滴の意図しない重なり)を行う。
1回目の印字
2回目の印字
出力画像
 淡くない色のインクで重ね合わせ(インク滴の意図しない重なり)が生じると、黒と白の模様が生じる。もしこの重ね合わせ(インク滴の意図しない重なり)がランダムに起きるとしたら、ランダムな黒白模様が発生することになる。そして、「2項分布のムラについて考える(1999.01.08)」で調べたようにその影響は予想以上に大きいのである。

 下は、淡色のインクで重ね合わせ(インク滴の意図しない重なり)が生じた場合である。

淡色のインクで重ね合わせ(インク滴の意図しない重なり)を行う。
1回目の印字
2回目の印字
 出力画像

 なんの模様も生じていなく、意図した通りの画像出力ができているのがわかると思う。

 ということで、今回の話(というか前の2回の話)の繋がりは、
淡色のインクを用いたインクジェットプリンターでは、意図しないインク滴の重ね合わせが生じてしまっても、濃度変化が生じにくく、意図しないインク滴の重ね合わせがでたらめに発生してしまったとしても、画像にはあらわれない可能性があるということである。

 うーん、マニアックな内容だ。「身近な疑問を調べる」という看板に偽り有り、である。しかも単なる推論だ。
 しかし、もしもインクジェットプリンターを買う人がいるならば、淡色のインクを使っているものを購入するといいかもしれない、ということがわかっただけでも良しとしておこう。



■Powered by yagm.net