デザイン&開発理論 2_2
Visualization is the basis of science!
ワークフロー・機能デザイン:

オートセーブ

    “FluoRenderリリース時の文章“
     5 分以内に最高品質の画像を作成、と言ってもそうならない場合がほとんどである。それは、論文やスライドを作っているときに「この部分がもう少しはっきり見 えたら」とか「あとちょっとだけ右に回転できれば完璧な構図なのに」とか人間が後で気が付くからである。

     そういうときにはまた、写真が既に複数枚図に載っ ていて、そのうちの数枚のみを変えたいなんていう場合が多い。そのとき他の写真と同じ縮尺、明暗が再現できないと全ての図を作り直すはめに陥る。この問題を解決するために本ソフトウェアでは全パラメータの値を保存できるプロジェクトセーブの機能を実装した。
    ------------------------------------------------------------------------------------------

     以前、このようなことを述べてセーブ機能を付加した。その後さらに私は生物学者のワークフローについて、どのようなときにユーザーはセーブしたいのかとなんとなく考えていた。

     FluoRender のユーザーをボンヤリと眺めていたある日突然、ユーザーはセーブをしたいのではなく、ある特定の状態に後で戻れるように保険をかけたい、それがセーブであることに今更ながらに気がついた。そしてその特定の状態とは、画面キャプチャーしたときや、ムービーを書き出した時である。

     当初、フォトショップのように作業履歴を記録して戻れるようにしようと考えていたが(それには基礎部分からの膨大なコーディングが必要)、このことに気づいたとき、現在のオートセーブ機能を思いついた。

     ただ、ムービーを書き出したフォルダにプロジェクトファイルをそのまま入れてしまうと、ImageJ で連続画像を開くときにエラーが出る。なので、そのフォルダの中にもう一つフォルダを作成してその中にプロジェクトファイルを保存するようにデザインした。

     また、その時のフォルダの名前をユーザーが打ち込んだファイル名を使用しつつ、_project と末尾に付加することで、プロジェクトファイルがあることを示唆した。さらに、設定項目にオートセーブ機能の ON/OFF を加えることで機能の存在を示唆した。

     この機能は評判が良く、ユーザーからはいちいちセーブする手間が省け、ムービーや画像書き出し時にセーブし忘れることがなくなった。いつでもムービーを作成した状態に戻れるのは非常に心強い。というレポートが届いている。

     今回、この機能を付加して改めて気づいたことは、難しいコーディングはどうしても必要なときにやるべきで、 知恵を絞って似た機能を創造することで作り手と使い手の問題を同時に解決できる、ということである。

     しかしながら、多くのアカデミックソフトウェアではプログラマーに開発の全てを委ねているものが多く、ユーザーとの間に立つデザイナーの存在が不足しがちである。その結果、せっかくのプログラマーの労力がしっかりとユーザーに伝わらないことが多い(そのようなソフトウェアはユーザーからすると、使いにくいソフトウェアとなる)。

     アカデミックソフトウェアのデザインについて、生物学者の役割は大きいのだが、プログラマーとの間に横たわる言語と思考の差がコミュニケーションを難しいものにしている。今後、両者が同時に学会などで発表する機会が増え、もっと直接対話できる環境が整うことが望ましい。



