理学電機製IP(イメージングプレート)用プログラム


データ変換、作成、演算等

コンパイルに際しては、ここを参照してください。
実行に関する注意は、ここをご覧ください。

ソースコード(とその履歴)のWeb経由の閲覧

ipbmp2rax

モノクロ、及び16、256色のグレースケールBitmapを R-AXISのファイルに変換します。あまり用途はないかもしれませんが、 フィルムをスキャナで読み込んで配向分布などを処理するために使えるほか、 文字などを表示してほかの人を驚かすことも出来ます。
実験データの捏造に繋がる行為も... できないことはないです。
変換の際は、強度の反転、指数関数変換などが指定できます。

iprax2bmp

R-AXISのファイルを256色グレースケールのBitmapに変換します。
ipbmp2raxの逆です。
8bit/pixel分のデータしか保持できないため、かなりのデータが失われます。
変換の際は、強度の反転、対数関数変換などが指定できます。

ipraw2rax

8-bits,16-bits/pixelのRAWデータを、R-AXISのデータに変換します。
FujiのFDL5000でとってきたデータを変換するモードも(個人的理由から)併せました。

iprax2raw

R-AXISのデータを、8-bits,16-bits/pixelのRAWデータに変換します。
R-AXISのデータのほうが強度のダイナミックレンジが広い(見かけ上)ので、 データが欠落します。どのように落とすかは適当に指定できます。

ipinfo

R-AXIS付属のdisplayソフトを使わなくても、コンソールから.img/.stlファイル等の情報を 確認できます。
すぐに調べたいときや、remoteからtelnet等でログインしている際に ファイルの内容を確認するのに有効です。
また、Windowsでは、ショートカットを作成しておくと、そこにファイルをDrag and Dropすると ファイルの情報が表示されます。

ipgetint

R-AXIS付属のdisplayソフトを使わなくても、コンソールから特定のピクセル(領域)の強度を 表示して確認できます。
あまり大きな領域を扱う必要はないはずですが、座標と強度の一覧を ファイルに出力することもできます。

ipedit

R-AXIS付属のdisplayソフトを使わずに、.img/.stlファイル等のヘッダを編集します。
ipinfo等と同じく、すぐに変更したいとき、remoteからtelnet等でログインしている際に ファイルの内容を変更するとき、及び多数のファイルを一括で扱うときなどに有効です。
但し、与えられた変更内容のチェックをしないので、よく理解しないままに変更すると、 以後は正常に扱えなくなる恐れがあります。

ipsub

2枚のデータを原点をずらして加算(減算)します。
基本的なファイル形式(pixelサイズなど)は同じでなくてはなりません。
大きさは同じでなくてもよくしました。
1枚目のファイルを基準に2枚目のファイルを適当にずらして演算し、出力します。
DOS/Vで使っていた頃のR-AXISのソフトにはあった(後でつけてもらったらしい)のですが、 HP-UX版以降、なくなったので作りました。
X線写真などで、バックグラウンドを引くときなどに便利です。
ipsubという名前ですが、基本的には加算をしますので、減算用には2枚目への係数を 負にする必要があります。

iplorentz

X線写真のLorentz, 偏向, 吸収の補正を行います。
試料は無配向/一軸配向のみに対応します。モノクロメータも可です。
モノクロメータ、一軸配向試料の方向は任意です。
試料による吸収では、試料は平板上でX線ビーム径は試料面積より小さいとしています。
試料からカメラまでの間の吸収も指定できます。
また、カメラは平板もしくは円筒カメラです。
各pixelへのX線の見込み角補正はしません。

ipchrato

ダイナミックレンジ拡大用の出力比を変更します。
理学電機のR-AXISの説明書にヘッダの一覧がありますが、そのうちの 「出力比(Hi/Low)」という値を変えます。通常は8.0か32.0のはずですが、 1.0 - 32767.0 の任意の値に変更します。但し、それぞれの値に対して 強度の最大値が変化しますが、それを超える強度は最大強度に丸められます。 また、32768以上の強度はこの値単位でしか記録されません。
この値は通常は2の冪であると思いますが、どんな値でもいいのかどうかは 知りませんので、読めなくなる(あるいは強度が正しく表示できなくなる) 恐れがあります。Windows版では(10.0等でも)大丈夫なようでした。

ipmagint

全体の強度に一律に定数倍します。

ippad

全体の強度に一律に定数を加算します。

iplogint

全強度をLn(log natural)変換します。
主に弱い強度部分を強調するために使います。

ipdiv

