簡単な画像処理
Eosを使った簡単な画像処理を行ってみましょう。
目次
画像処理
Eosのコマンドは全て、-hのオプションを予約語としてもっており、そのコマンドの簡単な使い方のヘルプが表示されるようになっています。
画像を観察するツール
2次元の画像を表示するためのコマンドが、Display2です。
例
$ Display2 -i filename
として実行することが出来ます。
画像の情報をみる
画像の情報をみるコマンドとしては、mrcInfo, mrcImageInfo, mrcImageDensityInfoをよく使います。
mrcInfoは、画像のヘッダー、及び、フッター(テイラ)の情報をみるためのものです。画像の大きさやフォーマットなどをみることができます。
例
$ mrcInfo -i filename
mrcImageInfoは、画像全体や周辺の情報を解析して、観察するためのものです。最大値、最小値、平均値、分散などの画像全体や周辺の統計値をみることができます。
例
$ mrcImageInfo -i filename -I
mrcImageDensityInfoは、正値を密度(Density)として取り扱い、そのときの情報を計算します。負値のボクセルは0として取り扱います。
例: 密度の重心を求めます。
$ mrcImageDensityInfo -i filename -m 2
画像を観察しやすくするためのツール
画像を観察しやすくするためのツール群です。
平滑化
透過型電子顕微鏡の(位相)コントラストは、低分解能側の強度が弱いために、よい条件で写真を撮影し、高分解の情報が残っていれば残っているだけ、一見すると画像が見えづらくなっています。そこで、CTF補正を行うか、あるいは、単純に、低周波成分を落としたり、高周波のノイズやシグナルを落とすことで、分子の情報などが観察しやすくなります。
空間分解能に応じて、ローパスフィルタをとるコマンドが、mrcImageLowPassFilterです。
$ mrcImageLowPassFilter -h
とすると簡単なヘルプがでて、ローパスフィルタのモードの意味が分かります。
例えば、Gauss関数に基づいたローパスフィルタの場合は次のようになります。
$ mrcImageLowPassFilter -i input -o output -m 4 -hvp 0.1
課題:与えられた画像に、2nmが半値になる指数関数に基づいたローパスフィルタをかけてみましょう。
非線形型のフィルタをそなえたものが、mrcImageSmoothingです。よく使うのは、メジアンフィルタです。メディアンフィルタは、ごま塩状のノイズを除去するのに向いています。カーネルの形は長方形(直方体)と円(球)を選択することができます。
例えば、半径が3pixelの円形の範囲の中の中央値(メジアン)をとるフィルタであれば
$ mrcImageSmoothing -i input -o output -r 3 -m 1 -M 1
となります。
課題:与えられた画像に、半径2pixelの円形の中央値(メジアン)フィルタをかけてみましょう。
ヒストグラム変換
画像のヒストグラムを変換して、コントラストを変え、画像を見やすくするためのツールです。
mrcImageHighlightingでは、arctan関数を用いたヒストグラム変換、ヒストグラム平滑化に対応しています。
$ mrcImageHighlighting -i input -o output -m 2 or $ mrcImageHighlighting -i input -o output -m 1 -b 0 -g 1
エッジ強調
元々、透過型電子顕微鏡の画像はエッジ強調がかかっています。更に、それを強調したいとき、画像間のフィッティングなどを行う際にエッジを強調した画像に対して実施したい場合に行います。
空間分解能に応じて、ハイパスフィルタをとるコマンドが、mrcImageHighPassFilterです。
画像の縦軸方向の変換
画像のコントラストを反転する
mrcImageToneReversalは、画像のコントラストを反転します。
$ mrcImageToneReversal -i input -o output
画像の空間方向の変換
転置
mrcImageTransposeは、画像を90度回転させます。数学的な意味での転置とは違うので注意が必要です。数学的な意味での転置は次の鏡像と組み合わせる必要があります。
$ mrcImageTranspose -i input -o output
鏡像
mrcImageMirroringは、画像のy軸に対する鏡像を求めます。これと上記の回転を組み合わせると鏡像を得ることができます。
$ mrcImageMirroring -i input -o output
回転・移動
mrcImageRotation, mrcImageShift, mrcImageTransは、画像の移動と回転を表現します。この時、画像の補間がとても重要な役割を果たします。
回転
mrcImageRotationは基本的にZ軸周りの画像の回転を行います。 mrcImageRotation3Dは、任意の回転を表現できます。
基本的に、2次元の画像の回転の場合には、
$ mrcImageRotation -i input -o output -a angle -Periodic
として利用します。angleは回転角[degree]を示しています。-Periodicは、周辺部分の取り扱いを示したものです。
三次元の画像を回転させる場合には、mrcImageRotation3Dを用います。
$ mrcImageRotation3D -i input -o output -EA YOYS 30 20 10 -M 2
として利用します。-EAで、オイラー角表示の自由回転を定義することができます。-Mは、画像の補間方法を示しています。
移動
mrcImageShiftやmrcImageMoveは、行列を用いてアフィン変換を行うためのコマンドです。
$ mrcImageShift -i input -o output -x 10 -y 10 -z 0 -m 2
として利用します。-x, -y, -zなどの引数でしめしたものは、ピクセル単位です。また、ここでは、-mは、画像の補間を指定しています。mrcImageROIと同様のモードを示しています。
アフィン変換(回転と移動)
mrcImageTransは、行列を用いてアフィン変換を行うためのコマンドです。
$ mrcImageTrans -i input -o output -M matrix -m 2
として利用します。ここでは、-mは、画像の補間を指定しています。mrcImageROIと同様のモードを示しています。matrixの値の単位はpixelです。
画像の周辺の変換
窓関数
周辺のコントラストを次第に落とすためのコマンドが、mrcImageWindowingになります。これは、デジタル画像処理においては、実画像が繰り返していることに対応するため、右左、上下のコントラスト、値が大きく違うと問題を生じるために講じる前処理にあたります。
例えば、周辺の画像の90%より外部の領域のコントラストを落とし、かつ、その値を画像の平均値とする場合には、
$ mrcImageWindowing -i input -o output -m 16
となります。
パッド
画像の周辺をシグナルのないウィンドウで覆います。デジタル画像処理の世界では、画像は繰り返していることになりますので、周辺の画像は反対側の周辺に影響を与えることになります。そこで、可能な限り周辺はシグナルのないウィンドウで覆います。できれば、原図の3倍以上となるようにした方がよいと云われています。
これを実行するコマンドは、mrcImagePadです。
例えば、256x256の大きさになるようにして、周辺の値の平均値で埋める場合には、
$ mrcImagePad -i input -o output -H 256 -W 256 -m 3
と実行すれば良いことになります。
二値化
2値化された画像をつかった多くの画像処理法があります。ここに示したコマンドは3次元画像に対しても実行することができます。
グレイ画像の2値化
mrcImageBinalizationは、グレイ画像を2値化するためのコマンドです。
$ mrcImageBinalization -i input -o output -m 32
は、大津の方法を使った自動閾値決定法による2値化を行います。
2値化画像のラベリング
mrcImageLabelingは、2値化画像をラベリングするためのコマンドです。
$ mrcImageLabeling -i input -o output
により、2値化画像のなかにある粒子画像(連結成分)毎にラベリングを行います。
2値化画像の面積計算
mrcImageAreaCalcは、2値化画像の中の粒子画像の面積を計算するためのコマンドです。
$ mrcImageAreaCalc -i input -o output
により、2値化画像のなかにある粒子画像(連結成分)毎に面積を計算します。一番大きい体積をもつ粒子画像のみを切り出したり、ある一定以上の体積の連結成分のみを残すなどして、ノイズからシグナルを切り出す際にも利用されます。
画像の変形
スプライン曲線に沿った変換
mrcImageUnbentROI らせん対称性を用いた構造解析などに用いられます。スプライン曲線を設定し、その曲線をy軸、それに垂直な向きをx軸に水平な方向として補間します。若干曲がったらせんなどを修正することに用いています。Display2からそのスプライン曲線を設定することができます。
傾斜画像の予測
mrcImageEstimateTiltImage 0度傾斜の画像から傾斜画像の予測、もしくは、傾斜画像から0度傾斜画像の予測をします。もちろん、本当は立体画像ですので、予測することは困難です。平面画像に近い場合には有効に働きます。
画像処理(複数枚)
複数枚の画像を取り扱ったコマンドもあります。
画像の統計処理
2枚の画像の平均をとる場合には、
$ mrcImageAverage
を利用することができます。この場合には、位置の移動や回転は考えません。ただし、実空間、フーリエ空間の重みを取り扱うことが出来ます。例えば、3次元再構成のための主たるプログラムであるmrc2Dto3Dで出力されるDoubleCounterの出力をつかって、二つの3次元構造間の足し算をすることができます。これにより、サブトモグラムの平均化などにもミッシングウェッジを考慮した平均化などが可能です。
その他、複数の画像間の統計的情報をとることが出来ます。
例えば、
$ mrcImageSN
をつかって、平均やSDを計算することなどが出来ます。
PCA(principle component analysis)を求めたければ
$ mrcImagePCA
が利用できます。Student-t検定を実施したいなら
$ mrcImageTTest
が利用できます。これ以外にもANOVAなどの解析も可能です。
画像間の相関
2枚の画像間の相関をとり、どのくらい似ているかを示すためのプログラムです。
画像の平行移動だけを与えて、相関を考える場合には、
$ mrcImageCorrelation
が有効です。平均像や一方の位置に合わせた画像なども出力できます。
画像の回転も考えた上で、相関を考える場合には
$ mrcImageAutoRotationCorrelation
が有効です。この場合も平均像や一方の位置に合わせた画像が出力できます。 参照像をつかった投影角の決定やクラスター解析などにも利用されるプログラムです。
上記のプログラムの3次元版が
$ mrcImageAutoRotationCorrelation3D
です。フーリエ空間での画像間の類似度をつかって、画像の分解能を評価するFSCという方法がありますが、その場合には下記を使うことになります。
$ mrcImageFourierShellCorrelation
これ以外にも、多くのコマンドが準備されています。コマンド一覧もしくは機能別コマンド一覧がありますので、確認してみて下さい。