チャンネル群のグループ化

     共焦点顕微鏡から得られる生物データは複数のグレースケールデータを「異なるチャンネル」として持つ。これまで我々はこれら複数のチャンネルをどのようにレンダリングするのかを追求して機能をデザイン・実装してきた。そこで今度はチャンネル単位ではなく、一つの生物データをどのように扱えばユーザーのワークフローに一致するのかを考えた。

     FluoRender は当初から複数の生物サンプルを同時にレンダリングできるように、複数のビューウィンドーを作成できるようにデザインしてあった。しかしそれでは小さいウィンドウサイズでしか画像を得ることができず、ソフトウェアの目的である「論文に使える画像」を出力できない。

     複数のサンプルを読み込んだ場合は、各チャンネルをいちいちレンダリングリストからクリックして ON/OFFし、別々にパラメーターを合わせる必要があった。並列的に複数のチャンネルを瞬時に、サンプルごとに画質調整する方法はあるのだろうか?そこで私がデザインしたのが、「1つの生物データにつき、1つのグループを作り、そのグループ内でパラメーターを共有する」という方法だった。

     パラメーターの共有について、Tools ウィンドウ内の3次元レンダリングパラメーターを共有してしまうと、画質調整の自由度を奪うことになる。従って新たに2次元画質調整パラメーターを加え、RGB の色ごとに明るさ・ガンマの調整をできるようにした。

     多くの共焦点データは3チャンネル以下であり、かつ表示時に赤、青、緑の純色を各チャンネルに用いる。なので RGB の色調整は各チャンネルを独立に調整していることになる。また紫などの赤と青が混じった色をユーザーが選択した場合は、自動で複数の色の値がリンクするようにデザインした。

     私の知る限りでは、3次元再構成ソフトウェアで2次元画質調整パラメーターを持ったソフトウェアは他に存在しない。これまで多くの生物学者は立体再構成を行った後、フォトショップや ImageJ にて画像の明るさを調整していた。FluoRender ではその必要が無く、2次元パラメーターと3次元パラメーターを同時に調整することでより高品質な画像の作成が可能である。

     ただ、Yong 曰く、このグループ化のコーディングがこれまで2年半の開発の中で最もしんどかったとのこと。開発時、実際にこのグループ化をオペレートしてみると、あまりに多くの想定外の動作が可能で、それらの可能性を全てつぶす作業は困難を極めた。 このグループ化については、リリース後も延々といくつかのバグを発見することとなった。(例えば、10チャンネル以上読み込んで、5グループ以上を作成して、さらに複数のグループをチャンネルごとに作成して、またさらに元のグループに統合する。とかある一定の作業の組み合わせた時のみに発生するバグがいくつもあった。)

     さらに Ver2.7 からグループ内で Depth レンダリングモード(チャンネル間の正しい3次元関係を表示できるモード)を独立して選べるようにデザインした。これは例えば、3チャンネルからなるサンプルがあったときに、2チャンネルはメインのシグナルで、残りの1チャンネルは組織の指標となるバックグラウンドとして使いたい時。そのようなときは2チャンネルで1つのグループを作り Depth レンダリング、残りを異なるグループにしてバックグラウンド Layer としてレンダリングすると、全ての情報を混乱すること無く表示できる。


RGBファイル読み込み(遺伝子名ゆえ)

     生物学者は一日に10以上ものサンプルデータを立体で見る必要にかられる場合がある。しかしながら多くの再構成ソフトウェアでは、 そういったワークフローを十分にサポートできているとは言い難い。

     この問題の解決のために我々はフォルダ内の全共焦点データを自動でレンダリングして 3D ムービーを作成する機能(バッチレンダリング)を実装しようとした。しかしそのとき、多チャンネルのファイルをどう読み込むのかが問題になった。連続画像を読み込むムービーソフトウェアは通常、同一のファイル名を認識して複数のオブジェクトを読み込む。しかし共焦点データの場合、生物学者はグレースケールのチャンネルごとに遺伝子の名前を用いることが多い。そのような場合、ソフトウェアから複数ファイルを同一のデータセットとして認識することが出来ない。

     そこで私は RGB ファイルの読み込みをサポートし、読み込んだと同時に RGB チャンネルを赤、緑、青で表示する機能と、自動でXYZのボクセルサイズを取得することで正確な構造を表示する機能を提案した。生物学の共焦点データは大抵3チャンネル以内であることからこの方法が可能であり、異なるチャンネルを一つのファイルにまとめることで先のファイル名の問題を解決した。

     またバッチレンダリングとは別に、ユーザーが複数の RGB ファイルを開いたときには、自動で各ファイルごとにグループを作成するようにデザインした。ユーザーはグループごとに ON/OFF 表示をして異なるサンプル間を比較できる。これらにより大量のサンプルを同一条件で連続処理する、または一度にソフトウェア上に読み込み相互比較することが可能となった。


 これら以外に FluoRender では幾度もの画質の改善を行っている。普通、立体再構成ソフトウェアのアップデートでは新機能がついたり、バグフィックス、スピードの改善が行われ、画質の改善はなかなか行われない。これを FluoRender にて可能にしたのはいくつかの理由がある。

  1. そもそもソフトウェアを売ることを目的としていない。生物学における visualization の問題を解決することを目的としている。

  2. プログラマである Yong の個人趣味がカメラであり、画質の追求は彼の日常である。

  3. 大綱はデジタル解剖学のトレーニングを伊藤啓研究室で積んでおり、また11年間に渡って共焦点顕微鏡を使った仕事しかしていない。また分子生物学的な命題を研究課題として持っていない。