全強度を、別のファイルの強度で割ります。
相対強度を求めるような操作です。
割った後で定数倍しないと(オプションで指定)、ほとんど0か1程度になってしまって まともには見えません。

iptrim

特定の領域のみのデータに加工(トリミング)します。
もとのデータを少なくとも1つ(1 pixel)以上含んだ任意の領域のデータを生成します。 もとのデータの外側を含む領域を指定した場合は、それらは0で埋められます。

ipoffset

全体を平行移動します。
元の大きさからはみ出した部分は捨てられ、反対側に強度0の領域ができます。

ipresize

ピクセルサイズを拡大します。
ピクセルサイズを10倍まで拡大します。つまり、隣接するピクセル(の一部)と 合わせ、擬似的に画像を粗くします。演算は、ピクセル内は同じ強度が一様に 分布しているとして行っていますので、非整数の拡大率の場合、 厳密な強度を議論するにはデータが不正確になる可能性があります。
ドラム式のIPでは、ドラム方向のピクセルサイズが回転軸方向よりも僅かに 短くなるはずですので(当方では Z:0.05mm/pixel, X:0.0497mm/pixel)、 各ピクセルは正方形ではありません。それを無理矢理正方形にする際などに 有効です。特に、各種画像形式に変換する際は、各ピクセルは正方形であることを 仮定していることが多いので、多少は便利でしょう。

ipdiet

特定のIPサイズのデータに関して、無駄なデータの削除と情報修正を行います。
当方では、X方向には 2300 pixel (125 mm指定) か 3800 pixel (200 mm指定) のどちらかしか 読取時に指定できません。よって、これより小さいサイズでは、無駄な領域が 非常に多く存在し、ファイルサイズを大きくしています。このプログラムは その無駄な領域を削除します。
また、Z方向にも、読取時の設定ミスによる無駄な領域があることがありますので削除し、 また平板以外のカメラではピクセルサイズが(上記とは)更に異なるにもかかわらず その値が記録されないのを修正します。
その他、不正な値が設定されているヘッダを修正します。
非常に用途が特殊ですので、あまり一般性はないでしょう。 また、「無駄な領域」の確認は、いくつかの値に決め打ちです。 その他の場合は、ここにあるほかのプログラムを組み合わせて実現できます (つまり面倒なのでよく使うものだけ一発でできるようにまとめただけです)。

ipgen

一定強度のダミーデータを作成します。用途は主にテスト用です。

ipdos2hp

古い(DOSで制御していた頃の)ファイルと HP-UX以降のファイルの相互変換を行います。
DOS形式から新形式にはrdc((C)A.Hoshino)を使うとできますが、 逆を行うことを主目的に作りました。実際はどちらでもできます。
新形式のデータをDOSで扱う理由はあまりないかもしれませんが、当方では 解像度のあまり大きくないビデオプリンタでの出力に使います。

ipprofile

動径方向の散乱強度プロファイルを作成します。
中心から一定の角度ステップで強度を計算します。各角度に含まれるピクセル数やピクセル面積も 表示することができます。また、強度は pixel 単位に平均化/平均化なし、のどちらも可です。 プロファイル計算に寄与する角度範囲(方位角方向)を制限することもできます。
R-AXISでは、2θ-I conversion として存在しますが、R-AXIS のもの(HP-UX版)よりも まじめに計算しています。なお、当研究室で使っているHP-UX版では、角度ステップが 変更できないというバグがありますし、実際にどのように計算しているのかを 理学電機が明らかにしないので、データ処理に使うわけにいかなくなり、自分で書きました。
各ピクセルの強度を角度に換算する際には、平板カメラではまじめに計算しています。 円筒カメラではまじめにやると大変なので、局所的に曲率を円で近似しています。 きっと問題ないと思いますが、厳密な意味での面積計算は行っていないことになります。
また、円筒カメラなどでピクセルあたりの平均強度を求める際に、強度の異方性が問題になりますが、 きちんと対応しています。積分強度の際に欠けた回折環を考慮して強度を求めることも可能です。 特に円筒カメラでは、R-AXISではきちんと対応できないと思いますが、こちらではOKです。

ipxprofile

ipprofile と同じですが、特定の領域を計算に入れないためのコードを追加しています。
その分、ipprofile よりも遅いですので、別にしています。実験的コードです。

ipsmooth

