CPP130 「幽霊変換」から「デジタル画像解析プログラム」へ
From Phantom Transformations to Analysis Program for Digital Images
黒月樹人(Kinohito KULOTSUKI) [@]黒月解析研究所
CPP130 「幽霊変換」から「デジタル画像解析プログラム」へ

 「幽霊変換」という名の論文を英語でまとめて、某誌へと投稿したのは、昨年の秋ごろのことでした。これも没にはなりましたが、「これまでの疑問に、よく答えていると思われるので、専門分野のどこかに、急いで投稿することを勧めます」との、返信メールをもらいました。これを再投稿するところが見当たらなかったので、思い切って、このホームページで公開することにしました。内容には自信があったので、多くの人に読んでもらえるだろうと思ってのことです。そのとおりでした。「幽霊変換」のページは、600項目ほども登録されている、このホームページにおいて、トップページなどのリストページを除いて、単独のページとして、常に上位に位置してきました。私のホームページを離れても、「幽霊変換」や「ローレンツ変換」「ダランベルシアン」「アインシュタイン」などの単語が、「幻想」や「矛盾」と組み合って、あるいは、ときとして単独で、日本や世界のランキングの上位を占めるようになってきました。

 ところで、昨年から今年にかけての冬に、私は、コンピュータ言語のCを学習しなおすことにしました。これには必然的な理由がありました。コンピュータ関連の仕事に就こうとしたのです。その面接までの時間が2週間もあったので、アピールするための能力を磨いておこうと考えたのでした。面接はうまくこなせたように思いましたが、採用はされませんでした。このころ、他にも何社かチャレンジしたのですが、うまくゆきません。面接や発表までの待ち時間が何日も続くので、その間、コンピュータ言語の学習や、自作のプログラムの改良を行っていました。こうして、現在、商品化しようとしている、デジタル画像解析プログラムの、小さな芽のようなものが生まれたのです。

 私のホームページには、アインシュタインの特殊相対性理論が空論であることを論じるために考え、書き続けて、「幽霊変換」へといたる、いくつもの、中身の濃いページがあります。これらは労作です。しかし、これらのページは、偏微分などの記号も多用した、数式のオンパレードなのです。これでは、多くの読者を望めないだろうと考えました。ところが、生まれて間もない、デジタル画像解析プログラムが描き出すものには、数式なぞ、どこにもありません。偏微分の数式よりも、ずうっと難しいアルゴリズムを使って解析した結果は、そのようなことを何も誇らず、ただの画像として現れるのです。これを見るだけでよいのです。数式だらけのページから、画像だらけのページへと、私は、ある一つの極から、異なる一つの極へと向かうことにしました。これも病気のなせる技かもしれません。

 デジタル画像を拡大すると、モザイクブロック画像が現れます。この画像の情報から、元にあったものに近い、銀塩写真のようなものを再構成するということが、私が育てようとしていたプログラムの中心的な技法でした。この機能をもつものを、私は「マジカルスコープ」と呼び、さらに特殊な効果を加えた機能をもつものを「マジカルフィルター」と呼ぶことにしました。ただし、それらは、多くのスイッチを組み込んだ、総合的な一つのプログラムではなくて、一つずつが特別な指標値をもって、一種類だけの画像を生み出すものでした。

だから、それらの具体的なプログラム名は、ans100_50.exenur100_50.exeなどとなっており、特殊な効果の違いを意味する「ans」や「nur」と、固定された二種類の指標の「100」や「50」を組み合わせたものでした。現在のクッキリンでは、「100」は「明るさ」の値で、「50」は「暗さ」の値です。また、「ans」は「ルーペ」で、「nur」は「アピーチ」のことです。このころの私の技術では、これらの指標を外部から指定することができないのでした。

仮にCではなく、何十年も親しんだBASICでプログラムを作っていたとしたら、こんなことは簡単なことでした。C言語でも、そのようなことは簡単だと思われるかもしれません。値の外部入力なんて、初歩のまた初歩、ポインタを学習する前に終えているはず。それはそうです。しかし、私が取り組んでいたのは、初歩のC言語ではなく、ウィンドウを作って、その中に、ビットマップ画像を描くものだったのです。

 C言語をある程度使えるようになった現在では、よくもまあ、古典的なBASIC言語だけで、現場で観測してきた地震波のデータを分析して、世の中で通用する成果をあげられるようにしてきたものだと思います。こんなに自由が利くのだったら、もっと早くC言語へと乗り換えておけばよかったと悔やんでしまいます。

