安価・迅速・正確にroot parameterを求めたいが、ライン交差法での測定は時間的・体力的にできない!市販のルートスキャナーや画像解析装置・ソフトは高くて買えない!そんな悩みを解決しようと開発しました。
私が1993年にNIH Imageを初めて使った時は、NIH Imageのメニューからすべてできると考えていました。一番最初は、Dowdyらも使用している、perimeter(周長)関数を使ってみました。根長は、幅(太さ)を長さに比べれば無視できると考え、周長を1/2して計算します。しかし、この方法では外周しか測定しないため、根が込み入った時に交差した内側の周長が測定できませんでした。そこで、マクロを組んで込み入った時も測定できるようにしました。しかし、perimeter関数が何を計算しているかよくわからず、結果も変な値が出たりしたので使用はためらっていました。根の研究から離れたこともあり、しばらく画像解析はお休みしていました。
1996年に水稲の活力診断に根の画像解析が使えないかと考えて、ふたたび画像解析に取り組み始めました。一つのきっかけは、1995年の日作記の田中らの論文です。彼らは長さしか求めていなかったので、自分は太さまできちんと出してやろうというのがそもそものアイディアでした。そして、以前から考えていた水田土壌や肥料の仕事と結び付けてみようと思ったのでした。
田中らは根の長さを、細線化した画像の画素数から計算する方法を提案しています。この方法は、Smit(1994)も採用しており、、本質的にはライン交差法と同じです(Zoon and Tienderen, 1990)。従って、根を交差を避けながらランダムに配置する必要があり、手間がかかるので採用を見送り、新たなアルゴリズムを考えることにしました。なお、この方法は最悪の場合の誤差が約-20%〜+10% あります。
まず、従来必要だったランダムに置くために根を数cmに切りバラバラに置く必要をなくそうと考えました。なぜなら、イメージスキャナーでサンプリングした根をそのまま載せるだけで入力したかったためです。このほうが時間的に有利になりますし、交差を避けて入力する場合に短く切った根をランダムに置く場合に比べてより多くの根を配置できます。
過去の論文を当ってみたところ、以下に紹介するPan and BoltonとLebowitzの方法がありましたが、いずれも精度の点で問題点がありました。
Pan and Bolton の方法は、エッジ画素を連結方向から縦横と斜めに分類してカウントしピタゴラスの定理から周長を求めるものです。さらに、単純に周長の1/2を長さとするのではなく、面積、幅、長さ、周長の関係から、長さを周長と面積の関数として求めています。考え方は非常に素晴らしいと思い、論文が出てすぐに彼らにプログラムを教えてくださいと問い合わせたところ、ソフトは売り物(値段は当時のレートで8万円だったと思う)だとの返事があり、当時は購入を断念しました。1996年から根の画像解析にトライした当初に、この方法をNIH-imageのマクロで実現することを試みました。結果はまずまずだったのですが、残念ながら根の幅が1画素しかないときは正確ではありませんでした。(あくまでも、私がマクロを作って計算してみた結果です。彼らが売っているソフトでは違うかもしれません)。これでは細い水稲根の二次根がしばしば1画素の幅しかないために測定できません。また、厳密に考えると、この方法でもすべての根が同じ方向を向いている必要があり、ランダムでなくても万全であるとは言いにくい面があります。
Lebowitzの方法は、細線化画像で縦横の連結は長さ1、斜めの連結は長さ浮Qとするものです。細線化を導入したまでは素晴らしいのですが、この考え方では長さの過大評価の危険性があります。私がこの方法をマクロを作って計算すると約5%過大評価しました。この過大評価を少なくするように補正する方法についてはDorst and Smeuldersから理論的な検討がされていますが、まだランダムな配置を前提とした補正であり誤差がまだあります。
以上のことから、細線化した画像から長さを計算することにし、また長さの計算式はPan and Boltonの方法とLebowitzの方法の中間的な計算方法を導入することにしました。この計算では他の方法よりも配置による誤差が少なくなっています。また、副産物として交差による過少評価も少なくなる特徴があります。
太さは、平均や最大値はすぐ求まりますが、上の長さを求める方法と合わせて直径毎の長さを求める方法を模索しました。現在の方法では、太さはエッジ消去の回数から求めていますが、残念ながらランダムな配置が前提なので、精度は長さを求める場合よりも劣ります。また時間もかなりかかるので、新たな方法を検討しました。
上の方法のエッジ消去に代えて、最寄の背景画素からのピラゴラス距離に応じて消去することによって、直径の精度を格段に向上させることができました。
このソフトは、画像解析では定評のあるフリーのソフトです。計測や画像処理に必要な基本的な機能を備えていますので、やや複雑な画像解析もこなせます。
何より素晴らしいのは、マクロ機能を備えていることで、複雑な画像処理をメニューから一発でできるようになります。根の画像解析では、このマクロ機能をかなり使っています。
数年前までは更新の頻度が高かったのですが、v.1.61(20-Dec-96 リリース)以降は更新頻度はかなり低くなっています。私はこの1.61で動作確認を行なっています。
国内からは、ftp.nig.ac.jpのanonymous ftpで入手できますので、ここをお勧めします。下に示したリンク先はv.1.61です。
オリジナルは、nih-imageのwebから入手できます。ここはリンク集も充実しています。一度は覗いて見てください。
このソフトは、Scionという画像取り込みボードを作っているメーカーが、NIH ImageをWindowsに移植したものです。NIH Imageと殆ど操作は変わりはなく、私の作ったマクロも手直しすれば使えます。
入手方法ですが、まず Scion社の製品紹介のページ にアクセスします(やや遅いようですが、しばらく我慢してください)。ウェブページの中ほどにありますので、下にスクロールしていってください。あるいは、Scionの製品一覧からSoftwareをクリックしてください。上の方法でプログラムをとってこれない場合は、市販の書籍(例えば、医学・生物学研究のための画像解析テキスト−NIH Image, Scion Image 実践講座−, 小島 清嗣・岡本 洋一 著、羊土社)などの付録CDについている場合があるので、探してみてください。
どうしても駄目な場合はご相談ください。
早いMacがbetterです。が、G3あるいはG4搭載であれば問題ないと思います。古い(遅い)Macでも動きますが、最低でもPowerPC搭載のマシンをお勧めします。
画像解析にはメモリーが沢山必要です。最近のMacOS(特にOS/X)もメモリーを沢山必要としています。できるだけ、メモリーを増やしておくことをお勧めします。特に、古いMac(PowerPC以前)では搭載メモリーが少ないので、この場合は128Mぐらい思い切って増設してください。
NIH Imageにはできるだけ多くのメモリーを割り当ててください。マニュアルでは割り当てるべき量の最低量は、画像サイズのbyte数×3 + プログラムサイズ(約300k)バイトいるとされています。画像サイズは、縦の画素数×横の画素数(byte)です。例えば、1024×1024では1Mbyteですから最低1×3M + 300k = 3.3Mbyteいることになります。さらに、preferenceでbuffersizeを大きくしてください。多分、最低でも画像サイズの大きさにセットする必要があると思います。
私のマクロプログラムを動かすときは、さらに多くのメモリーを割り当てる必要があります。詳細はそれぞれのシステムでも異なると思いますので一概には言えませんが、画像をopenした後で、NIHImage側のフリーメモリ(appleメニューのaboutNIHimageで見れます)が画像のサイズと同じだけ残っていれば大丈夫のはずです。ひとつの目安にしてください。
システムの仮想メモリやRAMDoublerの使用は、スピードが遅いだけでなく動作が不安定になることがあります。動作がおかしいときは、仮想メモリやRAMDoublerをはずしてください。(特に古いMacを使う場合)
自己解凍形式で圧縮したものを下に置いておきます。クリックしてダウンロード後、NIH Image / Scion Image のフォルダに移動し、ダブルクリックして解凍してください。必要なファイル一式が展開されます。なお、ファイル一式は必ずNIH Image / Scion Image のフォルダに置いてください。
上のやり方がわからない時やうまくいかないときはe-mailで連絡を下さい。
なお、どのような利用をしているか把握する為、このマクロを使いはじめたら連絡を頂ければ幸いです。根以外にも、菌根の長さや神経細胞の長さを測りたいという人がいました。
きれいな画像でなければ画像解析はうまく行きません。できるだけきれいな画像を得て解析してください。
いろんな画像入力方法がありますが、イメージスキャナーをお勧めします。ビデオやディジタルカメラなどのCCDカメラは解像度が小さい(640×480程度)のと、周辺の歪みが多い、画像が汚い、などの欠点があるので本格的な解析には厳しいと思われます。ただし、ディジタルカメラは最近高解像度のものが安く市販されるようになり、使い方によっては有力だと思われます。
私は、HPのScanJet4cを使っています。光学解像度が600dpi(この時の読み取りピッチは0.042 mm)ですので、0.1 mm程度の水稲の二次根でも十分に解析可能です。根はメチルバイオレットで染色後に透明アクリルのバットに水をはり、くっついた部分がないように分散させてスキャナーの原稿台に乗せています。ただし、これだと画像が全体的に暗く二値化の時にノイズが多かったので、別売りの照明ユニット(透過原稿アダブター)を使用しました。
水稲根の解析をする時は、解像度は、300dpi(読み取りピッチ0.084mm)ないし600dpi(読み取りピッチ0.042mm)が良いと思われます。300dpiでも水稲の二次根は解析が可能ですが、これより荒い解像度では二次根が入力できるかどうか微妙です。原理的には細かいほど精度があがりますが、解像度を2倍にするとファイルサイズは4倍になりメモリーが不足したり時間がかかりすぎるなどの問題が出てきます。
読み取り範囲に気を付けてください。NIH Imageの制限で、解析できる画像の横の画素数は4096までですので、600dpiでは、17.4cm、300dpiでは34.7cmが限界です。なお、縦の画素数にはソフト上の制限はありません。
読み取りのモードは、白黒256階長のグレースケールが良いでしょう。染色した場合はこれで十分です。NIHで解析する上ではカラーである必要はありませんが、どうしてもカラーで取り込みを行いたい場合にはフルカラー(24ビット、Millions of Color)での取り込みをお勧めします。
画像の保存形式は、TIFF形式を選択してください。
私は、入力用のソフトはスキャナー付属のDeskScanIIを使用しています。typeにBlack and White Photoを指定し、pathはCustomize Print Pathで解像度600dpiまたは300dpiを設定しています。
追記:
以上の文章は6年ほど前に書いたものです。スキャナーは新しい機種が劇的に安く市販され、ディジタルカメラは当時の30万画素から一桁多い300万画素が標準になり、これらを使った入力も試してみたいと思っています。
スキャナーは、私が当時使った読み取り面を全面的に照明するものはちょっと見当たらず、部分的に照明するものが殆どです。従って、上と同じ方法は今となっては難しそうです。
NIH ImageまたはScion Imageのfolderに、マクロの入手で示した一連のファイルがあることを確認してください。
「システム構成」に基づいてNIH Imageにメモリーを割り当て、NIH Imageを立ち上げます。最初はOptionsメニューのPreferencesコマンドでbufferサイズを変更してください。変更後は、一度終了し再立ち上げを行う必要があります。なお、Scion Imageではこの操作は必要ありません。
NIH Image / Scion Imageを起動したら、SpecialメニューのLoad MacrosでRoot length 1.80(新しい版)のマクロプログラムを指定してください。なお、Root length 1.54 (古い版)は、特別な場合以外にはお勧めしません。
「画像入力」で入力したファイルを開きます。FileメニューのOpenコマンドで指定します。この画像を二値化します。まず、OptionsメニューのThresholdingコマンドを使用します。画像を見ながらLUTウィンドウ内をマウスで適当にドラッグし、最適と思われる閾値にします。この段階では、画像は白黒の二値化画像に見えますが実際の値はグレースケールですので、ProcessメニューのBinaryコマンド内のMake Binaryサブコマンドで二値化を行います。なお、Thresholdingコマンドではグレースケールが白黒になり、連続的に変化している場合は値の選択が難しいことがあります。その時は、OptionsメニューのDensitySliceコマンドを使用してください。このコマンドは、グレースケールを残したまま、画像のある範囲の値を赤くします。なお、この時255の値を範囲に入れることはできず、黒いままですのでご注意下さい。そして画像を見ながらLUTウィンドウ内をマウスで適当にドラッグし、最適と思われる閾値を得ます。255の部分は根と認識されると思いますが、DensitySliceでは含めることができないので、この場合は二値化の値を覚えておき、Theresholdingを行い、先ほどの値にLUTウィンドウ内をマウスでドラッグします。後は同様にMake Binaryを行ってください。
根と背景とのコントラストがはっきりしていないと、閾値を決めるのが困難です。値を低くするとノイズを拾うし、値を高くすると直径の小さい根が背景と認識されてしまいます。その時は、二値化の前にSharpenコマンドを使用してください。コントラストがはっきりしてくる場合があり、二値化の閾値の決定が楽になる場合があります。
まず、先ほどの操作で得た二値化画像をアクティブにします。
totalの長さだけを求めるとき
SpecialメニューのTotalLengthコマンドを指定します。計算後の画像はEdgeDeletedというwindow名に変更されていますのでご注意下さい。結果は、Resultsウィンドウに表示されます。1行目のLength,TotalLeng(th)カラムに同じ数字が入っていますが、これが長さ(cm)です。widthは計算しませんが0が入っています。
幅毎の長さを求めるとき
SpecialメニューのLength&Widthコマンドを指定します。解析の様子がウィンドウに次々に現れます。画像はEdgeDeletedというwindow名に変更され、オリジナルは保存されていませんのでご注意下さい。オリジナルが必要なときは、saveしておくか、あるいは画像のコピーを作り(FileメニューのDuplicateコマンド)この画像に対して画像処理をします。
結果は、Resultsウィンドウに表示されます。Area, Length, Length#, Widthはそれぞれ表面積、その直径領域の長さ、その直径領域以下の直径のものの長さ、直系領域の大きい方を示します。
1.の行は、根の面積から推定される表面積(Area)、および全長が示され(LengthおよびLength#)ます。
2.以下には直径毎の長さが入ります。Length#には右端のカラムのWidthで示した直径(mm)よりも太い根の長さが入っています。Lengthには、根の直径が直前の行のwidthで示した直径〜その行のwidthで示した直径の範囲のものの長さが入っています。
なお、解析が終わった後にAreaの表面積がまた出ます。これは、直径毎の長さから求めたもので、1.での値とは若干違います。計算方法が違うためなので、仕方ないでしょう。
注意
なお、ここで示した長さや直径はイメージスキャナーで画像を取り込み時のピッチのdpi数に基づいて計算します。スキャナーで取り込んだときにピッチの情報を書かなかったり、異なる単位で書き込んだ時はおかしな値になります。また、CCDカメラのようにピッチが特定できない場合もおかしな値になります。
そのような時は、dpi単位の値を入れてやる必要があります。(方法は後述)
同じ太さの根を測定するとその直径の前後にもある長さが存在するように見えますのでご注意下さい。
水稲の場合は、一次根と二次根は、Lengthを見ていって極小値で分けることができると思います。画像を見てご確認ください。0.5mm程度の一次根と0.1mm程度の二次根は、300dpiの解像度で十分分離できると思います。うまくいけば、もっと細い根も分離でき、例えば太い一次根と細い一次根、二次根、三次根ぐらいはおおまかに分離できるでしょう。
二値化画像に対して骨格抽出(skeletonize)を行い、中心線の画像を得ます。中心線を抽出している様子が刻々と表示されますのでよくわかると思います。根の長さはこの画像から求めています。まず、あるピクセルの近傍に応じて値を変えるフィルターをかけます。マクロでは、convolve('EdgeFiler2')です。この処理により、近傍の縦横あるいは斜めの画素数によってそのピクセルの値が変わります。従って、この値によっ縦横および斜めの連結方向の数がそれぞれ解りますす。次に、連結方向毎の画素数を集計しています。ヒストグラムが瞬間的に表示されるのがそうです。後は、私が提案した計算方法で長さを計算しています。
Rootlength1.80では、次に元の画像から、最寄の背景画素からの距離が近いものから順に消去します。各距離毎に同様に長さを求めていけば、直径毎の長さが求まるという仕組みです。
なお、Rootlength1.54では、エッジを次々に消去します。ここでのエッジとは、根の画素で縦横の隣(4近傍という)に背景の画素があるものを示します。このエッジ消去で根の周囲の画素を削るような感じになります。これで、幅が2画素までの根は消えてしまうことになり、この画像について上の方法で長さを求めたものは、残った根すなわち、ある幅以上の根の長さということになります。これを、根の画像が無くなるまで繰り返せば太さ毎の根の長さが解ることになります。
1.80は正確さなのでこちらをお使いください。ただし、解析できる直径に制限があり、300dpiで1.98 mmまでです。正確さを犠牲にしても、直径の制限を無くしたい場合は、1.54をお使いください。
直径の解釈には以下の点に注意してください。第1:スキャナーで画像入力を行った場合の解像度は、根の太さに対して十分ではありません。例えば、典型的な水稲の二次根は0.1mm程度であり300dpiの場合の読み取りピッチ0.084mmとほぼ同一ですので、正確な太さは求めることはできません。また、太さが1mm程度の根でも画素数で10ぐらいですから、入力の状況や二値化の値の選択での誤差が1-2画素出てきます。1.54版では加えて、第2:このプログラムでは根の太さはランダムな配置でのもとでの値ですので、配置によって値が異なります。根の配置された角度が27°の時には正確ですが、それ以外では最大20%程度の誤差があります。例えばランダムに配置された直径0.5mmで長さ1mの根は、0.3-0.45mmに60cm,0.45-0.60mmに30cm,それ以外にも若干あると計算しますので、絶対的なものとは考えないでください。大まかな分布が分かる程度と考えてください。
他に村上・米山の報告が参考になると思います。
自分でも使いやすく、かつ他の研究者にも使いやすいマクロプログラムを目指しています。ご質問、ご意見、ご要望を是非お知らせください。
将来のバージョンでの予定では以下のことを考えていますが、どうなることやら。
良いデータが得られて論文になされる場合は、以下の論文の引用をお願いします。
Tanaka,S., A.Yamauchi, and Y.Kono. 1995. Easily Accessible Method for Root Length Measurement Using an Image Analysis System. Jpn. J. Crop Sci. 64(1):144-147.
Dowdy, R.H, Nater E.A. , Dolan M.S. 1995. Quantification of the length and diameter of root segments with public domain software. Comm. Soil Sci. ,vol 26, n3-4, 459-468.
Pan, W.L. and R.P.Bolton 1991. Root Quantification by Edge Discrimination Using a Desktop Scanner.Agron.J.83:1047-1052.
Lebowitz,R.J. 1988. Digital image analysis measurement of root length and diameter. Environ. Exp.Bot. 28:267-273.
Smit,B et. al 1994. Automated measurement of root length with a 3-dimensional high-resolution scanner and image-analysis. Plant and Soil.158:145-149
Zoon,F.C. and P.H.Van Tienderen. 1990. A rapid quantitative measurement of root length and root branching by microcomputer image analysis. Plant and Soil 126,301-308
村上敏文、米山忠克、1988.画像解析法を利用した根長の測定.NARC研究速報.5:33-37
結果はマック版と若干異なることがあるようですが、その差は微々たるものです。原因は細線化にあると思うのですが、詳しくは追求してません。実用上は差し支えないようです。