スムージング/フィルタリングを行います。
(2n+1) x (2n+1) の領域の強度を用いて平滑化を行います。
単純な平均、中心部を重視する単純な重みつき平均、及び2次元多項式適合を行った重みつき平均の いずれかができます。ピクセル数単位で領域を決めますので、縦横のピクセルサイズの差異が大きいと、 不正確になります。
なお、フィルタマトリックスをファイルにしておき、読み込んで使うことも可能です。
Edge強調などを行うフィルタを作って適応できます。詳しくは -h で確認してください。

ipitex2rax

ITEX ファイルを R-AXISのファイルに変換します。
ITEX ファイルの用途はよく知りません。 たとえば、浜松ホトニクスのX線用CCDカメラなどはこのフォーマットを使っているようです。
浜松ホトニクスHiPic/Ver4.1、Ver6.0 用のオプションがあります。
SPring8 の BL45XU-SP で作成したX線小角散乱データの処理用に作ったのですが、 カメラ長や波長、ピクセルサイズなどは、R-AXISのファイルに変換後に、 R-AXIS の"Header File Edit"や ipedit 等を用いて修正する必要があります。
変換の際は、強度の反転、左右反転などが指定できます。

ipiifix

Image Intensifier の収差補正を行います。
Image Intensifier(II) では、周辺部に行くほどひずみが大きくなります。 受光面の湾曲と、電子線レンズの収差によるものと思われます。
このうち、受光面の湾曲の効果を画像として補正します。このページもご覧ください。
ただし、使用するIIの特性にも依るので、補正式を修正する必要があります。
また、画像の変換を正確に行っていないので、周辺部に行くほど、細かいノイズが 生じます。これを正しくする予定はありません。

iphist

強度の頻度分布を計算します。
強度の分布がどの程度であるか、たとえば、弱い強度ばかりに局在しているのか、 均一に分布しているのかを計算します。
ピーク強度を調べることで判断することもできるかと思いますが、ノイズの混入や 中心部の散乱などによって、最大強度だけで判断することができないことが多いですが、 分布を計算すればある程度の判断ができます。
但し、鋭いBragg反射の面積は非常に小さいことに注意すべきです。

iprax2png

R-AXIS のファイルを PNG (Portable Network Graphics) ファイルに変換します。
PNGファイルには 16-bits/pixel グレースケールがあるため、18-bits/pixel の R-AXIS ファイルから少ないロスで変換できます。R-AXIS のファイルを直接 処理できない環境での表示などに有効です。
ただし、使用するソフトウェアによっては、16-bits/pixel のPNGファイルを 扱えないものもあります。
また、通常は 16-bits グレースケールの強度を一度にすべて表示することは 出来ないので(通常は256階調まで)、表示するソフトウェア側で適当に表示用のパラメータを 変える必要があるでしょう。
後に R-AXIS のファイルに再変換する際のため、元の R-AXIS ファイルの情報を PNGファイル中に保存できます[zTXtチャンクにxRAXISHEADというキーワードで Base64-encodeされたR-AXISのヘッダ(1024Bytes)が保存されます]。
PNG への変換の際のフィルタ決定のアルゴリズムがあまりよくないので、 市販ソフトウェアよりも少しファイルが大きくなるかもしれません。
変換の際には、強度を変換することが出来ます。
なお、zlib ライブラリを使用しています。
HP-UX 9.0x の標準の cc では、zlib が正しくコンパイルされず、その影響で 正常に機能しない可能性が高いですので、_HASZLIB を定義してビルドしないと 動かないようにしましたので、ご注意ください。

ippng2rax

PNG (Portable Network Graphics) ファイルを R-AXIS のファイルに変換します。
1,2,4,8,16-bits/pixel グレースケールの PNG ファイルを変換することが出来ます。
上記 iprax2png で変換された PNG ファイルに保存されている、R-AXIS ファイルの 情報があれば、再現を試みます。
変換の際には、強度を変換することが出来ます。
zlib ライブラリを使用しています。
HP-UX 9.0x の標準の cc では、zlib が正しくコンパイルされず、その影響で 正常に機能しない可能性が高いですので、_HASZLIB を定義してビルドしないと 動かないようにしましたので、ご注意ください。

ipcmp2rax

Compton 散乱強度を計算してR-AXISファイルにします。
非弾性散乱は「前方散乱(〜電子数) - 弾性散乱」で近似しています。
また、絶対強度ではありません。適度にスケールしないといけません。
散乱因子は、libxray.c に書かれていますので、必要ならば対応する原子を 増やすことができます。値は、"International Tables for Crystallography" に 書かれている、4つのgaussianでの近似関数の係数です。

ippeak