コンピュータ言語こそCではなくBASICで、ぎこちなくプログラムを組み立てていたのでしたが、解析のためのノウハウについては、周波数解析の武器としての、高速フーリエ変換 (FFT) やウェーブレット解析などを、日本語や英語で書かれた本を何冊も何冊も読みこみ、なんとかマスターしたように見せかけて使っていましたし、他にも、当時の最先端の技法があることを知るや、まるでヒルかナメクジウオのように、論文や資料を探しまわり、それらの内容を貪欲に吸収しようとしていました。月日が経つのは早いものです。単語を引き引き、苦労して読んだ、当時は英文でしか読めなかった数学書が、今では日本語に翻訳されて出版されています。

 データ解析を仕事としていられたときの、このように充実した時間のようなものを味わいたかったのでしょう。「その手の学会や業界から遠い世界に離れた今でも、画像データにおける一つ一つのピクセルの、赤緑青の色値を読み取ることができたとしたら、地震波などのデータ解析の仕事で身につけた、いろいろな技術を、もう一度生かせるかもしれない。そんなことができるようになったら、何の成果も得られなかったように見え、いろいろなものを失ってきた、私のこれまでの人生ですら、これらのことのすべてに意味があったと思うことができる。いろいろな世界を渡ってきて、いろいろなことを学び続けてこなかったら、ここへとたどりつくことは、決して、なかったはずだから。」 そのように思うことができるわけです。だから、データを線状に取り扱うだけでは満足できなかったのでした。それだけのことなら、C言語でなくても、BASICで行えます。平面のデータとしての画像データを取り扱って、いろいろなことができるのは、どうやら、ウィンドウモードのC言語のようでした。ところが、これが、なかなかの難物なのです。

 地震波を調べる仕事をしていたころは、隣に、C言語を使いこなす同僚がいました。あの頃に学び、教わっていたら、分からないところが出てきたとき、その同僚に聞けば、あっという間にクリアーできていたことでしょう。実は、山奥に戻ってきてからも、生活のための仕事を淡々と続けながら、主にBASICを使って、ランニングフォームの研究などを行っていたのでしたが、その時々に、C言語も再度学習しようと思ったことがありました。しかし、いつも、どこかで挫折していたのです。以前からもっていたC言語のコンパイラは、コンピュータのOSの変化に追いつけず、いつしか使えなくなっていました。それなのに、今回、わずか2週間で、BASICの自由さの、ほぼ9割程度のレベルまで学習できたのは、高田美樹さんの「C言語スタートブック」[1]のおかげでした。

このテキストの最大の特徴は、実際のコンピュータを前にして、C言語のプログラムを作り出すまでにしなければならない、いちばん最初の、ごくごく簡単なことが説明されているということです。たとえば、まず、「MS-DOSのプロンプト」というものを呼び出してくるということから始まっています。WindowsVistaでも、MS-DOSが使えるということが、私の目からウロコを落としてくれました。付録の「Boland C++ Compiler」のインストールの手順や、拡張子の表示のさせ方、そして、コンピュータにおいて、これらの道具を使うための、環境設定の手順などが、図を使って、ほんとうに分かりやすく説明されています。

このあとの、C言語の文法などについての説明の章も、具体的で分かりやすいのですが、これらの部分については、他のテキストでも学習できることでした。C言語を使いこなしている人のそばで学習するときは、かんたんなことは、かんたんなことのまま、すんなり通ってゆくことでしょう。ところが、教わる人がそばにいない状態で、一人で学習しようというときには、かんたんだと思われて、何も説明されていないことが、もっとも難しい「壁」になってしまうのです。「問題はかんたんなところに潜んでいるのかもしれない」というのは、さまざまなレベルで繰り返されることのようです。現在でも私は、懐かしい「MS-DOSのプロンプト」を開いて、「Boland C++ Compiler」をDOSのキー操作で入力し、現れた「警告」や「エラー」のメッセージを読んで、プログラムのテキストを直しているのです。

 もう一冊、頼りにしているテキストがあります。粂井康孝氏の「猫でもわかる ゲームプログラミング」[2]です。これは、現在の目的に必要だから手に入れたというものではなく、初版が出た2005年に、本屋にドンと平積みされていて、ムードに負けて買ったものなのでした。しかし、その内容はというと、買った当時、何のことが書かれているのか、まったく分からず、4年ほどツンドク(積読)状態でした。私の本棚には、このような本が何冊か存在しています。まるで未来のことが記憶にあるかのように、未来のいつか役立つときがくるとでも言わんばかりに、黙って並んでいるのです。

さて、この本についてコメントしますが、私は最近まで、この本はC言語の上級者向きだと思っていました。ところが、粂井康孝氏のホームページを開いて、びっくり。ここには、「中級者以上、セミプロ、プロ、おことわり」と書かれているのです。この本についても、「超初心者」のための本だとされています。このあたりの状況に、何らかのギャップがあります。私はたしかに初心者です。分野によっては超がつくほどの初心者です。しかし、C言語の初心者と呼ばれている人が、この本を読み進めようとしても、どこまで進めることでしょうか。

