1998-01-08[n年前へ]
■Photohoの乱数プラグインを作成する
「2項分布のムラについて考える」の関連して、Photoshopの乱数プラグインを作成したのでメモしておく。 PhotShopはとても便利なソフトである。画像を取り扱うにはトップクラスと言っても良い。あえて、難を挙げるならば8Bit階調が基本という所である。もちろん、12bit階調なども扱えるのは知っているが、基本機能とは言えないと思う。
しかし、PhotoShopで凝ったことをしようとすると、Pluginを作らざるを得ない。PhotoShopでPluginをつくるには2つのやり方がある。それは、
- Adobe提供のPlugin SftwareDevelopmentKitを使ってPluginを作る。
- FilterFactoryを使ってPluginを作成する。
今回はランダムノイズをつくるためのプラグイン作成が目的である。その程度であれば、FilterFactoryを使うのが簡単で良い。
まずは、FilterFactoryを使う。 |
まずは、Redチャンネルにのみ乱数を与えるものをつくる。以下がそのパラメータである。
たった、これだけである。 Redに乱数を与え、Green,Blueのチャンネルには0を与える。 |
もうひとつ、各色に乱数を与えるプラグインのサンプル画像はこのようになる。
さて、試しに使ってみる。1000x1000ドットのランダムノイズ画像を作成してみる。その画像はここに載せるには大きすぎる。そのため、その一部を左下に示す。その画像に対して各領域10x10の100ドットで平均し、100x100に変換した画像を右に示す。詳しくは「2項分布を考える」を見て欲しいが、100ドットで平均したくらいではフラットにはならない。それどころか、有限のいくら広い範囲で平均しても正確にはフラットにはならない。もし、フラットになるのであれば、それはランダムな2項分布ではない。もちろん、PhotoShopの丸め誤差とかの話は別にしておく。また、「2項分布を考える」の際は1次元の1成分データであったが、今回は2次元3成分データである。そのため、人間にはよりフラットに見えにくい。相対的な色差に対しては人間の目は敏感だからである。
今回の例も「2項分布の特性:どんなに広い領域であっても、領域中の平均が一定でない」の当然の結果である。仮に、ある広い領域中の平均が一定であるような確率過程を用いればこのようなことは生じない。もしも、そのような確率過程に基づくものがあったら、部分部分はランダムに見えても、広い領域ではフラットに見えるのである。
1998-11-12[n年前へ]
■無限音階を作ろう
上昇し続けるって何ですか?
無限音階を作りたい
無限音階というものがある。ド・レ・ミ・・・と音がどんどん高くなっていくように聞こえるのだが、いつまでたっても終わらず、ふと気づくとずっと前と同じような音の高さだというものである。Escherの無限階段の版画は有名だが、あれの音階版である。とにかく、無限音階を作ってみようというのが今回の目的である。参考までに、Eshcerのことに関しては藤原康司氏のWEBhttp://www.pluto.dti.ne.jp/~fwhd5468/に詳しい情報がある。 ちなみに、このような版画である。
「上昇と下降」(左図、1960年作) 「滝」(右図、1961年作) |
無限音階の仕組み
人間の聴力にはもちろん周波数特性がある。ニコンの補聴器のWEBhttp://www.nikon.co.jp/main/jpn/society/hocyouki.htm
によれば20Hz-20kHzが通常聞こえる周波数の範囲であるという。例えば、CDのサンプリング周波数はが約40kHzであるのは、この20kHzの倍だからである。つまり、ナイキスト周波数による。
もし、ある高さの「ド」の1オクターブ下、そのまた下、...それだけでなく、1オクターブ上、そのまた上...が一度になったら、人間の耳にはどう聞こえるだろうか。それは、やはり「ド」である。その時のスペクトルはこんな感じである。なお、横軸は2をベースにした変形の対数軸である。また、実際には「ド」ではない。
それでは、そのような「レ」が鳴ったとしたら?もちろん、それも「レ」である。そのようにして、「ドレミファソラシド」とやるとどうだろう?最初の「ド」と最後の「ド」は全く同じになっている。しかし、人間の感覚としてはどんどん音の高さが上昇していくように感じる。これが無限音階の仕組みである。
図で示すとこのようになる。なお、下の図中で水色は人間の耳に聞こえる周波数領域である。また、振幅はたんなる相対値である。
作成した無限音階
今回は12音の平均率音階を用いている。音階そのものについては「音階について考える」という別の話である。また、基本波形としては正弦波を用いている。20Hz以下の正弦波を基本波形として、その倍音を20kHz超まで均等に足しあわせたものをただ作っただけである。正弦波を用いたのは話を単純化するためである。ここに今回作成したMathematicaのNoteBookを置いておく。また、下が作成する途中のデータである。どこか間違っているような気もする。少し不安だ。
さて、これが作成した無限音階である。それっぽく聞こえるだろうか。
1998-11-20[n年前へ]
■モアレはデバイスに依存するか?
まず、以下のような2つの同心円画像をつくる。(なお、このような画像を簡単に作るために、Photoshop用のフィルターを作った。詳しくは「Photoshopの同心円フィルターを作る。」を参照して頂きたい。)以下の2つの画像は少し中心位置がずれている。また白く見えるところは255の値を持ち、黒く見えるところは0の値を持っている。(画像自体は512x512であり、表示の際に128x128に変換している。だから、この画像をそのまま保存して頂ければ、512x512のサイズで保存することができる。)
- 黒(0)+黒(0)=0(すなわち黒)
- 白(255)+白(255)=255(すなわち白)
- 黒(0)+白(255)=255(すなわち白)
- 画像1を白黒反転し、画像1'を作る。
- 画像2を白黒反転、画像2'を作る。
- 画像1'と画像2'を加算し、画像3を作成する。
- 画像3を白黒反転し、画像3'を作成する。
それでは、以上の画像変換を小さい画像でまとめて表示してみる。
ところで、上の3つの画像をそれぞれ平滑化してみる。すると、以下のようになる。
以下でもう少し詳しく考えてみる。
重ね合わせにおける加算演算
下のような画像A、画像Bを考える。拡大してあるが、画像自体は1x2ピクセルのサイズである。また、白=255、黒=0とすれば、いずれも平均値は128程度である。- 黒+黒=黒
- 白+白=白
- 黒+白=黒
これに平均値も示すと以下のようになる。ここでは、LBPなどの紙に出力する際によく使われる、白=0、黒=255という表記をする。
同じ128+128でも、結果は128になるか256になるかの2種類ある。同じもの同士であれば、結果は128であるし、そうでなければ256になる。そのために、平均値が保存されないのである。このように、平均値が保存されない、言い換えれば、加算演算の結果が線形でない場合にはモアレが発生することになる。もしも、マクロに見て「128+128=256」が多い領域があれば、それはモアレの黒い部分であり、そうでない所は比較的明るい部分であるということになる。
ロゲルギストの-モアレが生じる理由は黒さの非線形性による-という言葉はこの「128+128=128、と128+128=256という結果の違いがあり、それがモアレの原因である」ということを示している。
それでは、そのような現象「128+128=128という非線形性」が起きない状態を作ってみる。それには加算の結果である黒がサチらないようにすれば良い。
これでは、いずれの状態でもグレー+グレー=黒、すなわち、64+64=128という風になっている。これは黒がサチっていないからである。すなわち、-モアレが生じる理由である黒さの非線形性さ-がない状態になっている。
それでは、この状態で計算実験Aと同じことをしてみる。それを計算実験Bとする。念のため、計算実験Aをもう一度示す。
画像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-22[n年前へ]
■OHPによるモアレと光の干渉の相似について考える。
ヒラックス・ディザの提案
「位相保存ディザマトリックス」
まず初めに、4 x 1ドットからなる基本マトリックスを考える。その各ドットは白か黒の値を持つ。例えば、このような感じである。この「黒、黒、白、白」というパターンを次の図と見比べる。
「モアレのデバイス依存について考える。」で行ったようにこのようなパターンをOHPで打ち出し、重ね合わせてみる。例えば、位相0と位相180のものを重ね合わせたらどうなるだろうか。4x1ドットのマトリックスの全てが黒になる。すなわち、真っ黒になるのがわかるだろう。それでは、位相0と位相90のものではどうだろうか。4x1ドットのマトリックスの内、3ドットが黒、1ドットが白である。位相が同じものどうしを重ね合わせると、元と同じく、2ドットが黒、2ドットが白である。
ということは、「位相が同じ物どうしであれば、元の明るさを保持する」、「位相が逆であれば真っ黒になる」、「位相が少しずれているのあれば、明るさはその分少し暗くなる」という性質があることがわかる。光の干渉の場合とほとんど同じ性質を持っているのがわかると思う。違うのは、同じ位相のものどうしが重ね合わさった時に、重ね合わせた分明るさが2倍になるか、そうでなくてそのままなのかという違いだけである。
つまり、この4x1ドットのマトリックスは「きちんと演算が成立する位相情報が記録されている」ということになる。そして、位相が異なるものを重ね合わせた時の位相情報の保存までも考えてやるならば、先ほどの例1は次のように位相の定義を変えてやるほうがいいと思う。
この例2では位相の数字は各矩形波の中心位置を現すことにしている。それでは、この定義を用いて、位相90,180のものを足しあわせたらどうなるだろうか。下に示すのがその結果である。
位相90と位相180のものを足しあわせると、波形はブロードになり、中心すなわち位相135のものができているのがわかる。また、明るさはこれまでが、2/4だったものが1/4であることになり、強度も弱まっているのが表現されている。
つまり、このようなマトリックスによる表現は波の持つ位相と強度と波形を表現し、演算も成り立っていることがわかる。それでは、例2の基本マトリックスが縦方向に繰り返されている画像(1(基本マトリックス)x8ピクセル)を考える。こんな感じである。
これは下方向から進行している矩形波の様子そのままである。なお、この図でも基本となるマトリックスは4x1ドットであるから、この例では要素としては1x8ピクセルを示しているのである。どの要素も振幅(強度)自体は同じである。平均の明るさは同じである、と言い換えても良い。また、波形自体も同じである。しかし、位相が異なっている。波の進行そのままである。
さらに強度情報を加える
このような白、黒のみの2値表現(といってもこの表現にはモアレが欠かせず、そのためには2値表現がふさわしい)では、波の位相、波形、強度を独立に変化させることはできない。例えば、波の波形を変えると強度も変わってしまう。それを独立にしてやろうと思ったら、階調を増やしてやれば良い。しかし、2値表現のままという制限付きであるから、面積階調を使うことになる。これまで4x1ドットのマトリックスで表現していたものを、例えば、4x4ドットのマトリックスにしてやればよい。以下にその例を示す。例Aの強度が例Bの1/4であることがわかるだろう。 このような「位相、波形、強度情報を保存し、演算も成立する」マトリックス表現を仮に「HiraxDither(ヒラックス・ディザ)」と呼ぼう。先の「モアレのデバイス依存について考える。」で使ったスペックルパターンの例はこのヒラックス・ディザの簡易なもの(2x1基本マトリックスのもの)を使っていた。
また、「モアレのデバイス依存について考える。」で使った同心円状の画像のモアレのパターンは実はヒラックスパターンの特殊な例(1x1基本マトリックスのもの)を用いていたのである。そこでは、単に位相情報しか記憶されていない。この場合には、白、黒が位相情報を現していたのである。だから、黒、黒どうしの所(すなわち、位相が同じ所)では平均の明るさは変化せず、黒、白が重なった部分(すなわち、位相が反対である所)でのみ打ち消し合い、暗くなっていたわけである。波形も、強度情報もこの場合には記録されていない。
「ヒラックス・ディザ」とホログラフィーの相似点
このようなヒラックス・ディザの「ディザ・パターン内部、すなわち、微視的には位相情報や振幅情報を記録し、巨視的に見ると強度分布のみが認識される。また、相互の演算(干渉)によって違う画像を再生することができる。」という特徴は実によくホログラフィーと似ていることがわかる。 また、もう少し深く考えると、もっと他の分野とも繋がるかもしれない。いずれ、また考えてみたい。
1998-12-19[n年前へ]
■音階を勉強する
単音シンセサイザーをつくる
今回は、音階そのものについて勉強をしてみる。世の中には色々な音階がある。いわゆる12音階の中でも、純正調、平均率などいろいろある。12音階でないものもある。どのような音階があって、それぞれどのような音程になっているのか調べてみたい。といっても、まずは7音音階、すなわち、ダイアトニックスケールだけを考える。
参考文献は手元にあった、「音楽の不思議」 別宮貞雄 著 音楽之友社である。なお、江尻氏の音律周波数表、音律について、音律実験(http://www.tg.rim.or.jp/~ejiri/)では色々な音階についての情報を知ることができる。5音階、すなわち、ペンタトニックスケールについての情報もある。同様なWEBサイトととしては「調律法ききくらべのページ」(http://www.top.or.jp/~murashin/index.htm)がある。ARATA氏の「MIDIで古典調律を」(http://www.nifty.ne.jp/forum/fmidicla/htmls/kotenj.html)にもかなりの情報がある。
ここでは、簡単にピタゴラス音階、ツァルリーノ音階(純正調音階)、12平均率だけを考える。
まずは、ピタゴラス音階を作る。Aという基準音を作る。その音に対して振動数が3/2倍の音をEとする。更に、Eに対して振動数が3/2倍の音をBとする。また、Aの振動数に対して、3/2倍の音をDとし、Dの4/3倍の音をGとする。そして、CGの3/2倍の音をCとする。最後に、Cの4/3倍の音をFとする。
各音の倍、あるいは1/2の音のオクターブ違いの音を考えると、結果としてC,D,E,F,G,A,Bのダイアトニックの7音音階ができあがる。このピタゴラス音階は旋律が良く響くという性質がある。よく響くという言い方は誤解を生じるかもしれない。「うまく旋律がおさまる」といった方がいいかもしれない。
D/C | E/D | F/E | G/F | A/G | B/A | C/B | |
ピタゴラス音階 | 9/8 | 9/8 | 256/243 | 9/8 | 9/8 | 9/8 | 256/243 |
ツァルリーノ音階(純正調音階) | 9/8 | 10/9 | 16/15 | 9/8 | 10/9 | 9/8 | 16/15 |
12平均率 | 2^(2/12) | 2^(2/12) | 2^(1/12) | 2^(2/12) | 2^(2/12) | 2^(2/12) | 2^(1/12) |
次に、ツァルリーノ音階(純正調音階)は、各音の間の振動数の比を見てもわかるように、和音はよく響く。しかし、旋律として聞いた場合には、必ずしも良いわけではない。しかも、転調はできない。現在、一番使われている12平均率は振動数比をみてもわかるように必ずしも、和音の響きが良いわけではない。しかし、周波数を見てもわかるようにピタゴラス音階とツァルリーノ音階(純正調音階)の中ほどであり、和音の響き、旋律どちらも悪いわけではない。
ただし、1曲の中で厳密に音階が同じというわけでもないらしい。プロの弦楽四重奏などでの演奏では、必ずしも12平均率でなく、曲の中でも意識して音程を変えるという話だ。
また、ツァルリーノ音階(純正調音階)用に曲を作って聞いてみても、それほど良くなるとは思えない。確かにきれいに響くのだが、(私の感じでは)それだけなのである。
セントで表したものも示す。セントは基準音の振動数Nに対して、振動数Mである音を、1200x log_2(M/N) と表す単位である。 セントで表せば、12平均率は当然きりのいい数字になる。
C | D | E | F | G | A | B | C | |
ピタゴラス音階 | 0 | 204 | 408 | 498 | 702 | 906 | 1110 | 1200 |
ツァルリーノ音階(純正調音階) | 0 | 204 | 386 | 498 | 702 | 884 | 1088 | 1200 |
12平均率 | 0 | 200 | 400 | 500 | 700 | 900 | 1000 | 1200 |
音階についてあまり長々と考えてもきりがないので、ひとまずここまでにしておく。なにしろ、奥が深すぎる。最後に各音階の周波数表を示す。なお、Cの音はいずれも440Hzにしてある。ここでいうCは音名ではない、階名である。つまり、絶対的な音の高さを示すもの(音名)でなくて、相対的な音の高さを示すもの(階名)である。むしろ、よく使われるドと言ったほうが良いかもしれない。「Aをドにして歌ってみよう」という時の「ド」である。ところで、ドレミファソラシドの語源はどこにあるのだろう?SoundOfMusicがdoeの歌のイメージから"do a dear ..."と鼻歌を歌うことはあるが、語源は一体?次の宿題にしたいと思う。
さて、使用した周波数は全て江尻氏の音律周波数表、音律について、音律実験 (http://www.tg.rim.or.jp/~ejiri/)に記載されていたセントから最初の音を440Hzとし、周波数に変換してある。
Hz | C | D | E | F | G | A | H | C | |||||||||
平均率 12Equal | 440 | 494 | 554 | 587 | 659 | 740 | 831 | 880 | |||||||||
純正律 Pure(5-3) | 440 | 495 | 550 | 587 | 660 | 733 | 825 | 880 | |||||||||
純正律 Pure(5-3)' | 440 | 495 | 550 | 594 | 660 | 743 | 825 | 880 | |||||||||
純正律 PureQ-39(3-5) | 440 | 489 | 550 | 587 | 652 | 733 | 815 | 880 | |||||||||
純正律 PureT-71(5-3b) | 440 | 495 | 570 | 594 | 660 | 760 | 855 | 880 | |||||||||
メルセンヌ純正律 | 440 | 495 | 550 | 587 | 660 | 733 | 825 | 880 | |||||||||
ピタゴラス律 | 440 | 495 | 557 | 587 | 660 | 743 | 835 | 880 | |||||||||
中全音律 | 440 | 492 | 550 | 588 | 658 | 736 | 822 | 880 | |||||||||
キルンベルガー 第2 | 440 | 495 | 550 | 587 | 660 | 738 | 825 | 880 | |||||||||
キルンベルガー 第3 | 440 | 492 | 550 | 587 | 658 | 736 | 825 | 880 | |||||||||
キルン-ヴェルク | 440 | 492 | 552 | 587 | 658 | 736 | 828 | 880 | |||||||||
ヴェルク 第1技法第3番 | 440 | 492 | 551 | 587 | 658 | 735 | 827 | 880 | |||||||||
ヴェルクマイスター 第3' | 440 | 495 | 553 | 589 | 660 | 740 | 830 | 880 | |||||||||
ラモー | 440 | 492 | 550 | 588 | 658 | 736 | 822 | 880 | |||||||||
ヴァロッティ-ヤング | 440 | 493 | 552 | 588 | 659 | 737 | 826 | 880 | |||||||||
ヤング 第2 | 440 | 493 | 552 | 587 | 659 | 737 | 826 | 880 | |||||||||
43平均律 | 440 | 493 | 551 | 588 | 658 | 737 | 825 | 880 | |||||||||
53平均律 | 440 | 495 | 550 | 587 | 660 | 733 | 824 | 880 |
National InstrumentsのLabViewのExample例の中でWindows環境でSoundを入出力するViがあったのでこれを利用する。また、その使用例としてプッシュホンの発信音を出力するものがあった。これを適当にいじって作ってみる。今回は簡単のために単音のみの出力である。いずれ、もうすこしちゃんとしたものを作ってみたい。
作成したアプリケーションをここにおいておく。
Onkai.lzh 1,176kB(配布終了です。)
LabViewのライセンス上、ダウンロード数が50近くになったら削除する。(配布終了です。)
まずは、赤丸部分のボタンを押して実行モードにする。 |
このように色々な音階を 選ぶことが出来る。 |