指定した楕円領域中の強度を計算します。
中心座標、長軸・短軸の長さ、回転角などを指定し、その領域に中心を含むピクセルの 強度の和や、外周部の強度などを計算します。
R-AXISでのIntegralに似たデータを表示しますが、領域は長方形ではなく楕円形であり、 回転も可能な点が異なっています。また、対称な領域について一度に表示できます。

ippr2rax

一次元プロファイルや線形・gaussian関数などから、等方的なR-AXISファイルを 作成します。
元になるデータは、2θもしくは q についての積分強度である必要があります。

iprot

R-AXIS のファイルを回転します。
きちんと強度を計算することは困難なため、補間法、もしくはサンプリング法を用います。
どちらを用いるか、及びサンプリングの際のサンプリング数は指定可能です。

ipfft

R-AXIS のファイルにFFTフィルタをかけます。
DFT -> bandpass-filter -> IDFT で特定の振動数成分だけを残したり、 DFT後の実部/虚部/振幅/位相の情報を抽出したりできます。
但し、あくまでも「画像」としてのFFTです。
動径分布関数などを求めるものではありません。

ipmask

R-AXIS のファイルにマスクを掛けます。
長方形、もしくは円形のマスクを掛け、その部分の強度を0にします。

ipfib

繊維写真を見やすく修正します。
繊維写真(一軸配向写真)を、繊維方向とそれに垂直な方向とが それぞれ画像の垂直方向、水平方向になるように補正します。
いわゆるξ−ζ変換です。
変換後の画像のピクセルは、実空間ではなくq-空間の次元を持ちますので、 R-AXIS等で扱うには注意が必要です。
なお、繊維方向は元の画像での鉛直方向である必要があります(若干のズレなら オプションで修正可能です)。そうでない場合には、iprot等で回転等をしてから 使用してください。

ipbeta

Beta-I変換を行います。
R-AXISのβ-I conversion に対応するものです。つまり、方位角方向の プロファイルを作成します。
R-AXISと同じように動くように作ってありますので、方位角方向の分割数が そのピクセル数と同程度かそれ以下の場合には、大きな誤差が出ます。
また、もともとそれほど正確なものではないようです。
ただし、散乱角度幅に余裕があるようなところでは、実用上は 問題ない程度のプロファイルが得られます。
Beta-I変換を大量に行わないといけない場合などには便利でしょう。

ipline

Line Profile を計算します。
画像上の2点間を結ぶ線分上のプロファイルを計算します。
単純なサンプリングと近接ピクセルを用いた補間とが選べます。

ipf2rax

結晶構造データから、繊維写真を生成します。
ラウエ関数を考慮し、繊維方向を軸として平均した強度を算出します。
入力にはXMolの.xyzファイルを用います。
大変時間がかかります。

ipbmap

平面極座標画像に変換します。
Beta-I変換を行い、画像を生成します。
つまり、横方向に半径、縦方向に方位角をとった画像に変換します。
単に画像としての変換を行うので、カメラ形状などは一切考慮されません。
また、元の画像とは各ピクセルの持つ「密度」が場所によって異なるので、 注意が必要です。
強度重視、平均値、単なる逆サンプリングによる速度重視、の3種類の 方法があります。
強度重視では、散乱角の大きいところで強度が分散してしまって見づらい写真でも、 多くのピクセルを集めるのでしっかりしたピークとして見えることがあります。

ipchtype

平板カメラと円筒カメラの写真を相互の形式に変換します。
元の形式は、平板カメラ、もしくは円筒軸が画面に垂直な円筒カメラのみで、
元の形式を指定すれば、そうではないほうの形式に変換します。 特に指定しなければ、ファイルヘッダから読み取ります。
ピクセル単位で変換するため、誤差を含みますが、プロファイルを求めると その違いはほとんど目立たないことを確認しています。
また、円筒カメラから平板への変換では、2θが90度付近以上の画像は (当然ながら)変換できませんので、切り捨てられます。

iptempf

一様な温度因子分だけ、強度を補正します。

ipcentre

画像の中心を求めます。
単に、強度データを重みとして、重心を求めているだけです。
なるべく上下左右に偏りがないよう、重心を求める際の領域を制限することができます。

iptiff2rax

TIFFファイルを R-AXIS のファイルに変換します。
8,16-bits/pixel グレースケールの TIFF ファイルを変換することが出来ます。
変換の際には、強度を変換することが出来ます。
TIFF ライブラリを使用しています。
_HASTIFF を定義してビルドしないと動かないようにしましたので、ご注意ください。


GO PREV.つるたにの自己紹介へ戻る
GO PREV.つるたにのホームページへ戻る
turutani@scphys.kyoto-u.ac.jp