このような「ギャップ」があるので、この本は、ほんとうの初心者が読んで、すいすい学習してゆけるというほど、親切に書かれたものであるとは思えません。分からないことが、どんどん出てきます。あれこれと説明してほしいことが現れてきます。そのような質問の答えを見出す方法も分かりません。私は何枚もの「壁」にぶつかってしまいました。しかし、それでも、この本から逃げ出すわけにはいかなかったので、自分なりに、いろいろと工夫して、分からないことを調べてゆく道をたどることにしました。付属のC言語プログラムをテキストで印刷して読み込み、これらのプログラムの一部を書き換えて、どのような効果が生じるのかということを、コンピュータを使って、何度も何度も実験しました。すべてをテキスト順に学習するのではなく、作り上げようと思っているプログラムに適用できるかどうかということを天秤にかけながら、詳しく読み込んでゆきました。

現在の私から見ると、この本で、もっとも解説を加えなければならないところは、第1章の「ウィンドウを作ろう」のところであると思えます。BASICに慣れすぎたものや、初歩のCしか学んでいないものにとっては、ここのところが、最も難しいのに、どうして、ほとんど何も説明していないのでしょうか。タイトルは「ウィンドウを作ろう」となっているのに、ウィンドウの作り方の手順や応用の仕方のようなことが、まったく分からないのです。たとえば、「代表的なウィンドウスタイル」のコードの表がのせられていますが、それらのコードの使い方が分かりません。これについて、私は何度も実験を行いました。間違った書式を試してしまい、何をしても消えないウィンドウを作って、OSをシャットダウンしてリセットすることもありました。

この第1章は、何が書かれているのか分からないまま、「何もしないもっともシンプルなWindowsプログラム」のことが語られてゆき、なんだか分からないままに、次の章へと移ってゆくように思えました。初心者には難しすぎるから、ここは、呪文のように繰り返すだけにして、と思われたのでしょうか。それなら、最後に、もう一章設けて、具体的な例を盛り込み、「ウィンドウを自由につくろう」というタイトルのものとで、詳しいノウハウを語ってもらえれば、私たちについていた「超初心者」の「超」の文字が落ちるのではないでしょうか。これでは、私たちは、いつまでたっても「猫」以下のレベルのままです。

これほどに、不満や疑問がわきあがるのですが、だからといって、この本をほうりなげることはできないのでした。なぜかというと、C言語のウィンドウモードについてのテキストが、この他に、まったく見当たらなかったからです。はがゆく思うものの、私のC言語によるプログラムが、なんとか成長できているのは、この本のおかげなのでした。どう見ても、解説不足な、この本を手掛かりにして、ここに語られていないノウハウを見つけてゆくことで、いつしか、C言語における、私の理解力は、初心者レベルを超えてしまうようになりました。とりあえず感謝しています。仮に今、もっと時間があったら、ほんとうの初心者から、せめて中級者までの、失われたリングのところをつなげるようなものを生み出せるかもしれません。

いいえ。おそらく、そのようにして身につけたノウハウを、これまで同じようにして学習してきた、職業的なプログラマは、決して外へと出さないことでしょう。なぜかというと、目の前の敵に新しい武器の作り方を教えるようなものだからです。それは私も同じこと。「企業秘密」と呼ぶにふさわしいことのノウハウを、私もいくつか持っているのですが、これを説明しようとは決して思いません。これはもう、ごくごく、あたりまえのことです。「猫でもわかる」シリーズのようなテキストが生まれたのは、きっと、粂井康孝氏の本職がお医者さんだったからかもしれません。

 私の、このページのタイトルが示しているテーマに関して、このようなペースで書いてゆくと、数十ページほどになってしまいそうです。このあと、私のホームページにおいて、どのような画像を解析しようとして、その問題を解決するために、どのようなプログラムが生まれ、互いに関連し合って、どのように変化してきたのかということを書こうと思っていたのです。そのことにより、今は、ローレンツ変換やアインシュタインのことではなく、新しい画像解析のプログラムを生み出すことに時間と気力を注いでいることの、本質的な理由を説明するつもりでした。しかし、今回は、それらのエピソードの、ほんの入り口のことだけを書くことになってしまいます。

実は、現在改良しているプログラムの問題点を解決するヒントを授かりましたので、それについての活動を始めなければなりません。このページのつづきについては、その問題が解決して、時間に余裕ができたときへと先送りしたいと思います。ひょっとすると、この問題を解くカギは、粂井康孝氏の、別の「中級者以上おことわり」の本にあるかもしれません。あるいは、もっともっと基本的なことを記してあるような、ほんとうの意味で「やさしい」本にあるかもしれません。今では、ごくごくあたりまえになっていて、プログラマたちが誰でも知っていて、説明するのもばかばかしいと思われているようなことでも、私のような、ほんものの初心者には、もっとも難しい「壁」になってしまうのです。

(2009.08.19 Written by Kinohito KULOTSUKI )

参照資料

[1] 高田美樹, 改定新版(既に3版が出ている) C言語スタートブック, ()技術評論社刊

[2] 粂井康孝, 猫でもわかる ゲームプログラミング, ソフトバンク クリエイティブ()