1. について、もっと宣伝したら?とか、こういった機能を積まないか?と色々とユーザーから言われるが、作成グループ(Yong, 大綱, 2人のPIs)の全員がそういった商業的なアピールに頓着しない性質がある。PIsはソフトウェアの中身にこだわらず口出ししない、開発者である Yong, 大綱の2人は土台を固めることに固執する傾向がある。「土台なんていいから、人目を惹く機能をつけるんだよ!」というような人物がこのグループにはいない。特許すら面倒くさがって取らないメンバーであり、この状態で会社を作ったら間違いなく倒産する。

2. について、Yong はキャノンの 5D MarkII とその他 L レンズ群を駆使し非常に美しい写真を撮る・加工して仕上げる。彼の影響で大綱も写真を趣味とし、ソフトウェア作成中でもカメラの各部品、レンズについて、写真の構図やプリンターの色アルゴリズムについてなど写真議論を多々行っている。その結果、美しい画像・画質の追求は我々のプロジェクトにおいて非常に重要な要素となっている。

3. について、ソフトウェア開発に関わる生物学者が自分のテーマを持ってソフトウェアを作成した場合、その個人の問題が解決された時点でソフトウェアの開発が止まる場合がほとんどである。ただ幸運なことに、私は 3D で神経線維を、4D で発生を見る / 解析するという事以外の興味をあまりもっていない。なので FluoRender は共焦点顕微鏡を扱う全ての生物学者に当てはまるソフトウェアとなっている。

 以上こうやって眺めると、物体として存在しないソフトウェアというデジタルな産物でも、作成者の個性が色強く反映されているということが分かる。今後は神経線維の リアルタイム 3D セグメンテーション、HDR、セグメントした構造の解析モジュールの搭載、4Dセミオートマチックセグメンテーション、リアルタイムレジストレーション、4D 細胞トラッキングといった機能を搭載していく予定である。また既にこれらのうちのいくつかは、結果が出ている。2011 年中に上記のいくつかを搭載できることを目指して、これからも開発を続ける所存である。

最後に個人的なこと:
 最近、プログラマーのグループミーティングに参加するようになった。また SCI 研究所のセミナーにもちょくちょく顔を出すようにもなった。すると、案外話の内容が分かるもので、楽しめることが判明した。ただ、スーパーコンピューター系の話はメモリの構造やパラレル化の話が多く、あまりついていけていない。自分が分かる話は、シュミレーションデータを含めた可視化、データベースの構造、ボリュームレンダリング系に偏っている。従って IEEE visualization meeting の内容は非常に私の好みに一致しており、普通に楽しめた。もしプログラマーと共同研究する予定のある、もしくは現在行っている生物学者がこのページを読んでおられたら、是非、共同研究者であるプログラマーと一緒に彼らのミーティングに参加することをお勧めする。分からないことがあれば、彼らに尋ねれば良いのであり、そこで理解したことは間違いなくこれからのプログラマーとの共同研究に対してプラスに働く。

 その他、最近判明したことに FluoRender のユーザーは、共焦点ファイルからマルチレイヤーTIFFを作成するために私が書いた ImageJ マクロを全くと言っていいほどダウンロードしていない。おそらく彼らは手で全ての共焦点ファイルをTIFFに変換しているのである。

 プログラマーである Yong は「彼らも自分自身で書いているからダウンロードする必要がないんだよ」などと行っていたが、私には何らかの言語を書ける生物学者がそんなに多くいるとは思えない。生物学者にとって有用でありつつも、ソフトウェアとしてパッケージ化されていないものは多々存在している(例えば Matlab ベースのものなど)。なので書かないばかりか、ソーコード状態のものを使えないというのは生物学者にとって非常に由々しき事態であると私は思う。またもしライブイメージングや4Dなどを定量的に解析したいのであれば、自身でなんらかの言語が書けないと手も足も出ない。

 最近では新しい機能の開発を始める前に、私が単純化した基本アルゴリズムの開発とそのチューニングを書いてから、その結果をもとに本開発に移る場合も出てきている。生物学者がプログラミングをするというのは、プログラマとのコラボレーションだけでなく、これからの生物研究においても非常に重要なポイントになると私は思う。ただ、生物学者が C++ でゼロからライブラリを書くというのは時間的に厳しいものがある。なので Matlab, R, ImageJ マクロ・プラグイン環境などで書くというのが現実的な線であろう。また今後、そうした何らかの言語が書ける生物学者がどんどん増えてゆき、生物学者自身の手で解析系を書くのが普通になることを期待する。

2010, December
大綱英生



  • 前ページへ戻る

  • メインページへ戻る