1 / 206
以下の 2017/4/21 の E-mail は SIXM 用に書いたものではありませんが、後述する測定 170516c で撮影した
SIXM の CT 画像に発生していたリングアーチファクトについて議論しているので、ここに転載します。
Date:Fri, 21 Apr 2017 18:58:01 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

北山, 杉本, Megumi MATSUMOTO, Aiko Nakato, 三宅 亮, 中村隆太, Yohei IGAMI,
Kentaro UESUGI, Akihisa TAKEUCHI, Akira TSUCHIYAMA

Subject: リングアーチファクト
みなさま、
GSJ/AIST のなかのです。先日来の E-mails で EDO-TAJIMA を使った FZP-CT の問題点としてぼくが言っていることは様々なサンプル回転角で測定した X 線透過率もしくは投影画像の上の同じ位置に像（偽像）があると、そのデータから再構成したスライス画像の上に円弧の帯状の偽像（リングアーチファクト）が発生し、それらのスライス画像を積み重ねた３次元 CT 画像ではリングアーチファクトは球殻状の偽像になるですが、このリングアーチファクトの詳細を知らない人がいるかもしれないので、以下ではそれについて少し説明します（リングアーチファクトの解説は X 線 CT の大抵の教科書に載っていますが）。
まずは理論的な考察です。測定した投影値 sinogram からスライス画像を再構成する演算は線形（つまり可逆）なので、リングアーチファクトを模した円周の帯の像（実像）を様々なサンプル回転角で撮影した場合の投影値について考えます。それは円の像の投影値の理論値から計算できます。今、「サンプル回転軸を通る X 線の光路と交差する点」を原点とし X 線光路と直交している r 軸の上に並んだ検出器で測定したすると、サンプル
回転軸を中心とする半径 R の均質な円の像（その LAC の値を１とします）の投影値（==円を透過した X 線の光路長）はサンプル回転角θに依存しない下式で表すことができます：
f(r, θ; R)= 2×√( R^2 - r^2)

when

r ≦ R

=0

when

r ≧ R

それゆえ、内側と外側の半径がそれぞれ R1 と R2 の円周の帯の像の投影値は下式の値になります（円を撮影した２枚の CT 画像の差分画像の投影値 sinogram ==２画像それぞれの投影値 sinograms の差分 sinogram）：
g(r, θ; R1, R2) = f(r, θ; R2) - f(r, θ; R1)
この E-mail に添付した ra.pdf に
R1 = 3/4（== 0.75）、7/8、15/16、17/16、9/8 or 5/4 かつ R2 = 1の場合の g(r, θ; R1, R2) のグラフを示しました。ただし、横軸 r が正の部分だけをプロットしました。また、
R1 > R2 の時は投影値が負になっていますが、それは R1 と R2 がそれぞれ外側と内側の半径で、円周の帯の像の吸収係数が負の値の場合だと考えて下さい。これらのグラフから円周の帯の投影値の空間分布に関して以下のことがわかります（正確には、[0] は数式からわかることですが）。

2 / 206[0] 投影値の空間分布は回転軸に対応する原点 r = 0 に関して左右対称。
[1] 外側の境界の外の投影値は０（当たり前のことかもしれませんが）。
[2] 内側の境界から中心に至る領域は０でないほぼ一定の値になっている。
[3] 内側の境界の位置に鋭いピークがある。
[4] 帯の幅 |R1 - R2| が小さくなると投影値は０に近づいてゆく。
これらのうち重要なのは [4] で、理論的には幅が無限小の円周の帯の投影値は概ね０になります。逆に言うと、様々な回転角の投影画像の同じ r の位置に周囲の投影値とほんの少し違う（一定の値の？）偽像があれば、それを再構成した画像にリングアーチファクトが発生します。
バイナリファイルとして与えた sinogram の任意の位置にリングアーチファクトの原因となる投影値を埋め込
むプログラム ra を書いてみました。この E-mail に添付した ra.c.txt がそのソースコードで、Linux 機の上でのコンパイル法は以下の通りです。
mv

ra.c.txt

cut

–d:

make

ra.c

-f2-

ra.c.txt>ra.c# 行番号を削除

raプログラム ra の起動法には以下の２通りのものがあります。
ra

Nr

Nv

SG.bin

すべての画素（検出器）の投影値が０の空の sinogram を作成し、その上の指定した位置に指定した
投影値を埋め込む。ただし、Nr：sinogram の検出器の個数
Nv：サンプル回転のステップ数（投影数）
SG.bin：新しい sinogram のファイル名。"-" を指定するとそのデータを標準出力に書き出す。
raorg.binnew.bin既存の sinogram の指定した位置に指定した投影値を埋め込む。ただし、
org.bin：既存の sinogram のファイル名。
"-" を指定するとそのデータを標準出力から読み込む。
new.bin：新しい sinogram のファイル名。"-" を指定するとそのデータを標準出力に書き出す。
このようにして起動した後、プログラム ra は空白、タブもしくは改行コードで区切られた４個の値 r、v1、v2と p を標準入力から順次読み込み、sinogram の上の座標値 (r, v1)～(r, v2) の線上に位置する画素（検出器）のそれぞれに投影値 p を埋め込みます。ただし、座標値 r、v1 と v2 は以下の範囲の正の整数値です：
0 ≦ r < Nr（sinogram の検出器の個数）
0 ≦ v1 ≦ v2 < Nv（投影数）
書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sp8ct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sp8ct.zip

3 / 206に入っている画像再構成プログラム sg2tg などを使えばプログラム ra で合成した sinogram からリングアー
チファクトが発生した CT 画像を再構成することができます。また、上記の書庫ファイルに入っているプログ
ラム a2tiff で sinogram のバイナリファイルを TIFF 画像ファイルに変換すればその内容を表示可能です。
この E-mail に添付した ra_test.txt にプログラム ra、sg2tg と a2tiff の使用例を示しました。また、それで得た sinogram の画像 sg_[0-5].tif と CT 画像 tg_[0-5].tif をこの E-mail に添付した ra_test.pdf に並べました。
ただし、ra_test.txt で使用した sg.bin は（先の書庫ファイルに入っている）X 線 CTsimulator プログラム tg2sgで撮影した「Lenna 画像」の sinogram です。ra_test.txt に記した処理をそちらで実行したい場合は、SPring8 の CT 実験で作成した画像再構成のテスト用の sinogram を使うと良いでしょう。そのバイナリファイル"*.sg" は CT 実験の測定それぞれのディレクトリ test/ の下にあるはずです。ra_test.txt に記したように
Lenna 画像の sinogram では検出器の個数 Nr = 512
投影数 Nv = 450
検出器間隔（測定画像の画素の辺長）= 1（単位は画素幅）
回転軸の位置（いわゆる「センター値」）= 255.5
でしたが、これらを使用する sinogram に応じた値に適宜変更して下さい。また、標準入力からプログラム raに与える座標値（r、v1、v2）についても同様です。
問題
ra_test.txt では下半分と上半分の半円状および円周状のリングアーチファクトを発生させていますが、左半分や右半分の半円状のものを発生させるにはどうすれば良いでしょうか？ v1 と v2 の値を変えてみて下さい。
添付ファイル ra.pdf

4 / 206
添付ファイル ra.c.txt
1:
2: #include <stdio.h>
3: #include <stdlib.h>4:
5: static void
Error(char *msg)
6: {7:(void)fputs(msg,stderr); (void)fputc('¥n',stderr); exit(1);8: }9:10: #define LEN
2048
11:
12: intmain(int argc,char **argv)
13: {
14:
FILE
*file;
15:
char
str[LEN];
16:
int
Nd,Nv,d,v1,v2;
17:
size_t Ndv,v;
18:
double *P,p;19:
20:
if (argc!=3 && argc!=4) Error("usage : ra org_SG.bin new_SG.bin¥n"
21:"
ra detectors views SG.bin");
22:
23:
if (argc==3) {24:
if (argv[1][0]=='-')
25:
file=stdin;
26:
else
27:
if ((file=fopen(argv[1],"rb"))==NULL) Error("file not found.");28:
29:
if (fgets(str,LEN,file)==NULL ||30:sscanf(str,"%d %d",&Nd,&Nv)!=2 ||31:
Nd<=0 || Nv<=0) Error("sinogram size read error.");32:
33:(void)fprintf(stderr,"%d¥t%d¥n",Nd,Nv);
34:
}
35:
else
36:
if ((Nd=atoi(argv[1]))<=0 ||37:(Nv=atoi(argv[2]))<=0) Error("bad sinogram size.");38:
39:
Ndv=(size_t)Nd*Nv;
40:
41:
if ((P=(double *)malloc(sizeof(double)*Ndv))==NULL)
42:
Error("memory allocation error.");43:
44:
if (argc==3) {45:
if (fread(P,sizeof(double),Ndv,file)!=Ndv)
46:
Error("sinogram data read error.");47:
48:
if (file!=stdin) (void)fclose(file);
49:
}
50:
else {
51:
P+=Ndv; for (v=0; v<Nv; v++) for (d=0; d<Nd; d++) *(--P)=0.0;
52:
}
53:
while (scanf("%d %d %d %lf",&d,&v1,&v2,&p)==4)54:
if (d>=0 && d<Nd) {55:
if (v1<0) v1=0;

5 / 206
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74: }

if (v2>=Nv) v2=Nv-1;
for (v=v1; v<=v2; v++) P[v*Nd+d]=p;}if (argv[argc-1][0]=='-')
file=stdout;else
if ((file=fopen(argv[argc-1],"wb"))==NULL) Error("file not open.");(void)fprintf(file,"%d¥t%d¥t1¥n",Nd,Nv);(void)fwrite(P,sizeof(double),Ndv,file);
if (file!=stdout) (void)fclose(file);
free(P);
return 0;

添付ファイルra_test.txt# usagesra#usage : ra org_SG.bin new_SG.bin#

ra detectors views SG.bin
a2tiff#usage : a2tiff array {base step} BPS TIFF
sg2tg

#

usage : sg2tg sinogram dr r0/dr t0 {f0 df} BPS tomogram# original sinogram#

sg.bin#number of detectors = 512#

number of views = 450#

detector interval#rotation center = 255.5=1# sinogram and tomogram
a2tiff sg.bin 8 sg_0.tif
#

512

450

#

795.309877

87275.665363

sg2tg sg.bin 1 -255.5 0 8 tg_0.tif#

0.000000

243.875015

6 / 206# lower-half ringecho 128 0 449 1 | ra 512 450 - | a2tiff - 1 sg_1.tif
#

512

#

0.000000

450
1.000000

echo 128 0 449 0 | ra sg.bin - | sg2tg - 1 -255.5 0 8 tg_1.tif
#

512

450

#

-660.070374

470.756317# upper-half ringecho 383 0 449 1 | ra 512 450 - | a2tiff - 1 sg_2.tif
#

512

#

0.000000

450
1.000000

echo 383 0 449 0 | ra sg.bin - | sg2tg - 1 -255.5 0 8 tg_2.tif
#

512

450

#

-758.019714

675.868042# broad upper-half ringseq -f '%g 0 449 1' 373 393 | ra 512 450 - | a2tiff - 1 sg_3.tif
#

512

#

0.000000

450
1.000000

seq -f '%g 0 449 0' 373 393 | ra sg.bin - | sg2tg - 1 -255.5 0 8 tg_3.tif
#

512

450

#

-1350.692139

1510.811035# full ring
( echo 128 0 449 1 ; echo 383 0 449 1 ) | ra 512 450 - | a2tiff - 1 sg_4.tif
#

512

#

0.000000

450
1.000000( echo 128 0 449 0 ; echo 383 0 449 0 ) | ra sg.bin - | sg2tg - 1 -255.5 0 8 tg_4.tif
#

512

450

#

-756.823608

676.548828# broad full ring
( seq -f '%g 0 449 1' 118 138 ; seq -f '%g 0 449 1' 373 393 ) | ra 512 450 - | a2tiff - 1 sg_5.tif
#

512

#

0.000000

450
1.000000( seq -f '%g 0 449 0' 118 138 ; seq -f '%g 0 449 0' 373 393 ) | ra sg.bin - | sg2tg - 1 -255.5 0 8 tg_5.tif
#

512

450

#

-1334.606323

1519.171265

7 / 206
添付ファイル ra_test.pdf

8 / 206
Date:

Tue, 16 May 2017 20:01:17 +0900

From:

Tsukasa NAKANO

To:

Kentaro UESUGI, Akihisa TAKEUCHI

Cc:

MATSUNO Junya, Akira TSUCHIYAMA, Masayuki Uesugi

Subject: his2r012
たけうちさま、
うえすぎさま、なかのです。昨日少しお話ししたように、SIXM 実験で得た HIS ファイルに格納されている測定した RP（refraction profile）画像の横一列の X 線強度値 I(p)の空間分布の２次モーメントを計算するプログラム
his2r012 を作成しました。SIXM 実験用に書いた I(p)の分布の０および１次モーメントを計算するプログラム
his2raw のものを改造したコードです。念のため、his2raw の使い方などを説明している 2016/2/10 の E-mail（Subject：new_programs_for_SIXM-1）をこの E-mail に添付します。
his2raw は HIS ファイルから以下の２種類の画像を抽出します。
RI（raw intensity）画像
その画素の値は 、RI = Σ_p

I(p) / Np

ただし、Np は RP 画像の横画素数で、p = 0 ～ Np - 1
RR（raw refraction）画像
RR = Σ_p { I(p)・p } / Σ_pI(p)his2r012 はこれらに加えて I(p)の２次モーメントの値を格納した画像を作ります。ただし、I(p)の単純な２次モーメントの値
R2 = Σ_p { I(p)・p^2 } / Σ_pI(p)を格納した画像を眺めると RR 画像との違いがなかったので、his2r012 では I(p) の１および２次モーメントからなる「分散（variance）」に相当した値
RV = R2 - RR^2を格納した画像を作るようにしました。なお、これらの値の計算は his2r012 のソースコード "his2r012.c" の255～258 行目で行っています。
his2r012 のソースコードの類は BL47XU にある Linux 計算機 test01 のユーザ bl47xu の「Desktop」のディレクトリ sixm/の下に置いてあります。このディレクトリには既存の SIXM 用のプログラムのソースコードや実行ファイルの類も置いてありますが、それらのための Makefile では his2r012 をコンパイルできません。
his2r012 専用の Makefile.his2r012 を使って
make

-f

Makefile.his2r012と入力して his2r012 をコンパイルして下さい（コンパイル済ですが）。その後、端末から"tcsh"と入力すれば

9 / 206
sixm/の下の his2r012 を含むプログラムすべてを test01 の任意のディレクトリから実行できます。
プログラム his2r012 の起動法は前述の 2016/1/10 の E-mail で説明している his2raw のものと概ね同じです。
その起動パラメータに加えて his2r012 では RP の分散の値 RV の投影画像のファイル名の format を指定する必要があります。
his2r012

HIS

scans

views_RL

darks

{A

B

C}

R0_format

R1_format

R2_format> raw.log

HIS
HIS ファイルの名前
scans
SIXM のスキャン数（ファイル a.log の１行目の最初の値）
views_RL
抽出する RI、
RR および RV 画像の投影番号。
"-" を指定してすべての投影の画像を抽出すれば良い。
darks
RP 画像用の暗電流画像の枚数（a.log の１行目の３番目の値）
A、B および C
ケラレ補正用の係数値。
R0_formt、R1_format および R2_format
RI、RR および RV の投影画像それぞれのファイル名の format。"-" を指定すれば画像ファイルを作成しない。
raw.log
投影画像ごとに以下の７個の値を並べた行を書き込むファイルの名前。
[1] 投影番号[2,3] その投影画像の上の RI の値の最小値と最大値[4,5] その投影画像の上の RR の値の最小値と最大値[6,7] その投影画像の上の RV の値の最小値と最大値
今回の SIXM 実験で AV 貝を撮影した測定 170513a のデータを使って his2r012 の動作テストを行いました。
その測定のデータファイル a.HIS とログファイル a.log を test01 のディレクトリ/media/SSD/170513a/にコ
ピーしてあります。そのディレクトリに移動してこの E-mail に添付したファイル 170513a_memo.txt に記した処理を実行しました。以下の入力を行えばそれを再実行できます。
# ぼくがテストで作成したファイルやディレクトリを消去する。
rm

-r

r*

t*

b*

# そこにある memo.txt は前記の 170513a_memo.txt と同じもので、# 以下の入力によりそれを C-shell script として実行できる。
tcsh

memo.txt

10 / 206
なお、この処理の最後に his2r012 で抽出した分散の投影画像に対する２通りの方法の画像再構成を試していますが、それらには理論的な根拠はありません。
とりあえず以上です。
添付ファイル（2016/2/10 の E-mail）
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2016.pdf#page=36
添付ファイル 170513a_memo.txt
間違いがありました。2017/5/19 19:27:02 の E-mail の添付ファイル memo.txt を御覧下さい。
Date:Fri, 19 May 2017 12:13:18 +0900

From:

Tsukasa NAKANO

To:

北山, MATSUNO Junya

Cc:

三宅, 杉本, Masayuki Uesugi, 松本, 伊神,Akira TSUCHIYAMA, Kentaro UESUGI, Akihisa TAKEUCHI

Subject: SIXM_170516g_FRCT
みなさま、
GSJ/AIST のなかのです。
AV 貝のサンプル AV-3 を 360 度回転させて SIXM で撮影した測定 170516g の normalview と reverse view の CT 画像（吸収画像と位相画像）を再構成し、それらそれぞれの simple average（SA）
によって full rotaion CT（FRCT）画像を合成しました。normal view と reverse view の画像用のサンプル回
転軸がすべて同じ位置だった（正確には、同じ位置を指定して再構成しても問題なかった）ので、今回の FRCT
画像は従来の「サンプル回転角が０～180 度と 180～360 度のものを SA で合成した投影画像」から再構成した FRCT 画像とまったく同じになっているはずです（原理的には）。
実験の場で北山君に FRCT の画像再構成法を説明した時には失念していましたが、SIXM 用に書いたプログラ
ムでは「VLR（view-left-right）ファイル」によって normal view と reverse view の処理に使う投影画像を指定できます。SIXM の投影画像上の左右の余白の幅を L と R とすると、プログラム ri2tg_W などを用いた通常の half rotation CT（HRCT）の画像再構成処理では VLR ファイルのデータとして以下の２行を指定すると便利です（どのような投影数の HRCT でもこの指定で OK なので）。
$L

R# すべてのサンプル回転角の投影画像に対する余白の指定# 最後の（サンプル回転角が 180 度の）投影画像は処理に使わない

しかしながら、今回の画像再構成では VLR ファイルの各行の最初の値（処理に使う投影画像の番号のリスト）
として簡略化記号 "-" や "$" ではなく、normal view と reverse view の投影番号の具体的な値域を指定する

11 / 206
必要があります：測定 170516g のnormal view の画像再構成処理
0-749

L

R

# 番号０～749 の投影画像の余白を指定

reverse view750-1499

LR# 番号 750～1499 の投影画像の余白を指定

なお、プログラム ri2rc などによるサンプル回転軸の位置の推定の処理ではサンプル回転角が０と 180 度（normal view）もしくは 180 と 360 度（reverse view）の投影番号のリストを VLR ファイルで指定する必要があります：
測定 170516g のnormal view のサンプル回転軸の推定処理
0-750

L

R

# 投影番号のリストは "0,750" でも良いハズ

reverse view750-1500

LR# "750,1500"

参考
通常の HRCT のサンプル回転軸の推定処理の場合の指定-

L

R# "-" は "0-$" もしくは "0,$" でも良いハズ

このような VLR ファイルの指定により SIXM の normal view と reverse view のそれぞれの CT 画像を再構成できます。ただし、それらから FRCT 画像を合成するためには以下の二つのことに留意する必要があります。
[1] reverse view と normal view のスライス画像は 180 度回転した向きになるので、それぞれの画像再構成の際にサンプル回転角の初期値 RA0 として 180 度だけ異なる値を指定する必要がある。
[2] SA による FRCT 画像の合成の際の計算誤差を抑えるため、normal view と reverse view の CT 画像に整数画素値に変換した estrimated LAC or RID（CT 値）を書き込む "r[i,r]2tg_[B,W]" ではなく、それを浮動少数点数画素値として格納する画像再構成プログラム "r[i,r]2tg_[F,D]" を実行した方が良い。
後述する測定 170516g の実行例では上記の[1]の RA0 として０（normal view）および 180（度；reverse view）
を指定しました。ただし、同じサンプル AV-3 を撮影した測定 170513a の HRCT 画像との比較には RA0 = 180（normal view）と０（reverse view）を指定した方が良かったようです。なお、170516g の画像再構成のテストでは normal と reverse view の両方で RA0 = ０としたので、それらの CT 画像は 180 度回転した向きになっています。また、上記の[2]に従わず従来通りの整数画素値の CT 画像を再構成してもかまいませんが、
normal view と reverse view の画像から FRCT 画像を合成する際に使う（Offset CT 用に書いた）プログラム
add_float はスライスごとに警告を発するのでウルサイです。

12 / 206
こ ち ら で 行 っ た 測 定 170516g の FRCT 画 像 の 再 構 成 な ど の 具 体 的 な 処 理 内 容 を 記 録 し た フ ァ イ ル
170516g_memo.txt をこの E-mail に添付しました。その１行目に記した「SIXM の画像再構成の手順書」に従って処理を行いました。２個の "#" で始まる行の(4)～(21)は「手順書」の処理番号で、本当はすべきだったかもしれない以下の処理の実行を省略しました。
(0)～(2)
SIXM 用のプログラムのインストールとそれらの実行環境の整備。なお、これらに加えて、前述のOffset CT 用のプログラム add_float も実行できるようになっている必要があります。
(3)
測定 170516g のディレクトリには SIXM の測定データファイル a.log と a.HIS がなければダメです（それらのシンボリックリンクでも OK）。
(8)と(10)normal および reverse view の RI 画像は観察しませんでした。また、サンプル像の領域の調査は(9)の投影画像で済ませたので RR 画像の sinogram も観察しませんでした。なお、画像再構成のテストに用いた sinogram の画像がディレクトリ "test_[a,p]_[n_r]/" の下にあります。
(11)
SP（sum of projection）の画像は作成・観察すべきでした。
(16)と(17)word 画像とその画素値ヒストグラムは作成しましたが、browse 画像は作成しませんでした。
normal view と reverse view の画像（吸収および位相画像）を再構成するので、手順(12)、(13)、(14)では通常の SIXM の処理を二回づつ行っています。
(12) サンプルの回転中心の位置（センター値）の推定(13) センター値を変えた画像再構成のテスト(14) 本番の画像再構成
その後、手順(14+)として、プログラム add_float を使って normal および reverse view の CT 画像の SA による FRCT 画像の合成処理を行っています。ただし、add_float はスライス画像しか処理できないので、C-shell
で繰り返し処理を行いました。また、それぞれ２（吸収と位相）×３（normal と reverse view の CT 画像お
よび FRCT 画像）= ６個づつの word と byte 画像の作成の手順(15')と(19)についても C-shell の繰り返し処理で行いました。
(15') word 画像とその画素値ヒストグラムの作成
word 画像の作成処理では従来 SIXM の場合と異なるプログラム raw2tiff を使っているので、手順番号にダッシュ "'" を付けました。
(19) byte 画像とその画素値ヒストグラムの作成
byte 画像の画素値１階調ごとの CT 値の増分としては X 線エネルギー８keV での calcite の LAC や13 / 206
RID の理論値の 1/100 の値を与えました。
手順(21)では６個の byte 画像それぞれの画素値の重心の位置を平均した点を通る直交した３断面を載せた
browse 画像を作成しました。この E-mail に添付した 170516g_byte.pdf です。また、それとの対比のため、同じサンプル AV-3 を撮影した今回の SIXM 実験の最初の測定と、それとは別の AV 貝サンプル AV-2 を撮影した昨年９月の SIXM 実験の２測定の browse 画像 170513a_byte.pdf および 160916bc_byte.pdf もこの Email に添付しました。なお、測定 170513a 用のディレクトリでこの E-mail に添付した C-shell script"170513a_byte_ps.csh" を実行すれば 160513a_byte.pdf の PostScript 出力を得ることができます。
前記の手順(0)～(2)が実行済みなら、テキストファイル 170516g_memo.txt を C-shell script として実行できます。測定データファイル a.log と a.HIS が置いてあるディレクトリで以下の入力を行えば OK です。
csh

何とかかんとか/170516g_memo.txt

計算機 vrm のディレクトリ/media/disk/bl47xu/1705_SIXM/170616g/でそれを行いました。そこにあるファイルを御自由にお使い下さい。とりあえず以上です。
P.S.
まつのさま、
ファイル 170513a/a.log の送付、ありがとうございました。
On Thu, 18 May 2017 12:34:59 +0900 MATSUNO Junya wrote:> >測定 170513a のファイル a.log> 添付いたします。
> >ぼくのディレクトリ/media/disk/tsukasa/1705/ の下に移動するつもりですが、問題ないですよね？
> 問題ございません。
添付ファイル 170516g_memo.txt
間違いがありました。2017/5/19 18:19:16 の E-mail の添付ファイル memo.txt を御覧下さい。
添付ファイル 170516g_byte.pdf
間違いがありました。2017/5/19 18:19:16 の E-mail の添付ファイル byte.pdf を御覧下さい。
添付ファイル 170513a_byte.pdf
間違いがありました。2017/5/19 19:27:02 の E-mail の添付ファイル byte.pdf を御覧下さい。

14 / 206
添付ファイル 160916bc_byte.pdf

添付ファイル 170513a_byte_ps.csh.txt#
set xyz=(`( si_ofwd byte_a - 1 1 1 | tail -1 ; si_ofwd byte_p - 1 1 1 | tail -1 ) | \awk '{ x+=$1; y+=$2; z+=$3 } END { print int(x/NR+0.5),int(y/NR+0.5),int(z/NR+0.5) }'`)( draw_a.csh byte_a $xyz 100/108.1 ; draw_p.csh byte_p $xyz 100/108.1 ) | \gspile -n 1 2 -o 0 12 -m 0.75 0.75

15 / 206
Date:

Fri, 19 May 2017 18:19:16 +0900

From:

Tsukasa NAKANO

To:

北山, MATSUNO Junya

Cc:

三宅, 杉本, Masayuki Uesugi, 松本, 伊神,Akira TSUCHIYAMA, Kentaro UESUGI, Akihisa TAKEUCHI

Subject: Re: SIXM_170516g_FRCT
みなさま、なかのです。お昼に差し上げた E-mail で紹介した測定 170516g の画像再構成処理についてですが、投影画像の右の余白の値が間違っていました（ImageJ で調べた bounding box の横幅の値を x 座標値の最大値だと思い込んでいました）。その値を正して手順(12)以降の処理をやり直しました。その記録のファイル memo.txt と、作成した byte 画像の browse 画像のファイル byte.pdf をこの E-mail に添付しました。サンプル回転軸の位置は以前と同じでしたが、CT 画像の画素値の値域や browse 画像に示した３断面の位置が少しだけ変わっています。なお、
計算機 vrm のディレクトリ/media/disk/bl47xu/1705_SIXM/170516g/で処理をやり直しました。
とり急ぎ、
添付ファイル memo.txt（2017/5/19 12:13:18 の E-mail の添付ファイル 170516g_memo.txt の修正版）## http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_recipe.pdf## (4) checking "a.log"
head -1 a.log#

501,1501,100,1,0## (5) checking "a.HIS"
du -b a.HIS#

58964721664

a.HIS

expr 501 \* 1501 + 100#

752101check_his a.HIS | uniq -c#

58964721197#

752101 128

306

2

expr 58964721664 - 58964721197#

467## (6) SIXM parameters##

Dr = 100 nm = 100e-7 cm##

SDD = 6220 mm = 6220e-3 m

16 / 206##

Dp = - 6.5 * 16 = - 104.0 um (minus sign means non-inverted image)##

Dz = 108.1 nm## (7) making raw images
mkdir ri rr
his2raw_F a.HIS 501 - 100 ri/%04d.tif rr/%04d.tif >raw.log## (9) checking left and right margins of RR images by ImageJ##

width of left margin = 50##

width of right margin = 500 - 375 - 50 = 75## (12) checking rotation centers for normal and reverse view
echo 0-750 50 75 | ri2rc ri - - 90 305 0.25 0.25
#

187

312

237.5

#

-54

54

-6

echo 0-750 50 75 | rr2rc rr - - 90 305 0.25 0.25
#

187

312

237.5

#

-54

54

-2

echo 750-1500 50 75 | ri2rc ri - - 90 305 0.25 0.25
#

187

312

237.5

#

-54

54

-2

echo 750-1500 50 75 | rr2rc rr - - 90 305 0.25 0.25
#

187

312

238

#

-54

54

-4

##

rotation center for all dataset = 237.5 ?

## (13) making test images of normal and reverse view##layer = ( 90 + 305 ) / 2 ~ 197##

Or1 = 237.5 - 0.5 * 12 = 231.5##

Or2 = 237.5 + 0.5 * 12 = 243.5
mkdir test_a_necho 0-749 50 75 | test_a.csh ri - - 197 100e-7 231.5 243.5 test_a_n >test_a_n.log
mkdir test_p_necho 0-749 50 75 | test_p.csh rr - - 197 6220e-3 -104.0 231.5 243.5 test_p_n >test_p_n.log

17 / 206
mkdir test_a_r
echo 750-1499 50 75 | test_a.csh ri - - 197 100e-7 231.5 243.5 test_a_r >test_a_r.log
mkdir test_p_r
echo 750-1499 50 75 | test_p.csh rr - - 197 6220e-3 -104.0 231.5 243.5 test_p_r >test_p_r.log
pile_v.csh test_a_n 1 1 25 5 5 test_a_n.tif >/dev/null
pile_v.csh test_p_n 1 1 25 5 5 test_p_n.tif >/dev/null
pile_v.csh test_a_r 1 1 25 5 5 test_a_r.tif >/dev/null
pile_v.csh test_p_r 1 1 25 5 5 test_p_r.tif >/dev/null##rotation center for all dataset = 237.5## (14) making tomograms of normal and reverse view
setenv THREADS 8
mkdir tg_a_necho 0-749 50 75 | ri2tg_F ri - - 100e-7 237.5 0 tg_a_n/%03d.tif >tg_a_n.log
mkdir tg_p_necho 0-749 50 75 | rr2tg_F rr - - 6220e-3 -104.0 237.5 0 tg_p_n/%03d.tif >tg_p_n.log
mkdir tg_a_r
echo 750-1499 50 75 | ri2tg_F ri - - 100e-7 237.5 180 tg_a_r/%03d.tif >tg_a_r.log
mkdir tg_p_r
echo 750-1499 50 75 | rr2tg_F rr - - 6220e-3 -104.0 237.5 180 tg_p_r/%03d.tif >tg_p_r.log## (14+) making full rotation tomograms
foreach ext (a p)set tg=tg_$ext
mkdir $tg
cp /dev/null ${tg}.log
foreach layer (`seq -w 0 305`)
set tiff=${layer}.tif( echo $layer | tr \\n \\t ; add_float ${tg}_n/$tiff 0 0 ${tg}_r/$tiff 0 0 0 ${tg}/$tiff ) >>${tg}.log
endend18 / 206## (15') making word images and their histograms
foreach ext (a_n a_r a p_n p_r p)
set word=word_$ext
mkdir $word
raw2tiff tg_$ext - 16 $word >/dev/null
tg2tg $word - | tr \\t , >${word}.csv
end#-382.467743

1000.924438#-323.117310

1188.111206#-251.390350

889.307251#-48.888340

35.159321#-32.107487

46.653809#-27.244926

35.519142## (19) making byte images and their histograms##

LAC of calcite (2.7 g/cc, CaCO3) at 8 keV = 203.149744 cm^-1foreach ext (a_n a_r a)
set byte=byte_$ext
mkdir $byte
tg2tg word_$ext - 0 203.149744e-2 8 $byte | tr \\t , >${byte}.csv
end##

RID of calcite (2.7 g/cc, CaCO3) at 8 keV = 8.849336e-06
foreach ext (p_n p_r p)
set byte=byte_$ext
mkdir $byte
tg2tg word_$ext - 0 8.849336e-2 8 $byte | tr \\t , >${byte}.csv
end## (21) making browse images
foreach byte (byte_a_n byte_a_r byte_a byte_p_n byte_p_r byte_p)
si_ofwd $byte - 1 1 1 | tail -1 | cut -f1-3
end#

275.136

267.33186.156#276.504

270.162

188.263#277.682

270.218

188.4#

282.111271.923184.172#

283.044268.845189.27#284.08272.802189.66619 / 206##

x = (275.136+276.504+277.682+282.111+283.044+284.08 )/6 ~ 280##

y = (267.33 +270.162+270.218+271.923+268.845+272.802)/6 ~ 270##

z = (186.156+188.263+188.4 +184.172+189.27 +189.666)/6 ~ 188( draw_a.csh byte_a_n 280 270 188 100/108.1 ; \draw_a.csh byte_a_r 280 270 188 100/108.1 ; \draw_a.csh byte_a280 270 188 100/108.1 ; \draw_p.csh byte_p_n 280 270 188 100/108.1 ; \draw_p.csh byte_p_r 280 270 188 100/108.1 ; \draw_p.csh byte_p

280 270 188 100/108.1 ) | \gspile -l -n -3 2 -o 9 9 -m 0.4375 0.4375 >byte.ps

添付ファイル byte.pdf（2017/5/19 12:13:18 の E-mail の添付ファイル 170516g_byte.pdf の修正版）

20 / 206
Date:

Fri, 19 May 2017 19:27:02 +0900

From:

Tsukasa NAKANOTo:"TAKEUCHI, Akihisa"

Cc:

Kentaro UESUGI, MATSUNO Junya, Akira TSUCHIYAMA, Masayuki Uesugi,
三宅,北山, 杉本, 松本, 伊神Subject: Re: his2r012
たけうちさま、みなさま、なかのです。先程の E-mail に書いたものと同じ間違いを AV 貝のサンプル AV-3 を HRCT 撮影した測定
170513a の画像再構成でもしていました。
On Fri, 19 May 2017 18:19:16 +0900 Tsukasa NAKANO wrote:> お昼に差し上げた E-mail で紹介した測定 170516g の画像再構成> 処理についてですが、投影画像の右の余白の値が間違っていました（ImageJ で> 調べた bounding box の横幅の値が x 座標値の最大値だと思い込んでいました）。
5/16 の E-mail に添付したプログラム his2r012 による処理テストの記録のファイル 170513a_memo.txt の修
正版の memo.txt をこの E-mail に添付します。SPring-8 の BL47XU の計算機 test01 のディレクトリ
/media/SSD/170513a/の下ににある memo.txt と差し替えて下さい。また、それを使って test01 の上で170513a の画像再構成を再度実行してみて下さい（プログラム his2r012 の処理結果には違いはありませんが）。
すべての処理に 20 分かからないと思います。
なお、今日のお昼の E-mail に添付した測定 170513a の byte 画像の browse 画像も作り直しました。そのファイル byte.pdf をこの E-mail に添付します。
とり急ぎ、
On Tue, 16 May 2017 23:42:28 +0900 "TAKEUCHI, Akihisa" wrote:> 中野様>> 竹内です。
> 早速対応していただいてありがとうございました。
>> ビーム幅の分散をプロットすることについては、SIXM とは違ったタルボ干渉計などの微分位相法でも> 小角散乱コントラストと言われて最近ちょっともてはやされています。
> ちなみにタルボの場合は試料を X 線が通ったことによって干渉性が劣化する度合いを> コントラストにしてます。

21 / 206>
> 先日ちょっと話したように、> 見かけ上密度が低く見えるようなところ、空間分解能以下の領域で結晶ではなく粒状、> 細孔などの構造に反映したコントラストが得られる可能性があります。
> 土'山さんが以前、何らかの試料で（何だったかは忘れました）、分解能以下の構造が> どうこうという話をしておられたので、もしかしたらと思い提案してみました。
> なにぶん、まだ僕の方が勉強不足なので、折を見て、僕の方でももう少し考えてみます。
添付ファイル memo.txt（2017/5/16 20:01:17 の E-mail の添付ファイル 170513a_memo.txt の修正版）## http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_recipe.pdf## ---- checking observed data
head -1 a.log#

451,751,100,1,0
du -b a.HIS#

25954870272

a.HIS

expr 451 \* 751 + 100#

338801check_his a.HIS | uniq -c#

25954869809#

338801

128

299

2

expr 25954870272 - 25954869809#

463## ---- making raw images
his2r012_F#

usage : his2r012 HIS scans views_RL darks {A B C} R0_format R1_format R2_format
mkdir r0 r1 r2
his2r012_F a.HIS 451 - 100 r0/%03d.tif r1/%03d.tif r2/%03d.tif >raw.log## ---- checking left and right margin of RR (raw refraction) images by ImageJ##

width of left margin = 45##

width of right margin = 450 - 290 - 45 = 115

22 / 206## ---- checking rotation center for RI (raw intensity) and RR images
echo - 45 115 | ri2rc r0 - - 0.5 0.25
#

112

337

193

#

-74

74

2

echo - 45 115 | rr2rc r1 - - 0.5 0.25
#

112

337

193.5

#

-74

74

-3

##

rotation center = 193.5## ---- making CT images
setenv THREADS 8## ---- making absorption image##

Dr = 100 nm = 100e-7 cm##

LAC of calcite (2.7 g/cc, CaCO3) at 8 keV = 203.149744 cm^-1
mkdir tg_a( echo - 45 115 ; echo \$ ) | ri2tg_W r0 - - 100e-7 193.5 0 tg_a/%03d.tif >tg_a.log
mkdir byte_atg2tg tg_a - 0 203.149744e-2 8 byte_a | tr \\t , >byte_a.csv## ---- making phase image##

SDD = 6220 mm = 6220e-3 m##

Dp = - 6.5 * 16 = - 104.0 um (minus sign means non-inverted image)##

RID of calcite (2.7 g/cc, CaCO3) at 8 keV = 8.849336e-06
mkdir tg_p
( echo - 45 115 ; echo \$ ) | rr2tg_W r1 - - 6220e-3 -104.0 193.5 0 tg_p/%03d.tif >tg_p.log
mkdir byte_ptg2tg tg_p - 0 8.849336e-2 8 byte_p | tr \\t , >byte_p.csv## ---- making "variance" image
mkdir tg_v_a( echo - 45 115 ; echo \$ ) | ri2tg_F r2 - - 100e-7 193.5 0 tg_v_a/%03d.tif >tg_v_a.log
mkdir tg_v_p( echo - 45 115 ; echo \$ ) | rr2tg_F r2 - - 6220e-3 -104.0 193.5 0 tg_v_p/%03d.tif >tg_v_p.log

23 / 206
添付ファイル byte.pdf（2017/5/19 12:13:18 の E-mail の添付ファイル 170513a_byte.pdf の修正版）

Date:

Fri, 19 May 2017 20:24:57 +0900

From:

Tsukasa NAKANOTo:

MATSUNO JunyaCc:

北山晃, MIYAKE, Miyama Sugimoto, Masayuki Uesugi, megumi matsumoto, Yohei IGAMI,
Akira TSUCHIYAMA, Kentaro UESUGI, Akihisa TAKEUCHI

Subject: Re: SIXM_170516g_FRCT
まつのさま、
なかのです。以前から言っていることですが、FRCT には FZP によって発生するフリンジのような左右非対称の偽像が打ち消しあうこと以外に大きな利点はないと考えています。つまり、Gaussian 分布のノイズによる
S/N は２度の重複撮影による画像の「スタッキング」で√2 倍になるだけなので、SIXM で FRCT しても劇的に画質は向上しないハズ。とり急ぎ、

24 / 206
On Fri, 19 May 2017 20:07:38 +0900 MATSUNO Junya wrote:> 中野さま> 松野です、早速のご対応、いつも本当にありがとうございます。
> 画像を見させていただいたのですが、FR が劇的に綺麗な画像になっている訳ではなさそうですね。
>> ところで phase の xz 平面で白金保護膜(試料の頭にある、吸収係数が大きいもの)を見ると、左右に> 伸びるアーチファクト（いわゆる、メタルアーチファクト？）の出方がそれぞれ違っていますね。
> byte_p_n では上下にずれていて右へ 2 本出ているのに対し、byte_p_r では左右一直線。
> byte_p は byte_p_n と byte_p_r の平均のような感じに見えます。
>> 回転角が 0~180 度では幾分が縦ずれしたけど 180~360 度ではずれなかったからか、と思ったのですが、> 添付していただいた memo.txt のそれぞれの縦ずれは、-2, -4 と、むしろ 0~180 度の方が少ないです。
>

echo 0-750 50 75 | rr2rc rr - - 90 305 0.25 0.25

>#

187

312

237.5

>#

-54

54

-2

>

echo 750-1500 50 75 | rr2rc rr - - 90 305 0.25 0.25

>#

187

312

238

>#

-54

54

-4

>
> きっと FZP-CT の時のように回転角とずれ量をおったグラフを作ればもうちょっとわかりそうな気も> するのですが、サンプルが上下に振動していたんでしょうかね。
> そしてそういう影響もあって、FR の恩恵がいまいち(私は)見えなかったのでしょうか。
Date:Fri, 19 May 2017 20:33:38 +0900

From:

Tsukasa NAKANO

To:

竹内

Cc:

MATSUNO Junya, Miyake, 土`山 明, Sugimoto Miyama, Masayuki Uesugi,
北山, megumi matsumoto, 伊神, Kentaro UESUGISubject: Re: 170516c のリングアーティファクトについて
たけうちさま、なかのです。先日来の E-mail で議論されている SIXM の測定 170516c の「投影画像」の縦縞（CT 画像に発生しているリングアーチファクトの原因となったサンプルの回転角によらない sinogram の異常値）についてですが、現在の結論は放射光の揺らぎによる、ですかね？ もしそうなら、これはSIXM の回転ステップごとのスキャンに要する時間、Tsと放射光の揺らぎの周期、Trが「同期」しているということになります。それが偶然成り立っているのか？

25 / 206
とり急ぎ、
On Fri, 19 May 2017 09:54:32 +0900 "TAKEUCHI, Akihisa" wrote:> 皆様>> 以前三宅さんから頂いた、両パターンがみられる添付の画像データですが、> 現状を知らせるのと今後の対策を考えてもらうのに> ２３SU、２５SU 担当者側、加速器、挿入光源グループにお見せしても大丈夫でしょうか。
Date:Sat, 20 May 2017 16:35:32 +0900

From:

Tsukasa NAKANO

To:

三宅, TAKEUCHI Akihisa, 上杉

Cc:

MATSUNO Junya, 土`山 明, Sugimoto Miyama, Masayuki Uesugi, 北山,
megumi matsumoto, 伊神

Subject: Re: 170516c のリングアーティファクトについてみなさま、なかのです。
HIS ファイルに埋め込まれている測定した RP 画像のフレームそれぞれの撮影時刻（time stamp）
を抜き出すプログラム check_his_ts を書きました。そのソースコード check_his_ts.c をこの E-mail に添付します。Linux なら、
gcc

check_his_ts.c-ocheck_his_tsと入力するだけでコンパイルできます。その後、HIS ファイルを引数としてcheck_his_ts

170516c/a.HISのようにして起動すると標準出力に以下の５個の値を並べた行を書き出します。
[1] 測定画像のフレームの番号（０～）[2] そのフレームの撮影時刻（単位は msec.）[3-4] 測定画像の横・縦の画素数（先の実験のものの横画素数はすべて 128）[5] その画像のタイプ（先の実験のものはすべて２）
このようにして抽出した撮影時刻の差をとれば測定間隔（周期）を計算できます。HIS ファイルの最初の 100
枚の暗電流画像のものを除く測定間隔を調べました。それらの値をざっと見ると、20 msec 程度の短い時間間
隔と秒のオーダーの長い時間間隔があったので、それらをしきい値 0.1 秒（この値に深い意味なし）で分離し、

26 / 206
それぞれの平均値と標準偏差を計算しました。この E-mail に添付した 1705_ti.txt がその結果です。ただし、その各行に並んでいる７個の値の意味は以下の通りです。
[1] 測定番号[2,3,4] 短い時間間隔の個数、平均値（単位は秒）と標準偏差（単位は秒）[5,6,7] 長い時間間隔の個数、平均値（単位は秒）と標準偏差（単位は秒）
どの測定でも短い時間間隔はおよそ 0.02 秒（20 msec.）です。HIS ファイルに書き込まれているコメントを見ると、これは撮影時の露光時間と一致しています。一方、長い時間間隔は個数が「投影数- 1」なので（例外アリ）、これらはそれぞれの投影画像の撮影後のサンプルの移動に要した時間だと思われます。
と言う訳で、SIXM の測定時間は２重周期を持っています。これら（特に、長い時間間隔）が放射光の揺らぎの周期と同期しているとは思えませんが、いかが？
とり急ぎ、On Sat, 20 May 2017 15:38:25 +0900 Kentaro Uesugi wrote:> ええと、シノグラム上でキッカー由来のノイズが縦にまっすぐに連なるには> 投影事にキッカーのタイミングと横スキャンのタイミングが一緒になる必要があります。
> ですので、50Hz とかいう値よりも、CR(continuous rotation)のスピードと> 角度ステップから横スキャン開始のタイミング（周波数）を求めれば判別できます。
>> うえすぎ＠今週末は東京（気乗りしない）>> ----- Original Message ---->>

失礼。漢字が違いました>>>>

10Hz だと、必ずしも同期しませんが、1Hz だと必ず真っ直ぐな線に同期するのではないでしょうか？

>>

50Hz でスキャンしているので、10Hz でも？

>>
>>

三宅

>>
>>

----- Original Message -----

>>

> 竹内様

>>

> はい。CR スキャンです。

>>> 10Hz だと、動悸同期しませんが、1Hz だと必ず同期するのではないでしょうか？

>>

> 三宅

>>

>

27 / 206>>

> ----- Original Message ----->>> > 三宅様

>>

>>

>>

> > スキャンスピードは 50Hz なんですが、>>> > スキャン軸一往復に要する時間が 0.1, 1, 10 秒の倍数で一定でないと>>> > シノグラム上で垂直にまっすぐな線には・・・

>>

>>

>>

> > と、ここまで書いて気がついたんですが、>>> > そういえば CR スキャンでしたね。思ったより同期し易い条件だったのかも

>>

>>

>>

> > > 2017/05/20 6:26、Miyake のメール:>>> > > 竹内様

中野様>>

> > > 50Hz と

0.1, 1, 10Hz は、必ず同期するのではないのですか？

>>> > > 違う？？

>>

> > > 三宅>>

> > > ----- Original Message ----->>> > >> 中野様>>> > >> そうなんですよね。結構同期しているのが多いですね。これは偶然なのか。

>>> > >> 斜めに走っているのもあるようなのですが。

添付ファイル check_his_tc.c
以下の SIXM 用の書庫ファイルに入れてあります。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm.zip
添付ファイル 1705_ti.txt
setN_shortMean_short

SD_short

N_long

Mean_long

SD_long170513a3379490.019997

0.000991

750

3.001365

0.027203

170513b60300

0.019995

0.001003

200

1.799599

0.016735

170513c5256990.019998

0.000997

750

6.001669

0.028232

170513d5256990.019996

0.001169

750

6.002700

0.024454

170514a3379490.019997

0.001015

750

3.0012000.029421

170514b4505990.019997

0.001195750

3.001845

0.030463

170514c3754990.019997

0.001045750

2.130708

0.079224

170514d

3383370.019996

0.001062

376

3.813092

0.137499

170514e5257000.019998

0.000991

750

6.001650

0.025411

170514f

5256990.019998

0.000917

750

6.001461

0.026250

28 / 206
170514g

2631990.019997

0.001055

375

4.463476

0.016348

170515a3131250.019993

0.001365500

3.867824

0.025294

170515b3131250.019996

0.001522

500

3.866342

0.027452

170515c2962920.019995

0.001352

600

2.642603

0.020890

170515d3757490.019997

0.001358500

5.002484

0.025573

170515e2252990.019998

0.000850

750

1.799027

0.015946

170515f

1952590.019998

0.000823750

2.800678

0.019314

170515g

2252980.019996

0.000973

751

2.569218

0.077035

170515h3004990.019996

0.001343

600

2.502314

0.021884

170516a3131250.019996

0.001481

500

3.866250

0.027476

170516b3131250.019996

0.001521

500

3.865956

0.026771

170516c

3305490.019996

0.001324

600

4.002176

0.030413

170516d2444000.019998

0.000986

375

4.143911

0.015520

170516e2755490.019997

0.001265500

4.001442

0.028170170516f

2403990.019997

0.001008

600

2.715461

0.026983

170516g

7504990.019998

0.000988

1500

3.334316

0.021579

170516h1503990.019996

0.001319

375

2.436570

0.017465

Date:Sun, 21 May 2017 08:40:00 +0900

From:

Tsukasa NAKANO

To:

上杉

Cc:

三宅, TAKEUCHI Akihisa, MATSUNO Junya, 土`山 明,
Sugimoto Miyama, Masayuki Uesugi, 北山, megumi matsumoto, 伊神

Subject: Re: 170516c のリングアーティファクトについて
うえすぎさま、なかのです。
> HiPic が書くタイムスタンプ（pc と言うべきかも）は信用してはいけません。
それでは何をもとに議論すべきだと言うのか？ 指定した Hz の値が常に正しい？ また、タイムスタンプの誤差についての具体的な検証例はありますか？ とり急ぎ、On Sat, 20 May 2017 17:47:36 +0900 上杉 wrote:> ここまでやっていただいてアレですが、> HiPic が書くタイムスタンプ（pc と言うべきかも）は信用してはいけません。
>> 上杉＠すまほー29 / 206
Date:Sun, 21 May 2017 09:08:21 +0900

From:

Tsukasa NAKANOTo:

MiyakeCc:

TAKEUCHI Akihisa,

上杉, MATSUNO Junya, 土`山 明,

Sugimoto Miyama, Masayuki Uesugi, 北山, megumi matsumoto, 伊神
Subject: Re: 170516c のリングアーティファクトについて
みやけさま、
なかのです。HIS ファイルのタイムスタンプの値が正しいとした場合の話ですが、測定誤差や計算誤差を考慮
して秒単位の値の小数点以下３桁目（１msec の桁）を四捨五入すると、ぼくが調べた撮影間隔のうちの短い方の値はどの測定でも 20 msec（50 Hz）です。同様にすると 170516c の測定時間の長い方の間隔は 4.00 秒
なので 50 Hz の周期と同期していますが、これはそれ以外の多数の測定でも成り立っています（この E-mailに添付した 1705_ti.txt にそれを抜き出しました）。特に、170516c の直後の 170516[d,e,f」もそうなっているので、原因が同じなら、それらの CT 画像にもリングアーチファクトが発生してもおかしくないですが、...。
とり急ぎ、
On Sat, 20 May 2017 17:32:34 +0900 Miyake wrote:> 中野様> ありがとうございます。
> サンプル戻りの long の時間が、ほぼ整数になっているのかとおもったら違うのですね。
> 16c とかは、整数ですけど。たまたまなんですかね。
>> 三宅
添付ファイル 1705_ti.txt
setN_shortMean_short

SD_short

N_long

Mean_long

SD_long170513a3379490.019997

0.000991

750

3.001365

0.027203

170513b60300

0.019995

0.001003

200

1.799599

0.016735

170513c5256990.019998

0.000997

750

6.001669

0.028232

170513d5256990.019996

0.001169

750

6.002700

0.024454

170514a3379490.019997

0.001015

750

3.0012000.029421

170514b4505990.019997

0.001195750

3.001845

0.030463

170514e5257000.019998

0.000991

750

6.001650

0.025411

170514f

5256990.019998

0.000917

750

6.001461

0.026250

170514g

2631990.019997

0.001055

375

4.463476

0.016348

170515c2962920.019995

0.001352

600

2.642603

0.020890

170515d3757490.019997

0.001358500

5.002484

0.025573

30 / 206
170515e2252990.019998

0.000850

750

1.799027

0.015946

170515f

1952590.019998

0.000823750

2.800678

0.019314

170515h3004990.019996

0.001343

600

2.502314

0.021884

170516c

3305490.019996

0.001324

600

4.002176

0.030413

170516d2444000.019998

0.000986

375

4.143911

0.015520

170516e2755490.019997

0.001265500

4.001442

0.028170170516f

2403990.019997

0.001008

600

2.715461

0.026983

170516h1503990.019996

0.001319

375

2.436570

0.017465

Date:Sun, 21 May 2017 10:14:35 +0900

From:

Tsukasa NAKANO

To:

Kentaro UESUGI

Cc:

三宅, 竹内, 松野, 土'山, 杉本, 上椙, 北山, 松本, 伊神Subject: Re: 170516c のリングアーティファクトについて
うえすぎさま、なかのです。
> PC にかかっている負荷などの> 影響のため、his のタイムスタンプは 10msec くらいはズレていることがあるようです。
ぼくが計算したのは多数の時間間隔の平均値です。10 msec. 程度の誤差がある測定値でも、短い方の時間間隔は最小でも 60300 個（測定 170513b の場合）の値を足し合わせた値なので、その平均値は 1 msec. 程度の精度で決まっているハズです（170513b の標準偏差は 1 msec. 程度です）。長い時間間隔の個数は短い方よりもずっと少ないですが、それでも ...。とり急ぎ、On Sun, 21 May 2017 09:59:59 +0900 Kentaro UESUGI wrote:> > それでは何をもとに議論すべきだと言うのか？ 指定した Hz の値が常に正しい？
> > また、タイムスタンプの誤差についての具体的な検証例はありますか？とり急ぎ、>> his ファイルのタイムスタンプよりは PM16C に入力した回転速度(=カメラへの外部トリガ間隔)の> 方が精度は格段に高いです。ほぼ間違いなく msec オーダーではズレは生じません。
> (昔の PM16C は 30usec くらいのズレが生じることがあったけど、これは解消済み)> his に記録されている時間とカメラに入れているパルスジェネレーターからの> 外部トリガ信号の時間を比べてみたことはありますが、PC にかかっている負荷などの> 影響のため、his のタイムスタンプは 10msec くらいはズレていることがあるようです。
> 前後にもばらつくので細かな検証には向きません。
>> と言う事で、

31 / 206
> > > >> ですので、50Hz とかいう値よりも、CR(continuous rotation)のスピードと> > > >> 角度ステップから横スキャン開始のタイミング（周波数）を求めれば判別できます。
> と書いたように、ソフト(HiPic)よりもハード(PM16C+カメラ)の方が> msec 以下での動作は保証されていますから、測定時にどう設定したかで> 時間的な関係は分かります。
>> ちなみに外部トリガから撮影開始の遅延時間は 165.58usec だそうです。
>> うえすぎDate:Tue, 23 May 2017 19:47:34 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya, 北山

Cc:

三宅 亮, Kentaro UESUGI, Akihisa TAKEUCHI, Akira TSUCHIYAMA, Masayuki Uesugi,megumi matsumoto, Sugimoto Miyama, 伊神Subject: リングアーチファクト
まつのさま、
きたやまさま、
みなさま、
GSJ/AIST のなかのです。先日の SIXM 実験で測定した X 線強度の時系列データを調べていて気づいたのですが、以下の測定の CT 画像に測定 170516c のものと同様なリングアーチファクトが発生していませんか？
測定

サンプル

170516c のものを A とする「危険度ランク」

170513d

IV-gp-3

D（目立たない？）

170514eIV-mgtD（目立たない？）

170515c

RA-QD02-0097

C

170515f

waterB170515h

好塩古細菌

B170516c

橋口サンプルA

170516eKCl 20wt% aq.

A

こちらには CT 画像がないので、すみませんが調べてみて下さい。とり急ぎ、

32 / 206
Date:

Wed, 24 May 2017 11:01:57 +0900

From:

Tsukasa NAKANOTo:"TAKEUCHI, Akihisa", Kentaro UESUGICc:

Miyake, MATSUNO Junya, 土`山 明, Sugimoto Miyama, Masayuki Uesugi,
北山晃, megumi matsumoto, 伊神,Subject: SIXM 実験の測定時刻
たけうちさま、
うえすぎさま、
GSJ/AIST のなかのです。HIS ファイルに埋め込まれているタイムスタンプなどから算出した「5/13～17 のSIXM 実験の測定それぞれの測定時刻の値など」を書き込んだ CSV ファイル 1705_time.csv をこの E-mail に添付します。１行目に記した記号と、それらが指す２行目以降の５個の値の意味は以下の通りです。
set
SIXM の測定番号
start
HIS ファイル上の最初の画像の撮影時刻（JST）
、T0
first
HIS ファイル上の先頭から 101 枚目の最初のスキャンの「ゴミ画像」の測定時刻、t1。ただし、t1 は
T0 を時刻０とする秒単位の値。
last
T0 を時刻０とする HIS ファイル上の最後の画像の秒単位の測定時刻、t2
end
HIS ファイル上の最後の画像の測定時刻（JST)、T3 = T0 + t2
上杉君は「HIS ファイルに埋め込まれているタイムスタンプの値は信頼できない」と言っていますが、ミリ秒の精度はともかく、秒単位の精度は問題ないようです。いくつかの測定の（紙の）ログノートの記録でそのことを確認しました。
という訳で、1705_time.csv に示した各測定の時間範囲に「キッカーパターン」のような放射光の揺らぎが生じていないかを調べていただけるとうれしいです。
CT 画像にリングアーチファクトが発生していた測定 170516c の時間範囲
start = 2017/05/16 16:20:41.327
first = 103.374
last = 9114.434
end = 2017/05/16 18:52:35.761

33 / 2062017/5/16 の 16:20:41.327（JST）頃に測定を開始した 170615c では、その 103.374 秒後にサンプル回
転角が０の最初のスキャンの RP 画像の撮影が行われた。総測定時間はおよそ 9114.434 秒で、2017/5/16の 18:52:35.761（JST）頃に 170615c の測定が終了した。
とり急ぎ、
On Mon, 22 May 2017 16:18:41 +0900 "TAKEUCHI, Akihisa" wrote:> 竹内です。
>> キッカーの問題について、光源光学部門の青柳さんという人から添付のデータをいただきました。
> XBPM という光源近くで X 線のビーム軌道をモニタしている装置で、> 水平、垂直のビーム位置が保存されています。
> 添付のデータは５月１５日のものです。
>> ２つのパタンは BL23 と 25２つの BL 由来のものという説明をしましたが、> １Hz 駆動だった BL23 は水平方向（赤線）、0.1Hz 駆動の BL25 は鉛直方向（青線）に> 影響してようで、変位量 5um 程度です。
> サンプリングが６秒間隔らしいので、エイリアシング起こしてますが、> 実際にキッカー駆動によってビーム変動が出ているのがわかります。
添付ファイル 1706_time.csv（コンマ区切りをタブコード区切りに変えました）。
set

start

first

last

end

170513a2017/05/13 18:33:01.274

103.475

9112.416

2017/05/13 21:04:53.690

170513b2017/05/13 21:18:51.894

20.154

1585.790

2017/05/13 21:45:17.684

170513c

2017/05/13 22:39:35.273

169.97015184.093

2017/05/14 02:52:39.366

170513d2017/05/14 03:53:59.942

169.97415184.012

2017/05/14 08:07:03.954

170514a2017/05/14 08:46:49.549

103.424

9112.445

2017/05/14 11:18:41.994

170514b

2017/05/14 11:55:43.409

128.36411390.403

2017/05/14 15:05:33.812

170514c

2017/05/14 15:39:48.884

103.4219210.297

2017/05/14 18:13:19.181

170514d2017/05/14 19:01:01.822

95.5478294.493

2017/05/14 21:19:16.315

170514e

2017/05/14 22:03:24.573

169.97015184.091

2017/05/15 02:16:28.664

170514f

2017/05/15 02:43:04.667

169.97115184.051

2017/05/15 06:56:08.718

170514g

2017/05/15 08:02:17.099

80.3437017.378

2017/05/15 09:59:14.477

170515a2017/05/15 12:26:07.550

93.3648287.704

2017/05/15 14:44:15.254

170515b2017/05/15 15:45:02.483

93.3528287.780

2017/05/15 18:03:10.263

170515c

2017/05/15 18:50:58.742

85.9267595.844

2017/05/15 20:57:34.586

170515d2017/05/15 21:36:40.643

114.492

10129.596

2017/05/16 00:25:30.239

34 / 206
170515e

2017/05/16 00:58:40.374

65.9285920.665

2017/05/16 02:37:21.039

170515f

2017/05/16 03:33:31.623

70.0916075.343

2017/05/16 05:14:46.966

170515g

2017/05/16 05:34:54.592

74.8396509.453

2017/05/16 07:23:24.045

170515h2017/05/16 08:14:14.089

86.7577596.780

2017/05/16 10:20:50.869

170516a2017/05/16 11:05:21.785

93.3638287.765

2017/05/16 13:23:29.550

170516b2017/05/16 13:39:46.111

93.3658287.736

2017/05/16 15:57:53.847

170516c

2017/05/16 16:20:41.327

103.3749114.434

2017/05/16 18:52:35.761

170516d2017/05/16 19:29:14.352

76.0846517.648

2017/05/16 21:17:52.000

170516e

2017/05/16 21:39:15.494

86.7597597.730

2017/05/16 23:45:53.224

170516f

2017/05/17 00:55:53.314

74.2186510.859

2017/05/17 02:44:24.173

170516g

2017/05/17 03:03:43.855

114.498

20124.551

2017/05/17 08:39:08.406

170516h2017/05/17 08:54:25.950

46.3213967.420

2017/05/17 10:00:33.370

Date:Wed, 24 May 2017 11:30:52 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

北山, 三宅 亮, Kentaro UESUGI, Akihisa TAKEUCHI, Akira TSUCHIYAMA,
Masayuki Uesugi, megumi matsumoto, Sugimoto Miyama, 伊神Subject: Re: リングアーチファクト
まつのさま、
なかのです。CT 画像のチェック、ありがとうございました。送ってくれた CSV ファイルの「miyake」と「matsuno」が０でない測定の画像に偽像（もしくは sinogram の異常）が発生しているのですね？ 測定170513c と 170515d 以外はぼくが思った通りです。また、予想が外れた測定の X 線強度の時系列データを再確認すると、怪しい兆候がありました。とり急ぎ、On Wed, 24 May 2017 11:05:57 +0900 MATSUNO Junya wrote:> 中野さま> 松野です。
> シノグラムで調べました。(CT 像では、強調表示しないと見えないものもあったので)>> 添付しました csv ファイルで、miyake, matsuno の項が 1 のものが三宅 or 松野の> パタンが見られるもの、0 がないものです。
> その他、撮影開始&終了時刻、サンプル名やスキャン・CR の Hz 数、プロジェクション数を載せました。
> よろしくお願いいたします。

35 / 206
Date:Thu, 08 Jun 2017 13:04:01 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Miyake, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Masayuki Uesugi, 北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: SIXM の X 線強度の時系列解析
みなさま、
GSJ/AIST のなかのです。今頃になって何ですが、５月に差し上げた E-mails で匂わせていた「SIXM で測定した X 線強度の時系列解析」に関する話をします。
(1) SIXM で測定した X 線強度の時系列(2) RP 画像の測定時刻と平均 sinogram の抽出(3) X 線強度の時系列の power spectrum density（PSD）
今回の解析で得た結論を先に言うと
5/11～17 の SIXM 実験の「後半」に測定した X 線強度の時系列データには周波数が２および 4Hz の入射X 線強度の「揺らぎ」が含まれているです。ただし、ぼくが調べた「後半」の測定は 170515h と 170516[b,c,d,g] で、それらに含まれる「揺らぎ」
は SIXM 実験の最初の方の測定 170513[a,b] には見当たりません。測定 170516c で特に顕著な CT 画像のリ
ングアーチファクトの原因はこれらの「揺らぎ」であると思われます。そして、これらの「揺らぎ」の周波数をサンプリング周波数がおよそ 50 Hz だった今回の SIXM のスキャンのステップ数（== 投影値 sinogram の
画像の回転角それぞれの列における幅；単位は画素幅 == SIXM のスキャン幅）に換算すると
２Hz → ( 1 / 2 秒) / ( 1 / 50 秒 ) = 25
４Hz → ( 1 / 4 秒) / ( 1 / 50 秒 ) = 12.5となり、三宅さんや松野君が投影値 sinogram で見つけた「○○パターン」の縦縞の幅や周期とも調和的です（実は、これについてはきちんと調べていません）。
なお、以下で紹介する新しいプログラムのコードや Windows 用の実行ファイルなどは以前に紹介した SIXM用の書庫ファイルに入れてあります：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm.zip
ただし、コマンド make を用いた新しいプログラムのコンパイルはファイル Makefile.tm を指定して実行する必要があります：make-f

Makefile.tm

36 / 206
(1) SIXM で測定した X 線強度の時系列
SIXM による測定ではサンプル内での屈折によって生じた X 線強度の水平方向の空間分布（refraction profile）の画像（RP 画像）を撮影しています。そして、SIXM の測定データファイル a.HIS に記録されている個々のRP 画像は２次元の画像ですが、それらは全体として以下のような４次元の画像になっています。
RP 画像の位置 (p,z,s,v) の画素の値、RP (p,z,s,v) =回転と並進のステップがそれぞれ v と s の状態のサンプルの鉛直方向の位置 z を透過し屈折した X
線の水平方向の位置 p における強度
注
a.HIS には SIXM で測定した個々の２次元画像 RP(p,z) の暗電流補正用のデータも入っています。ここで取り扱う RP 画像のデータは暗電流補正済みものだとします。
さて、通常の SIXM の測定では上記の RP 画像から RI（raw X-ray intensity）と RR（raw X-ray refraction）の画像を作成し、それらから吸収と位相の CT 画像のそれぞれを再構成します。ここでは RI 画像の画素の値
を z 方向に平均した２次元画像 M(s,v) を考えます。
RI(z,s,v) = Σ_p=0～Np-1

RP(p,z,s,v) / Np

M(s,v) = Σ_z=0～Nz-1

RI(z,s,v) / Nz = Σ_p,zRP(p,z,s,v) / (Np × Nz)

ただし、Np と Nz は２次元画像 RP(p,z) の横と縦の画素数
座標値 z ごとの２次元画像 RI(s,v) は RI の sinogram ですから、画像 M(s,v) を「RI の平均 sinogram」と呼ぶことにします。M(s,v) は SIXM で測定した個々の２次元 RP 画像の画素値の総和に比例した値です。つまり、これは v と s で特定できるサンプル回転と並進のステップにおける SIXM で測定した X 線強度を表しています（後注参照）。そして、M(s,v) の値を a.HIS に記録されている個々の２次元 RP 画像の測定時刻の値
T(s,v) と組み合わせることにより、SIXM で測定した X 線強度の精密な時系列解析を行うことができます。
注
２次元 RP 画像を測定した検出器（画素）それぞれの感度特性が同じでないため、SIXM への入射 X
線強度に z 方向の空間分布がある場合やサンプルによる吸収がある場合には M(s,v) は SIXM で測定した（入射）X 線強度を表しません。しかしながら、s と v によらず同じ検出器を使っているので、
z 方向のすべての範囲（視野）で入射強度が一様に増減した場合には M(s,v) でそれを検知できます。
また、空気を撮影した z の範囲を視野とすれば、サンプルによる吸収の影響を回避できます。なお、
通常の X 線 CT の測定データから得ることができる M(s,v) に相当する値はサンプルの回転ステップ
ごとの透過 X 線強度画像の暗電流補正した画素値の平均値 m(v) です。ただし、m(v) のデータの数
は M(s,v) に比べて少なく、また、それらの測定の時間間隔（≒ 画像撮影の露光時間）も 10 倍程度長いので、m(v) を使って X 線強度の精密な時系列解析を行うのは困難です。

37 / 206
(2) RP 画像の測定時刻と平均 sinogram の抽出
SIXM のサンプル並進スキャンのステップが s で回転ステップが v の時のT(s,v)：測定の開始時刻を０とする秒単位の測定時刻
M(s,v)：暗電流補正済みの RP 画像の画素値の平均値の画像を SIXM の測定データファイル a.HIS から直接抽出するプログラム his2tm を書きました。その起動法は以下の通りです。
his2tm

HIS

scans

views

darks

{z1

z2}

{T.tif}

M.tif

HIS：ファイル a.HIS のパス名
scans、views および darks
SIXM の並進と回転のスキャンのステップの総数、および、暗電流画像の枚数。SIXM の測定のログファイル a.log の１行目にコンマ区切りで書き込まれている値を転記すれば良い。なお、SIXM の並進スキャンがサンプル左端に達した後に右端に移る際に RP 画像として「ゴミ」を撮影するので、作成する画像の横（s）方向の画素数は scans - 1 になる。
z1 と z2
サンプルなしの空気の部分の z 座標値の最小値と最大値。これらの値の指定を省略すると RP 画像の
z 方向の全域を視野とする。
T.tif と M.tif
T(s,v) と M(s,v) のそれぞれの値を 32 bit 長の浮動小数点数の画素値として書き込む TIFF 画像ファ
イルのパス名。T.tif の指定は省略可能で、その場合には測定時刻のファイルを作成しない。
単調増加している測定時刻の値がスキャンライン順に並んでいるだけなので、his2tm で作成した T.tif は目で見て楽しい画像ではありません。一方、M.tif を目視観察すればそれなりの情報を得ることができます。このE-mail に添付した 1705_mean.pdf に５月の SIXM 実験で得た以下の６測定の平均 sinogram などの画像を並べました。
170513aAV 貝、AV-3

170513bなし（空気を撮影）

170515h

好塩古細菌

170516b

ハヤブサ・サンプル RA-QD02-0103 の上部

170516c

橋口サンプル（CT 画像にリングアーチファクトが生じていた）

170516d

ニッケル角柱、Ni-3

1705_mean.pdf にはこれらの測定それぞれの以下の４画像が並んでいます。
ri_0：サンプル回転角が０度の RI 画像

38 / 206
mean：z 方向の全域を視野とした平均 sinogram
z1-z2
空気だけの部分 z = z1～z2 を視野の範囲ととした平均 sinogram。ただし、常に z1 = ０とし、z2 は
ri_0 の画像の上に描いた黄色の横線の位置。なお、測定 170513b では z 方向の全域が空気であるが、比較のために z2 = 30 を指定した平均 sinogram を作成してみた。
mean - z1-z2：上記の２個の平均 sinogram の差分画像。
これらの下部に記した "/" 区切りの３個の値は各画像の横・縦画素数と画素値の値域です。サンプルによる吸収で低い値になっているハズの平均 sinogram の画像 mean の画素値の最大値が空気の部分の z1-z2 の値よりも高くなっている測定があったので、念のために差分画像を作成してみました。CT 画像にリングアーチファ
クトが発生していた測定 170516c の２個の平均 sinogram のどちらにも微かな「縦縞」を視認できます。
(3) X 線強度の時系列の power spectrum density（PSD）
his2tm で得た「RP 画像の測定時刻と平均 sinogram」の画像の浮動小数点数の画素値は既存のプログラム
t_f2txt を使ってテキストデータに変換できます。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/float.pdf
注：t2f2txt のコードの類は SIXM 用の書庫ファイルにも入れてあります。
この変換を行えば SIXM で測定した X 線強度の時系列データを MATLAB のような汎用のツールで解析できま
すが、ここでは、新たに作成したプログラム tm2psd によるそのデータの power spectrum densit（PSD）の推定処理について書きます。
tm2psd は periodogram 法で PSD を推定します。この手法では全体を複数個に分割したセグメントごとに時系列データの離散 Fourier 変換（DFT）を行ない、その結果の周波数ごとの Fourier 変換の自乗値（periodogram）
を計算します。そして、最終的にはセグメントすべての periodogram の平均を PSD とします。his2tm で得た測定時刻にはサンプルの回転ステップ v ごとに数秒の「飛び」があるので、平均 sinogram の並進スキャン sの方向の各列をセグメントとするのが合理的です。その他、tm2psd が行う periodogram の計算処理の詳細を以下に列記します。
[1] それぞれのセグメントの periodogram の計算では M(s,v) から「s に関するそれらの平均値（== 周
波数０の成分）」を差し引いた値を使う。
[2] 測定時刻として T(s,v) と等間隔のサンプリング時刻のいずれかを使う。測定時刻として T(s,v) を使う場合、DFT の計算では「等間隔ではない T(s,v) の値に応じた線形補間」によって得た「等間隔の時刻における M(s,v) の値」を使う。そして、この等間隔の時刻の幅 dt を
dT(v) = Max_s {T(s,v)} - Min_s {T(s,v)} 各セグメントの測定時間
dt = Min_v {dT(v)} / ( Ns - 1 )セグメントの最短の測定時間を等間隔に分割とする。なお、ここで行う線形補間の処理は時系列データに対してある種の「フィルタ」を施すことに相当し、それは periodogram の高周波数成分に影響を与える。ただし、Nyquist 周波数の半分以下

39 / 206の低周波数の成分に対してはその影響は僅かなようである。
[3] DFT の計算は与えられたデータに zero-padding をして２のべき乗の個数に水増しした後に高速
Fourier 変換（FFT）で行う。zero-padding によって周波数分解能が向上する反面、periodogram のプロファイルが暴れるので平滑化を行うべきだが、...。
前置きが長くなりました。プログラム tm2psd の起動法は以下の通りです。
[a] tm2psd

-Hz

M.tif

{view1

view2}> PSD.txt[b] tm2psd

T.tif

M.tif

{view1

view2}> PSD.txt

上記の [a] のようにして起動すると（負の符号 "-" を含まない）値 Hz の逆数 dt =１/ Hz で表される等間隔のサンプリング時刻に M.tif（平均 sinogram）の値を測定したと見なします。また、[b] では画像 T.tif の値を測定時刻とし、前記の [2] に記した dt をサンプリング間隔とします。いずれの場合も view1 と view2 でperiodogram の計算を行う平均 sinogram の v 方向の範囲を限定できます（view1 と view2 を指定しなければすべての periodogram を計算します）。最終的には、tm2psd は periodogram を平均した PSD のテキストデータを標準出力に書き出します（ここではそれをテキストファイル PSD.txt に書き込んでいます）。その各行にはタブコード区切りで以下の２個の値が並んでいます。
PSD.txt の１行目
１番目の値：サンプリング周波数、Hz = 1 / dt
２番目の値：s の全域かつ v = view1～view2 における M(s,v) の平均値
２行目以降
１番目の値：PSD の周波数（Hz/2 未満の正の値；Hz/2 は Nyquist 周波数）
２番目の値：PSD の値（その単位は「X 線強度の自乗×秒」）
起動時に view1 と view2 として同じ値を指定すると tm2psd で periodogam を計算できます。前記の1705_mean.pdf に示した６測定それぞれの空気と z 方向全域の平均 sinogram から取り出したサンプル回転
角が 90 度の時の X 線強度の時系列とそれらの periodogram をこの E-mail に添付した 1705_ts+pg.pdf に並べました。各測定の左側の２個の平均 sinogram の上の黄色の横線で示した位置の時系列データを t_f2txt を使って取り出し、中央のグラフに描きました。その横軸は並進スキャンのステップ番号 s もしくは測定時刻
T(s) で、グラフの下端と上端にそれら各々の値が記されています（測定時刻の単位は秒です）。その右端の凡例に記したように、このグラフでは平均 sinogram の値 M(s) を s もしくは T(s) の関数としてプロットしています。これら２本の線がほぼ完全に重なっていることに注目して下さい。つまり、SIXM の測定データファ
イル a.HIS に記録されている測定時刻の値はこのグラフの時間分解能では等間隔と見なせます。
1705_ts+pg.pdf の右側のグラフが tm2psd で計算したサンプル回転角が 90 度の時の X 線強度の periodogramです。ただし、それらの４本の「暴れている」プロファイルからは時系列の周波数特性に関する情報を読み取れません。そこで、すべてのサンプル回転角の periodogram を平均した PSD を見てみます。この E-mail に添付した 1705_psd.pdf を御覧下さい。

40 / 206
1705_psd.pdf では６測定それぞれの空気および z 方向全域の平均 sinogram の画像とそれらから計算した PSDのグラフを別々に描きました。PSD のグラフの横軸は単位が Hz の周波数で、それらの右端の凡例に記したよ
うに、tm2psd に 50 Hz のサンプリング周波数を指定して得た値と、平均 sinogram の値を測定時刻のデータに即したサンプリング間隔の値に線形補間して計算した PSD の値がプロットしてあります。これらの計算法
による PSD の値の違いは低周波数では僅かなので（前記 [2]）、ここでは PSD のグラフのその部分だけに注目します。
注
これらのグラフにはサンプリング周波数の 1/2 の値に等しい Nyquist 周波数までの PSD の値すべてをプロットしましたが、通常の「スペクトル解析」では推定精度が低い PSD の高周波数成分は無視します。
まず 1705_psd.pdf に示した各測定の左側の PSD のグラフを比較して下さい。それにより、この E-mail の最初に記した結論を確認できると思います：
5/11～17 の SIXM 実験の後半の測定（170515h と 170516[b,c,d]）の X 線強度の時系列の PSD には前半の測定（170513[a,b]）の PSD には見当たらない周波数が２および 4Hz の顕著なピークがある。
CT 画像に顕著なリングアーチファクトが発生していた測定 170516c ではこれら２つの PSD のピークはサン
プル像を含む 1705_psd.pdf の右側のグラフでも観察できます。つまり、これらのピークに対応する（入射）X 線強度の強い揺らぎがリングアーチファクトの原因だと思われます。
ところで、空気を測定した 170513b の z 方向全域の平均 sinogram の PSD のグラフ（右側）には上記の２および４Hz のものよりも顕著な１および３Hz のピークがあります。そして、よくよく見れば、これらのうちの３Hz のピークは他の測定の PSD にも含まれています。170513b 以外の測定ではこれは２および４Hz のものほど目立ちませんが、それでも、CT 画像のリングアーチファクトの原因になっている可能性があります。
いずれにせよ、SIXM で測定した X 線強度には CT 画像のリングアーチファクトの原因となりうる強い揺らぎが含まれています。それらの原因は何でしょうか？
長い E-mail になりました。当初はこの E-mail に(4) プログラム his2tm と tm2psd の使用例
(5) プログラム tm2psd による PSD の推定精度についても書こうと思っていましたが、補足的な内容なので次便以降の E-mail に回します。とり急ぎ、

41 / 206
添付ファイル 1705_mean.pdf（１ページ目）

添付ファイル 1705_mean.pdf（２ページ目）

42 / 206
添付ファイル 1705_ts+pg.pdf（１ページ目）

添付ファイル 1705_ts+pg.pdf（２ページ目）

43 / 206
添付ファイル 1705_psd.pdf（１ページ目）

添付ファイル 1705_psd.pdf（１ページ目）

44 / 206
Date:Thu, 08 Jun 2017 21:27:35 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Miyake, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Masayuki Uesugi, 北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: SIXM の X 線強度の時系列解析の補足
みなさま、
GSJ/AIST のなかのです。先の E-mail で予告した「SIXM で測定した X 線強度の時系列解析」の補足です。
(4) プログラム his2tm と tm2psd の使用例
この E-mail に添付した 170516g_psd.pdf を御覧下さい。５月の SIXM 実験の測定 170516g（AV 貝サンプル
AV-3 を 360 度回転して撮影）の測定データを用いた「SIXM で測定した X 線強度の時系列解析」の実例です。
170516g の測定データファイル a.HIS が置いてあるディレクトリで 170516g_psd.pdf の左側に示した C-shell
script "psd.txt" を
csh

psd.txtと入力して起動すると先の E-mail で紹介したプログラム his2tm と tm2psd を用いた時系列解析を行ない、gnuplot を使ってその結果のデータファイルから 170616g_pdf の右側に示した図の PostScript ファイル
psd.ps を作成します。
測定 170516g の HIS 形式データファイル a.HIS とともに psd.txt を SPring-8 の計算機 vrm のディレクトリ
/media/disk/bl47xu/1705_SIXM/170516g/ の下にコピーしておきました。また、そのディレクトリで psd.txt
を実際に実行してみました。そこに置いてあるファイルを御自由にお使い下さい。
なお、C-shell 変数に代入する値を書き換えれば、psd.txt は他の測定の時系列解析にも流用できるハズです：
3: @ scans = 501# number of scans for "a.HIS"

4: @ views = 1501

# number of projections

5: @ darks = 100# number of dark images← これらの変数の値として SIXM の測定ログファイル a.log の１行目に記されている値を転記するだけ。
9: @ air = 65

# width of upper air region obtained by "ImageJ"← この値は RI もしくは RR 画像を観察して決める必要がある。
18: set hz=50# assumed sampling frequency← ５月の SIXM 実験の測定に対しては常に 50（Hz）で OK？

45 / 206
(5) プログラム tm2psd による PSD の推定精度プログラム tm2psd による PSD の推定の精度を知るため、C-shell script "test.tm2psd" を書きました。その処理で使う「テキストデータから浮動小数点数画素値の TIFF 画像を作成するための既存のプログラム txt2t_f」のコードの類と一緒に test.tm2psd を SIXM の書庫ファイルに入れておきました。
test.tm2psd は座標値 (x,y) の関数の値を浮動小数点数の画素値として格納した平均 sinogram のシミュレー
ション画像 M(x,y) を合成し、その画像と tm2psd で推定した PSD のグラフの PostScript（PS）データ（正確には、gnuplot で描画した画像とグラフの PS データ）を標準出力に書き出します。ただし、ここで使っている座標値 x と y を SIXM の並進と回転のステップ番号 s と v に読み替えて下さい。M(x,y) は具体的には下式で表される関数値です。
for eachx = 0 ～ Nx - 1 andy = 0 ～ Ny - 1

M(x,y) = Sin[ 2・π・F2・( x + A1・Rand[y] ) / F1 ] + A2・Rand[x,y]Sin[]：正弦（sine）関数
F1 と F2x 方向のサンプリング周波数と正弦関数（信号）の周波数
Rand[x,y] と Rand[y]どちらも値域が -1～1 の乱数を返す関数。Rand[x,y] は画素ごとに異なる値を、また、Rand[y] はy 座標ごとに異なる値を返す。
A1 と A2
正弦関数の信号の「位相」と値のそれぞれに加える雑音の振幅
これらのパラメータの値 Nx、Ny、F1、F2、A1、A2 のそれぞれを指定して test.tm2psd を以下のようにして起動します：
test.tm2psd

Nx

Ny

F1

F2

A1

A2

> M+PSD.ps

test.tm2psd に様々なパラメータの値を指定して得た８個の PS 出力の図をこの E-mail に添付した tm2psd.pdfに並べました。これらはそれぞれ以下のようなパラメータの値を指定して得た図です。
すべての図で F1 と F2 の値は固定
サンプリング周波数：F1 = 50
信号の周波数：F2 = 3 ← その位置をグラフに赤の縦線で示した
上部の４図と下部の４図で使用したパラメータの値の違い
tm2psd は２のべき乗の個数でない時系列データを zero-padding で水増しして FFT を行ない、PSDを計算している。その影響を見るため画像の x 方向の画素数 Nx だけを変えた（Nx = 500 or 550）。

46 / 206
左側の図と右側の図
信号の位相に加える雑音の振幅 A1 だけを変えた（A1 = ０ or 17）。
上部と下部の４図のそれぞれの上段の図と下段の図信号の値に加える雑音の振幅 A2 だけを変えた（A2 = ０ or ２）。
tm2psd.pdf からわかるように、上記の範囲の雑音交じりなら tm2psd は信号の周波数（F2 = 3）をほぼ完全に捕らえています。特に、信号の位相に加えた雑音は tm2psd で推定した PSD を乱しません。また、正弦関
数の振幅が１でそれに加えた雑音の振幅が A2 = 0 or 2 なので、ここで調べた時系列データの S/N は 1/2 以上ですが、それが 1/16（A2 = 16）の場合でも信号の周波数の位置の PSD のピークを識別できました。つまり、８ビット（256 諧調）画素値の画像として表示した平均 sinogram の画素値が１の「縦縞」を検知できるかもしれません。ただし、雑音がない A2 = 0（つまり、S/N が無限大）の場合には periodogram の計算法に起因する PSD の凸凹が発生してしまいますが。
とりあえず以上です。
添付ファイル 170515g_psd.pdf

47 / 206
添付ファイル tm2psd.pdf

48 / 206
Date:

Fri, 09 Jun 2017 09:03:12 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Miyake, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Masayuki Uesugi, 北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: SIXM の X 線強度の時系列解析の補足の訂正
みなさま、
GSJ/AIST のなかのです。すみません。昨夜の E-mail（Subject：SIXM の X 線強度の時系列解析の補足）に２箇所の間違いを見つけました。訂正します。
(1)
On Thu, 08 Jun 2017 21:21:03 +0900 Tsukasa NAKANO wrote:> test.tm2psd に様々なパラメータの値を指定して得た８個の PS 出力の図をこの> E-mail に添付した tm2psd.pdf に並べました。これらはそれぞれ以下のような> パラメータの値を指定して得た図です。
>>

すべての図で F1 と F2 の値は固定>

サンプリング周波数 F1 = 2

tm2psd.pdf の図で使ったサンプリング周波数はすべて 50（F1 = 50）でした。
(2)> また、正弦関数の振幅が１でそれに> 加えた雑音の振幅が A2 = 0 or 2 なので、ここで調べた時系列データの S/N は> 1/2 以上ですが、それが 1/16（A2 = 16）の場合でも信号の周波数の位置の PSD> のピークを識別できました。つまり、８ビット（256 諧調）画素値の画像として> 表示した平均 sinogram の画素値が１の「縦縞」を検知できるかもしれません。
上記の「それ（S/N）が 1/16（A2 = 16）」は信号と雑音の自乗値（パワー）の比ではなく、それらの値（の絶対値）の比でした。それゆえ、上記の最後の文章の「画素値が１」は「画素値が 16（= 256 / 16）
」の間違い
です。
８ビット（256 諧調）の画素値の画像として表示した平均 sinogram から画素値が 16 の「縦縞」を検知できるかもしれません。
とり急ぎ、

49 / 206
Date:

Wed, 14 Jun 2017 10:37:55 +0900

From:

Tsukasa NAKANOTo:"TAKEUCHI, Akihisa"

Cc:

MATSUNO Junya, Miyake, 土`山 明, Sugimoto Miyama, Masayuki Uesugi,
北山, megumi matsumoto, 伊神, Akira TSUCHIYAMA, Kentaro UESUGISubject: Re: 170516c のリングアーティファクトについて
たけうちさま、
GSJ/AIST のなかのです。
> 例の松野パタン、三宅パタンについて、うちの加速器 Gr が再度対策を考えることになりました。
> それで、原因となった数値データが欲しいそうです。
6/8 の E-mails で紹介した「SIXM の X 線強度の時系列解析」の結果の「平均 sinogram の power spectrum
density（PSD）」の図ではダメなのでしょうか？ 念のため、6/8 の Subject が「SIXM の X 線強度の時系列解析」の E-mail に添付した 1705_psd.pdf と、その PDF からサンプル上部の空気の部分の平均
sinogram の図と PSD のグラフを抜き出した 1705_psd_top.pdf を送ります。
SIXM で撮影した raw refraction（RP）画像の暗電流補正済みの画素値の値域の幅（= 最大値 - 最小値）は、図の下部に記されているように7000 程度です。また、測定 170516c で特に顕著な PSD の２Hz と４Hz のピークの値の値は 10^3～10^4（1000～10000）です。PSD の値を単純に「X 線強度の揺らぎの振幅の自乗値」と思えば、リングアーチファクトの原因だと思われるその揺らぎの振幅は √1000≒100 で、RP 画像が示す平均強度の 1 %程度になります。
とり急ぎ、
On Tue, 13 Jun 2017 23:51:04 +0900 "TAKEUCHI, Akihisa" wrote:> 松野様>> 竹内です。
> 例の松野パタン、三宅パタンについて、うちの加速器 Gr が再度対策を考えることになりました。
> それで、原因となった数値データが欲しいそうです。
> 昨年のスタディでは、強度変化 0.5%以下になればほぼノイズレベルに埋もれる、> という結果だったのですが、今回はなぜ見えている？ということを聞かれました。
> 要は例の 170516c_ri で絶対値強度変化が 0.5%以上あったかどうかを示せばよいかと思うので> 170516c_ri（と念のため 170516c_rr 両方）で、松野・三宅両パターンについて> 数値データ（典型的なレイヤの一次元データ）をいただけないでしょうか。
> 或いは画素値の絶対値が分かる Tif データでもいいです。
> 忙しいところすみませんがよろしくお願いします。
>…

50 / 206
添付ファイル 1705_psd.pdf
2017/6/8 13:04 の E-mail に添付したものと同じものなので省略します。
添付ファイル 1705_psd_top.pdf

51 / 206
Date:

Wed, 14 Jun 2017 13:43:20 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

Kentaro UESUGI, 竹内, MIYAKE, 土`山 明, Miyama Sugimoto, Masayuki Uesugi,
北山晃, megumi matsumoto, Yohei IGAMI

Subject: Re: 170516c のリングアーティファクトについて
まつのさま、
なかのです。
6/8 の２通目の E-mail（subject: SIX の X 線強度の時系列解析の補足）で紹介した C-shell script "psd.txt" を改造して、SIXM の測定 160420[b,c] の平均 sinograms を作成し PSDs を計算しました。その結果の図160420bc_psd.pdf をこの E-mail に添付します。これらの PSD のプロファイルは先月の SIXM 実験の測定
170516c などのものとは大きく異なります。160420[b,c] の空気の部分の PSDs には３Hz の付近にブロードなピークがありますが、これは多分「平均 sinogram にうっすらと写っている偽像」によるもので、「松野パターン」ではないと思われます（実は、「松野パターン」がどんなものかをきちんと把握していませんが）。
なお、うっかりしていて図に記載しませんでしたが、測定 160420[b,c] の平均 sinogram の画素値（= SIXMで測定した X 線強度値）は先月の測定の値（最大値が 10000 以上）よりもかなり低いです。光量不足ですね。
set

layer

min. PV

max. PV

160420b0-253667.769531

4629.081055

160420ball2863.169189

5317.125488

160420c

0-403665.958252

4769.182129

160420call2116.512939

5339.851562

今 回 の 処 理 用 に 改 造 し た C-shell script "psd.txt" と 、 そ れ が 使 う 測 定 ご と の 内 容 の C-shell script"160420[b,c]_air.txt"（ぼくの計算機の上でのこれらのファイル名は "160420[b,c]/air.txt"）をこの E-mail に添付します。ただし、psd.txt は bzip2 圧縮されているファイル a.HIS（a.HIS.bz2） を解凍しつつ読み込むよ
うにしてあります。また、psd.txt は a.log を調べるので、a.HIS の読み取り用のパラメータ scans、views とdarks の設定は不要です。適切に書き換えた air.txt を用意すれば、psd.txt を使って他の測定の平均 sinogramの PSD を計算することが可能です。とり急ぎ、On Wed, 14 Jun 2017 10:05:29 +0900 MATSUNO Junya wrote:> 上杉さま、竹内さま> ご対応ありがとうございます。
> 早速グラフを作成していただき、ありがとうございました>上杉さま>> ちなみに最近気づいたのですが、2016A の SIXM でも"松野パタン"を確認しました。

52 / 206
> 160420b> がそのファイルです。
> 0 枚目の位相のシノグラムを添付します。(000.tif)> また、試料への影響が見やすいので、吸収の 100 枚目のスライス像も添付します(100.tif)> これも、キッカー由来と考えられるのでしょうか？
>> a.HIS のタイムスタンプからは、> Date="2016/04/20"> Time="15:10:13.366"> が、撮影開始、> a.HIS のファイル作成時刻から推定すると終了は> 18:24> です。
>> 他にもあるかは、探していないです。。
>> 松野
添付ファイル 160420bc_psd.pdf

53 / 206
添付ファイル psd.txt## SIXM parameters
set svd=(`head -1 a.log | tr , ' '`)## extraction of "time" and "mean" images
source air.txt ; if ($?air == 0) exit 1
bzip2 -dc a.HIS.bz2 | his2tm - $svd[1-3] 0 $air time.tif
bzip2 -dc a.HIS.bz2 | his2tm - $svd[1-3]@ svd[1] = $svd[1] - 1

0-${air}.tif

mean.tif# actual number of scans for imaging## calculation of power spectrum density (PSD)
set hz=50 # assumed sampling frequency
tm2psd -$hz

0-${air}.tif>! 0-${air}_${hz}.txt

tm2psd time.tif

0-${air}.tif>! 0-${air}.txt

tm2psd -$hz

mean.tif>! mean_${hz}.txt

tm2psd time.tif

mean.tif>! mean.txt## drawing graphs by "gnuplot"
set lines='with lines linetype -1 linecolor rgb'
gnuplot << fin >! psd.ps
set terminal postscript eps enhanced color size 6.5,9.5 font 'Helvetica,20'
set datafile separator "\t"set multiplot
set size 0.25,0.5
unset key ; unset tics
unset colorbox ; set palette gray gamma 1
set xlabel "$svd[1] scans" ; set ylabel "$svd[2] views" rotate by 90
set origin 0,0.5
set x2label "0-${air}" offset 0,0.5
plot "< t_f2txt 0-${air}.tif %lf - | tail -n +2" matrix using 1:(${svd[2]}-1-\$2):3 with image
set origin 0,0
set x2label "mean" offset 0,0.5
plot "< t_f2txt mean.tif %lf - | tail -n +2" matrix using 1:(${svd[2]}-1-\$2):3 with image

54 / 206
set size 0.75,0.5
set key samplen 2 spacing 1.5 height 1 autotitles columnheader
set xtics ; set ytics format "10^{%L}" ; set x2tics mirror 1 format ""set logscale y ; set grid noxtics ytics x2tics
unset xlabel ; unset ylabel ; unset x2label
set origin 0.25,0.5
plot "< echo Hz ; sed -n 2p 0-${air}.txt" title 1 $lines 'white', \"0-${air}_${hz}.txt" title 1 $lines 'red', \"0-${air}.txt" title 1 $lines 'blue'
set origin 0.25,0
plot "< echo Hz ; sed -n 2p mean.txt" title 1 $lines 'white', \"mean_${hz}.txt" title 1 $lines 'red', \"mean.txt" title 1 $lines 'blue'
fin

添付ファイル 160420b_air.txt@ air = 25

# width of upper air region obtained by "ImageJ"

添付ファイル 160420c_air.txt@ air = 40

# width of upper air region obtained by "ImageJ"

Date:

Wed, 14 Jun 2017 16:44:43 +0900

From:

Tsukasa NAKANO

To:

Kentaro UESUGI

Cc:

竹内, 松野, 三宅, 土’山, 杉本, 上椙, 北山, 松本, 伊神Subject: Re: 170516c のリングアーティファクトについて
うえすぎさま、なかのです。プログラム his2tm で抽出した「平均 singram」は生データではなく、SIXM で撮影した RP 画像の上の [1] 暗電流補正をした画素値の [2] 指定した領域での和、ですよ。こういう簡単な処理を行った後のデータも生データ？ 昔、日立工場の人に CT 画像の（８ビット画像に変換していない）生データを下さいと言ったら、CT 測定した X 線強度の生データを渡されたことを思い出しました（ぼくは腕に覚えがあったわけではありません）。とり急ぎ、

55 / 206
On Wed, 14 Jun 2017 15:52:52 +0900 Kentaro UESUGI wrote:> 中野さん> 上杉です>> > 6/8 の E-mails で紹介した「SIXM の X 線強度の時系列解析」の結果の「平均> > sinogram の power spectrum density（PSD）」の図ではダメなのでしょうか？
>> 今やりとりしている人は「腕に覚えあり」の人で何かというと生データをよこせと言います。
> 自分が納得すると動き出すので、とりあえず言われたデータを> 出している感じです。せっかく良いデータがあるんですけどねぇ。
Date:

Wed, 14 Jun 2017 20:14:31 +0900

From:

Tsukasa NAKANO

To:

竹内

Cc:

Kentaro UESUGI, 松野, 三宅, 土’山, 杉本, 上椙, 北山, 松本, 伊神Subject: Re: 170516c のリングアーティファクトについて
たけうちさま、なかのです。
> 上杉さんのいうように、「生」に近いデータが必要なのと、> 腕に覚えのある人なのでとにかく数値データがほしい、ということだと思います。
6/8 の E-mails に書き忘れていましたが、それらで紹介した５月の SIXM 実験の６測定の平均 sinograms 全体の時系列のテキストデータも作っていました。計算機 vrm のディレクトリ /media/disk/tsukasa/1705/tm/の中に置いてある gzip 圧縮した６個のファイル「測定番号.txt.gz」です。
測定番号 = 170513[a,b]、170515h および 170516[b,c,d]
これらのファイルの各行には以下の５個の値が並んでいます（ただし、１行目は凡例で、２行目以降がデータの値です）。
[1] view：投影番号もしくはサンプル回転のステップ番号[2] scan：並進スキャンの番号[3] time：その回転・並進スキャンの測定時刻（単位は秒）[4] 0-air：空気の部分の平均 sinogram の値（air は空気の層の幅の値）[5] mean：鉛直方向全体の平均 sinogram の画素値
これらの巨大ファイルを御自由にお使い下さい。とり急ぎ、

56 / 206
On Wed, 14 Jun 2017 19:08:14 +0900 "TAKEUCHI, Akihisa" wrote:> 中野さん>> ご協力ありがとうございます。
> 上杉さんのいうように、「生」に近いデータが必要なのと、> 腕に覚えのある人なのでとにかく数値データがほしい、ということだと思います。
> あと、昨年同様のスタディをした際にも強度変動のプロファイルから直接許容範囲を決めていたので> 今回のと比較するのに同様の形式がやりやすいのかと。
Date:Thu, 15 Jun 2017 10:36:38 +0900

From:

Tsukasa NAKANO

To:

竹内

Cc:

Kentaro UESUGI, 松野, 三宅, 土’山, 杉本, 上椙, 北山, 松本, 伊神Subject: Re: 170516c のリングアーティファクトについて
たけうちさま、なかのです。昨日の E-mail で紹介した
vrm.spring8.or.jp:/media/disk/tsukasa/1705/tm/測定番号.txt.gz
５月の SIXM 実験の６測定の平均 sinogram の時系列のテキストファイル
ですが、それらの１行目の凡例の文字列「time」を空白を含む文字列
sec. from 測定年/月/日 時:分:秒に置換したもの（gzip 圧縮したテキストファイル「測定番号.txt.gz」）を計算機 vrm のディレクトリ
/media/disk/bl47xu/1705_SIXM/tm/ の下にコピーしておきました。御自由にお使い下さい。なお、この測
定開始時刻は 5/24 の E-mail（Subject: SIXM 実験の測定時刻）の添付ファイル 1705_time.csv に記されている値です。とり急ぎ、

57 / 206
Date:Thu, 15 Jun 2017 13:43:51 +0900

From:

Tsukasa NAKANO

To:

Kentaro UESUGI

Cc:

竹内, 松野, 三宅, 土’山, 杉本, 上椙, 北山, 松本, 伊神Subject: 電子ビームの揺らぎ
うえすぎさま、なかのです。昨日（6/14）の E-mail（後に貼り付けました）に書かれていたことに関する質問です。
(1)> やはり電子ビームの軌道補正がきちんと出来ていませんね。
> (目標値は強度変動で 0.5%以下＝電子ビーム軌道変動量 7um 以下)
この「目標値」の強度変動はどれくらいの時間間隔における値ですか？ 例えば、
１秒間隔で強度をサンプリングした時のデータのばらつき
１時間の平均強度のばらつきなどなど
6/8 の E-mail（Subject：SIXM の X 線強度の時系列解析）に添付したファイル 1705_ts+pg.pdf（この E-mailに再度添付しました）の中央縦に並んだグラフを御覧下さい。それらはそれらの左側の平均 sinogram の上下
中央付近の黄色の横線で示した横一列の画素値（= X 線強度）のプロファイルで、青線（およびそれと完全に重なっている赤線）が空気だけの部分の強度の値です。グラフの上端に記されている秒単位の測定時刻からわかるように、測定 170516c ではその強度の値は１秒以下の周期で±２～３%（画素値の変動の範囲が 10750～ 11250）変動しています。また、平均 sinogram は横列ごとの値の変動が大（つまり、平均 sinogram には「横縞」が顕著）なので、それよりも長い時間間隔の変動幅はもっと大きいと思われます。
(2)> 170516c_M.tif を ImageJ で読んで、11 行平均くらいの> 横プロファイルを１個描くと良いと言う事が分かりました(line_profile.jpg)。
この「11 行」は his2tm で作成した画像 170516c_M.tif の「11 行の横列」の意味ですか？
his2tm で作成した平均 sinogram の画像の横一列の画素の値はサンプリングの時間間隔がおよそ 20 ms（測定 170516c の場合）の X 線強度の測定値を表していますが、その列が違うと同じ横の位置の画素の値は横一列の測定に要した時間（170516c では 10 秒以上）
サンプルの並進位置を左から右に戻す時間（数秒程度）の和だけ異なる時刻の測定値になります。つまり、「画像 170516c_M.tif の上の 11 行の横列を平均する」は、「10 数秒づつ異なる時刻に測定された 11 個の X 線強度の値を平均している」ことになりますが、それに何の意味がある？

58 / 206
On Wed, 14 Jun 2017 09:31:45 +0900 Kentaro UESUGI wrote:> 竹内さん>> 上杉です>> 結局下記コマンドで、各データを一列にすることは出来たのですが、> グラフ化するとノイズが多くちょっと分かりにくいので、> 170516c_M.tif を ImageJ で読んで、11 行平均くらいの> 横プロファイルを１個描くと良いと言う事が分かりました(line_profile.jpg)。
> つまり必要だったコマンドは最初の１行のみ・・・> ということで、170516c_M.tif をお送りします。
> ちなみにこのデータは>暗電流補正済みの RP(refraction profile) 画像の画素値の平均値> だそうです。変動量的には最大最小で 2%くらいです。
> やはり電子ビームの軌道補正がきちんと出来ていませんね。
> (目標値は強度変動で 0.5%以下＝電子ビーム軌道変動量 7um 以下)>…
添付ファイル 1705_ts+pg.pdf
2017/6/8 13:04:01 の E-mail に添付したものと同じものなので省略します。
Date:

Fri, 16 Jun 2017 14:48:20 +0900

From:

Tsukasa NAKANO

To:

Kentaro UESUGI

Cc:

竹内, 松野, 三宅, 土’山, 杉本, 上椙, 北山, 松本, 伊神Subject: Re: 電子ビームの揺らぎ
うえすぎさま、なかのです。待つのはかまいませんが、ぼくが (2) で問題にしたデータを「生データ」だと言って加速器グループ？の人に渡すのは止めてください。とり急ぎ、On Fri, 16 Jun 2017 14:23:33 +0900 Kentaro UESUGI wrote:> 中野さん>> 上杉です>> これちょっと待ってください。今週手が回らなくて。

59 / 206
> Tsukasa NAKANO wrote:> > うえすぎさま、> > なかのです。今頃になって何ですが、昨日（6/14）の E-mail（後に貼り付けました）に> > 書かれていたことに関する質問です。
>>…
Date:

Fri, 16 Jun 2017 19:10:41 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

竹内, Kentaro UESUGI, MIYAKE, 土`山 明, Miyama Sugimoto, Masayuki Uesugi,
北山晃, megumi matsumoto, Yohei IGAMI

Subject: Re: 170516c のリングアーティファクトについて
まつのさま、
なかのです。6/14 の上杉君からの E-mail に書かれていた方法というのは、
RI 画像の平均 sinogram SG(s,v) の投影番号 v が異なる複数行の横列の位置 s の各画素値の平均のライン
プロファイル LP(s) = <SG(s,v)>_v を計算するですか？ 昨晩の上杉君宛ての E-mail に書いたように、それを X 線強度の時系列の解析（X 線強度の揺らぎの評価）で行ってはいけません。投影番号が異なる X 線強度の測定時刻は連続しておらず、数秒の「飛び」があります。とり急ぎ、On Fri, 16 Jun 2017 18:50:25 +0900 MATSUNO Junya wrote:> 竹内さま、上杉さま、中野さま> 松野です、なんども恐縮です。
>> 2016A, 2016B について、6/14 の上杉さんのメールで書かれていた方法(に近い?)で、> ノイズの大きさを評価してみました。
> 結論から言うと、2016A, B 共に試料の部分では騒ぎ立てるほどはのっていなさそうで、> 0.数 %程度と思われます。(だから、こちらでは今まで見過ごしていたかと・・・)>> ついでに、2017A でもやってみましたので、それらの図をペタペタ貼っただけのパワポをお送りします。
>> 今回調べたシノグラムは 8bit 化された物を用いた(手元にありました)のですが、> 試料部分がよく見えるように 8bit 化されたはずなので、ノイズの大きさの指標に一応使っても> いいのではないかと思っています。
。
> 必要でしたら、生に近いデータ(?)を作成します。
>> 以上、ご報告まで。

60 / 206
Date:

Sat, 17 Jun 2017 11:13:58 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

竹内, Kentaro UESUGI, MIYAKE, 土`山 明, Miyama Sugimoto, Masayuki Uesugi,
北山晃, megumi matsumoto, Yohei IGAMI

Subject: Re: 170516c のリングアーティファクトについて
まつのさま、
なかのです。
> あまり理解していないままにご質問するのも恐縮なのですが、、、全然理解していませんね。
> 縦シマノイズは完全には縦ではなく、少し傾いていました。
> これは、> >投影番号が異なる X 線強度の測定時刻は連続しておらず、数秒の「飛び」があります。
> の「飛び」のせいなのでしょうか。
RI 画像の sinogram（平均 sinogram でも同じです）の値 SG(s,v) の測定時刻を T (s,v) とします。これは SIXMのある回転角・並進スキャンで撮影した RP 画像の撮影時刻で、理想的には以下の式で表されるはずです。
T(s,v) = T0 + ( dT1 × s + dT2 ) × v
T0：測定開始時刻
dT1：SIXM の並進スキャンの時間間隔（５月の実験ではおよそ 1/50 秒）
dT2：並進スキャン終了後のステージの移動時間（数秒）
これより、v が１異なる SG(s,v) の値は理想的にはT(s,v+1) - T(s,v) = dT2だけ異なる時刻に測定した値です。そして、縦縞が傾いているのは dT2 が dT1 の整数倍ではないためですが、縦縞の周期（横画素数）は dT1 の数倍程度：一定値とは限らない
dT2（数秒）は dT1（1/50 秒）の 100 倍以上大きな値なので、縦縞の周期と dT2 が同期しているのは非常に稀で、かつ、dT2 はサンプルステージの大移動に要する時間なので、それが常に一定値だとは言い難い。つまり、dT2 は v に応じて変動していてもおかしくないので、v の値が異なる SG(s,v) の値を混ぜ合わせるのは危険です。これでわかりますかね？ とり急ぎ、On Fri, 16 Jun 2017 20:13:43 +0900 MATSUNO Junya wrote:> 中野さま> 松野です。ご返信ありがとうございます。
>>>

RI 画像の sinogram SG(s,v) の投影番号 v が異なる複数行の横列の位置 s>>の各画素値の平均のラインプロファイル LP(s) = <SG(s,v)>_v を計算する> で求めてみました。
>

61 / 206
> あまり理解していないままにご質問するのも恐縮なのですが、、、>> 縦シマノイズは完全には縦ではなく、少し傾いていました。これは、> >投影番号が異なる X 線強度の測定時刻は連続しておらず、数秒の「飛び」があります。
> の「飛び」のせいなのでしょうか。
> とすると、縦方向の平均で出したノイズ強度は過小評価している可能性がある、> と言うことなのでしょうか。
>> 乱暴に考えると、10°傾いていたとしても cos10°~0.98 倍くらいの過小評価くらいなので、> 大体の指標には OK、、と言う気がするのですが。

62 / 206
Date:

Sat, 17 Jun 2017 13:16:57 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Miyake, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Masayuki Uesugi, 北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: SIXM の入射 X 線強度の推定法
みなさま、
GSJ/AIST のなかのです。以前から気になっていた SIXM の吸収 CT 画像の画質の悪さを何とかするため、その最大の原因だと思われる画像再構成の際の「入射 X 線強度 I0 の推定（I0 estimation）の方法」について色々と考えてみました。
(0)
その結論を先に言うと、これまでに書いた SIXM 用の画像再構成プログラムで採用していたサンプル上部（top）や両脇（side）の領域の X 線強度だけを用いる単純な手法ではなく、それらを組み合わせた I0 の推定法（今の所は hybrid[0,1,2] 法のいずれか）を使えば SIXM の吸収 CT 画像の画質はかなり向上するです。特に、サンプルの両脇の X 線強度値を使って I0 を推定している現在のプログラムで再構成した測定
170516c の CT 画像に発生していたリングアーチファクトは hybrid [0,1,2] 法によってほぼ完全に除去できることを確認しました。
(1)
今回試した５種類の I0 の推定法の性能？を示す図も先にお見せします。
この E-mail に添付した i0e_t+s+h.pdf
です。５月の SIXM 実験の３測定それぞれの RI（raw X-ray intensity；暗電流補正済みの X 線強度）画像のsinograms と、５種類の方法（top、side と hybrid [0,1,2] 法）のそれぞれで推定した I0 の値を使ってそのデータから計算した投影値 sinograms、および、それらから再構成した吸収 CT 画像を並べました。各画像の下にその画素の値の範囲（最小値～最大値）を、また、各測定の左下に sinogram の画素数や画像再構成に使用したパラメータ値などを示しました（そこに記した記号の意味はわかりますよね？）。この図から (0) に書いた結論を確認できると思います。
(2)
ここからが本論です。以下では RI 画像の横（水平）と縦（鉛直）方向の座標値を x と y とし、後述する５種
類の方法のいずれかで推定した I0 の値を使って RI 画像上の値 I(x,y) から投影値 P(x,y) = Log[ I0 / I(x,y) ] を計算します。ただし、6/8 の E-mail（Subject：SIXM の X 線強度の時系列解析）で説明したように、サンプ
ル回転角が異なる RI 画像の測定時刻には「飛び」があるので、それらの画像の値を混ぜ合わせて使うのは危険？です。今回試した５種類の I0 の推定法ではサンプル回転角が同じ RI 画像ごとに処理を行います。

63 / 206
(3)
SIXM 実験の開始直後に書いた画像再構成プログラムで採用していた I0 の値の推定法（top 法）の処理内容は以下の通りです。
top 法
RI 画像の最上部（= サンプルの上部）に画素数 Nt の幅の空気の層があるとする。その部分の縦（y方向）の画素列ごとの X 線強度の平均値をそれぞれの x 座標値の I0 の値と見なす。
I0(x) = Σ_y=0～Nt-1

I(x,y) / Nt

また、５月の SIXM 実験で使っていた（現役の）画像再構成プログラムでは以下の処理内容の side 法で I0 の値を推定しています。
side 法
RI 画像の左右の端（= サンプルの両脇）に画素数が Nl と Nr の幅の空気の領域があるとする。それらそれぞれの領域における X 線強度の平均値を x 方向に線形補間した値を I0 として使う。
xl = (Nl - 1) / 2
xr = Nx - 1 - (Nr - 1) / 2
L(y) = Σ_x=0～Nl-1

I(x,y) / Nl

R(y) = Σ_x=Nx-Nr～Nx-1

I(x,y) / Nr

I0(x,y) = { (xr - x)・L(y) + (x - xl)・R(y) } / (xr - xl)
ただし、Nx は RI 画像の横（x）方向の画素数
なお、side 法では Nl = 0 or Nr = 0 も許していて、その場合は幅が０でない領域の X 線強度の平均値 L(y) or
R(y) を x に関して一定値の I0 とします。
(4)
上記の top 法と side 法の問題点を示す図 i0e_ri.pdf をこの E-mail に添付しました。そこには５月の SIXM 実
験の２測定の RI 画像の sinogram 画像と、それら（および RI 画像）の上の x 方向の X 線強度のプロファイルのグラフが並んでいます。ただし、各測定の sinogram 画像の X 線強度と表示輝度の対応関係を同じにしてあります。また、グラフに描いた緑色の縦線は side 法で指定したサンプルの左・右の空気の領域の右・左端の位置を示しています。
測定 170516c の view = 129 のグラフから top 法の弱点がわかります。つまり、I0（青線）がサンプルを透過した X 線の強度（赤線）よりも小さい値になっています。言い換えると、RI 画像の X 線強度に y（鉛直）方向の値の違い（空間分布）がある場合は top 法で決めた I0 の値は投影値の計算には不適当です。
また、i0e_ri.pdf のグラフを見る限り、測定 170516c の I0 を sid 法で問題なく推定できそうですが、sinogram
画像に含まれる微かな縦縞のためにその CT 画像に著しいリングアーチファクトが発生することは周知の事実

64 / 206です。つまり、side 法で採用しているサンプルの両脇の値の線形補間ではサンプルの部分の I0 の変動をきちんと推定（再現）できません。
(5)
前述のように i0e_ri.pdf に示した測定 170516c のグラフではサンプルの上部の X 線強度の平均値（青線）はサンプルを透過した X 線の強度の値（赤線）と大きく異なっていますが、それらの空間分布は似ている気がします。これは測定 170516d の３つのグラフでも同様です。やはり、変動している I0 の推定をサンプル上部のX 線強度の平均値を使って行うべきだと思います。そこで、top 法のようにサンプル上部の X 線強度の平均値
そのものを I0 と見なすのではなく、その値に side 法で使ったサンプル両脇の値との「相関」を加味して I0 を推定する手法（hybrid 法）を試してみることにしました。
(6)
top 法と同一の式で計算したサンプル上部の空気の層の X 線強度の平均値を hybrid 法では T(x) と書くことにします。
T(x) = Σ_y=0～Nt-1

I(x,y) / Nt

そして、I0 はこの T(x) に比例した値だとします。
I0(x,y) = C(x,y)・T(x)ただし、ここで導入した比例係数 C(x,y) はサンプル回転角ごとの RI 画像の y 座標値の関数です。また、これは x 座標値の任意の関数でも良いですが、それでは計算が複雑になるので、今の所は x に関して定数（hybrid[0,1] 法）もしくは１次関数（hybrid 2 法）の場合だけを考えます。hybrid 法ではこの C(x,y) を side 法で使ったサンプル両脇の X 線強度の値から推定します。
なお、x 座標値の範囲指定の記述が面倒なので、以下では side 法で取り扱ったサンプル両脇の空気の領域（のx 座標値の範囲）における X 線強度 I(x,y) と T(x) の値を以下の定義に従う S(x,y) と Ts(x) で表します。
S(x,y)Ts(x)≡ I(x,y)when

x = 0 ～ Nl-1

or

≡ 0

when

x = Nl ～ Nx-Nr-1≡ T(x)

when

x = 0 ～ Nl-1

≡ 0

when

x = Nl ～ Nx-Nr-1

orx = Nx-Nr ～ Nx-1
x = Nx-Nr ～ Nx-1

(7)hybrid [0,1] 法では x に関して定数の比例係数 C(y) を y ごとに決定します。
hybrid 0 法
サンプルの両脇の X 線強度 S(x,y) とサンプル上部の X 線強度の平均値 Ts(x) の比の単純な平均値
を C(y)とする。

65 / 206
C(y) = Σ_x=0～Nx-1{ S(x,y) / Ts(x) } / (Nl+Nr)

ただし、Ts(x) = 0 の時は S(x,y) / Ts(x) = 0 とする。
hybrid 1 法
Ts(x) は平均値なので S(x,y) よりも信頼できる？と考えられるので、Ts(x) に誤差がないとした最小自乗法で式 S(x,y) = C(y) ・Ts(x) の係数値 C(y) を決める。
C(y) = Σ_x0～Nx-1 { S(x,y)・Ts(x) } / Σ_x0～Nx-1 { Ts(x)^2 }また、hybrid 2 法の C(x,y) は x の１次関数です：C(x,y) = A(y)・x + B(y)。
hybrid 2 法
hybrid 0 法と同様に S(x,y) / Ts(x) を C(x,y) の測定値だとする。そのデータを当てはめた x に関する１次式 C(x,y) = A(y)・x + B(y) の係数値 A(y) と B(y) を最小自乗法で決める。
やや複雑なので、A(y) と B(y) の計算式の記載は省略します。
(8)
以上のような５種類の I0 の推定法を実際に試した結果の図が (1) で紹介した i0e_t+s+h.pdf です。これらを眺めていると (0) に書いた結論以外で気になることがあります。それは測定 170516d の投影値 sinogram に複数個ある横方向に伸びている短い「白線」の偽像で、hybrid [0,1,2] 法で除去できていません。
(9)
その様相を詳しく見るため、この E-mail に添付した i0e_ri.pdf に白線の偽像が発生している 170516d のサン
プル回転角（view）が 225 とその前後の view の T(x)（青線）および I(x,y)（赤線）の x 方向のプロファイル
を描きました。これらの x = 230 付近の「凹み」に注目して下さい。view = 225 ではそれは T(x) と I(x,y) の両方にあります。つまり、この凹みは入射 X 線の強度変動によるものだと思われますが、それは view = 224の T(x) と view = 226 の I(x,y) にはありません。
非常に不思議です。
なお、
170516d の layer = 066 の sinogram
画像からわかるように、x = 230 付近には物体像はありません。
(10)170516d の投影値 sinogram の白線の偽像の正体を知るため、RI 画像より雑音が少ない RR 画像を眺めてみました。この E-mail に添付した 170516d_rr.jpg です。その左右端の黒横線の位置が RI 画像に白線の偽像が発生している layer = 066 です。view = 225 の RR 画像上のその位置にモヤモヤした白い像があります。これはRI 画像の偽像と同じ原因で生じた偽像だと思われますが、両者の関係は不明です。いずれにせよ、今回試したような簡単な I0 の推定法では 170516d の投影値 sinogram の白線の偽像を除去するのは難しいようです。
長い E-mail になりました。とりあえず以上です。

66 / 206
添付ファイル i0e_t+s+h.pdf

67 / 206
添付ファイル i0e_ri.pdf

添付ファイル 170516d_rr.jpg

68 / 206
Date:

Mon, 19 Jun 2017 10:56:24 +0900

From:

Tsukasa NAKANO

To:

Akira TSUCHIYAMA

Cc:

Kentaro UESUGI, Akihisa TAKEUCHI, Miyake, MATSUNO Junya,, Masayuki Uesugi,
北山, megumi matsumoto, Sugimoto Miyama, Yohei IGAMI

Subject: Re: SIXM の入射 X 線強度の推定法
つちやまさま、なかのです。
(1)
今回のテストで使ったプログラムは１枚のスライス画像の I0 の推定しかできないので、とりあえず５月のSIXM 実験の３測定の１枚づつの吸収 CT 画像の画素値ヒストグラムを調べました。その図がこの E-mail に添付した i0e_hg.pdf です。横軸下部に記した数値の単位は 1/cm、上部は画素値の諧調０～255 です。測定170513a（AV 貝 AV-3 を撮影）と 170516d（ニッケル角柱 Ni-3）はサンプルの LAC の理論値を画素値 100に、また、170516c（橋口サンプル）は（side 法を採用しているプログラムで再構成した）CT 画像の画素値
ヒストグラムのピークの位置が画素値 100 に対応しています。なお、先に言っておくと、今回試した hybrid
法は SIXM の入射 X 線強度の時系列に含まれている２および４Hz の揺らぎを除去することを目的としているので、ヒストグラムのピークの幅は大きく変わらないはずです（これらの簡単な補正法でその幅が狭くなると嬉しいのですが）。
(2)
RP 画像から得られるサンプルによる「屈折角」はある意味「絶対値」なので、位相 CT 画像には hybrid 法を使わないつもりです。むしろ、現在の位相 CT 用再構成プログラムで使っている side 法を top 法に戻そうかと思っています。
とり急ぎ、
On Sun, 18 Jun 2017 10:43:18 +0900 Akira TSUCHIYAMA> 中野さん>> > ところで、画素はどうなりますか？
> は、>

画素ヒストグラムは？

> です。
>> > 2017/06/17 21:45、Akira TSUCHIYAMA のメール:> > 中野さん

wrote:

69 / 206>>
> > ご連絡ありがとうございました。
>>> > まずは、hybrid [0,1,2] 法が有効そうで、何よりです。
> > ところで、画素はどうなりますか？
>>> > また、位相像はどうなるのでしょうか？
添付ファイル i0e_hg.pdf

70 / 206
Date:

Mon, 19 Jun 2017 15:36:38 +0900

From:

Tsukasa NAKANO

To:

Akira TSUCHIYAMA

Cc:

Kentaro UESUGI, Akihisa TAKEUCHI, Miyake, MATSUNO Junya, Masayuki Uesugi,
北山晃, megumi matsumoto, Sugimoto Miyama, Yohei IGAMI

Subject: Re: SIXM の入射 X 線強度の推定法
つちやまさま、なかのです。
(1)> 170513a では反対にピーク幅がやや> 広くなっている（ピーク位置もずれている）ように見えますね。
これは hybrid 法（および top 法）で I0 の推定に使った RI 画像の上端（== サンプル上部）の 10 画素の幅の空気の層に「怪しい像」が写っているためだと思われます。それが良くわかる 6/8 の E-mail（Subject：SIXMの X 線強度の時系列解析）に添付した 1705_mean.pdf を再度添付しますので、御覧下さい。１ページ目の最上段のラベル「170513a/0-10」付きのものが hybrid 法で使った空気の層の X 線強度 T(x) に対応している平均 sinogram SG(x,v) の画像です。その段の左端の「サンプル回転角が０の状態の R 画像（170513a / ri_0）」に黄色の線で示したように、この y = 0～10 の空気の層にはサンプルはないですが、X 線の散乱？に由来する偽像が写り込んでいます。これが hybrid 法による I0 の推定を乱しているのだと思います。
(2)> ところで、位相像で top 法に戻すことを考える理由は何でしょうか。
その理由は 2015/10/19 の E-mail
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=102
で紹介した位相 CT 画像の再構成で使う RR（raw X-ray refraction）画像の画素値の計算法の制約条件？に関係します。ただ、竹内さんによると、ぼくがそこで導き出した条件式は間違っているようなので、それを使わずに説明してみます。
RR 画像の画素値は SIXM のスキャンの各ステップで撮影した RP（refraction profile）画像の水平（h）方向の重心の位置であり、その計算の過程で RP 画像の X 線強度の値 RP(h) はキャンセルされます：
重心の位置 = ∫ h・RP(h) dh / ∫ RP(h) dh。
その意味で、RR 画像の画素値（== サンプルによる屈折角）はサンプルへの入射 X 線強度に鈍感な「絶対値」に近い値と言えます。ただし、位相 CT 画像を再構成するには（吸収 CT 画像用の I0 に相当する）屈折角の「ゼロ点の値」が必要です。屈折角を決める RP(h) の重心の計算式は（ぼくが導出した条件式が示すように）
X 線強度 RP(h) の h 方向の勾配に敏感なので、ゼロ点は同じ測定時刻の空気の屈折角を使うのが望ましい。
それゆえ、位相 CT の場合は異なる測定時刻の値を使う side 法ではなく、I0 の値が多少違っていても同じ測定時刻の値を使う top 法を採用すべきだと考えました。これでわかりますかね？

71 / 206
On Mon, 19 Jun 2017 13:31:12 +0900 Akira TSUCHIYAMA

wrote:> 中野さん>> 早速ありがとうございます。
>> 確かに top 法以外は、ヒストグラム大きく変わっていませんね。
> hybrid 法ではほとんど同じですが、side 法に比べて 170516c/285 と 170516d/066 は> ピーク幅が狭くなっていますが、170513a では反対にピーク幅がやや> 広くなっている（ピーク位置もずれている）ように見えますね。
>> ところで、位相像で top 法に戻すことを考える理由は何でしょうか。
添付ファイル 1706_mean.pdf
2017/6/8 13:04 の E-mail に添付したものと同じものなので省略します。
Date:

Tue, 20 Jun 2017 20:25:16 +0900

From:

Tsukasa NAKANOTo:"TSUCHIYAMA, Akira"Cc:

Kentaro UESUGI, Akihisa TAKEUCHI, Miyake, MATSUNO Junya,megumi matsumoto, 北山晃, Sugimoto Miyama, Yohei IGAMI

Subject: SIXM の屈折量の原点補正法
みなさま、
GSJ/AIST のなかのです。実例を見せないとつちやまさんに納得してもらえない感じなので、6/17 の E-mailで紹介した SIXM の RI 画像用の入射 X 線強度 I0 の推定で使った top、side および hybrid [0,1,2] 法を流用した位相 CT 用の RR 画像の上の X 線屈折量 R の「原点補正」の処理を実行してみました。
RI（raw X-ray intensity）画像に対する吸収 CT 画像の再構成の前処理：
top 法などで RI 画像の画素値 I からＸ線の吸収が０の場合の値 I0 を推定し、吸収 CT の画像再構成に使う投影値 P = Ln[ I0 / I ] を計算する。
RR（raw X-ray refraction）画像に対する位相 CT 画像の再構成の前処理：
top 法などで RR 画像の画素値 R から X 線の屈折が０の場合の値 R0 を推定し、位相 CT の画像再構
成に使う原点補正済みの値 P = R - R0 を計算する。
これらの画像再構成の前処理のうち top 法などによって行う前半の処理内容はまったく同じで、後半は「画像再構成に使う値 P」の計算式が異なるだけです。つまり、ここで行った処理は 6/17 の E-mail で紹介した処理用に書いたプログラムのコードを少しだけ書き換えたもので実行することができました。

72 / 206
これらの後に行う吸収 CT と位相 CT の画像再構成の処理内容には若干の相違があります。特に、位相 CTの画像再構成では「再構成フィルタ」による位相回復処理（Pfeiffer、2007）を行います。
この E-mail に添付した r0e_t+s+h.pdf に５月の SIXM 実験の３測定それぞれの RR 画像の sinograms、top、
side と hybrid [0,1,2] 法のそれぞれを用いて作成した原点補正済みの X 線屈折量の sinograms、および、それらから再構成した位相 CT 画像を示しました。6/17 の E-mail の添付ファイル i0e_t+s+h.pdf に示した吸収 CTの同様な処理結果と比較してみて下さい。また、r0e_t+s+h.pdf のそれぞれの位相 CT 画像の画素値ヒストグ
ラムも調べました。この E-mail に添付した r0e_hg.pdf です。
原点補正済みの X 線屈折量の sinograms と位相 CT 画像の画質、および、その画素値ヒストグラムの形状はtop、side と hybrid [0,1,2] 法のどれを使って得たものもほぼ同じです。ただし、side 法を使って再構成した
測定 170516c の位相 CT 画像に生じている微かなリングアーチファクトは top および hybrid [0,1,2] 法を使った画像には見当たりません。このことは r0e_t+s+h.pdf の画像では確認しづらいので、各画素値の平方根に比例した表示輝度の情報を埋め込んだ以下の画像をこの E-mail に添付しました。
170615c_285_t.gif
top 法を使って再構成した 170516c の layer 285 の位相 CT 画像
170615c_285_s.gif
side 法を使って再構成した 170516c の layer 285 の位相 CT 画像と言うわけで、位相 CT 画像のリングアーチファクトの発生を防げない（現在のプログラムで使っている）side
法は不適当であり、それ以外の手法で得られる結果には大差がないので、RR 画像の X 線屈折量の原点補正を（hybrid [0,1,2] 法よりも単純な）top 法で行うべきと考えた次第です。とり急ぎ、

73 / 206
添付ファイル r0e_t+s+h.pdf

74 / 206
添付ファイル r0e_hg.pdf

75 / 206
添付ファイル 170615c_285_t.gif

添付ファイル 170615c_285_s.gif

76 / 206
Date: Fri, 07 Jul 2017 13:37:51 +0900
From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Miyake, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", 北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: SIXM 用の新しいプログラムのプロトタイプ
みなさま、
GSJ/AIST のなかのです。6/17 と 6/20 の E-mails でそれぞれ紹介した SIXM の「RI（raw intensity）画像用の入射 X 線強度 I0」と「RR（raw refraction）画像用の X 線屈折量の原点の位置 R0」の推定・補正用に書いたプロトタイプのプログラム群のソースコードの類を以下の書庫ファイルにまとめました：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_mf.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_mf.zip
実は、6/17 と 6/20 の E-mails を書いた後に、(a) それらで紹介した RI や RR 画像用の I0 や R0 の値を推定・補正するための hybrid [0-2] 法の改良版（hybrid 3 法）を試しました。
さらに、(b) 「mountain flattening（MF）」と名付けた新しい手法を用いて SIXM の HIS 形式測定データファイ
ルからこれまでのものとは異なる内容の RI と RR 画像を抽出し、それらから top、side と hybrid [03] 法で I0 や R0 を推定して吸収や位相の CT 画像を再構成してみました。
書庫ファイル "sixm_mf.*" に入れたプログラム his2raw は (b) の MF の処理を行わずに従来のものと同内容の RI と RR 画像を作ることもできます。そして、6/17 と 6/20 の E-mails で紹介したほぼすべての処理を書庫ファイルに入れたプログラムだけで実行できるので (b) に関する話は後回しにして、まずは (a) の hybrid
3 法と書庫ファイルに入れたものの説明を行うことにします。
(1) hybrid 3 法について
新しい hybrid 3 法だけでなく 6/17 の E-mail に記した top、side と hybrid [0-2] 法についてもここで改めて紹介します。6/20 の E-mail に書いたように、その後に行う画像再構成用の「投影値」の計算式を除けば RI
画像用の I0 と RR 画像用の R0 に関する推定処理の内容はまったく同じなので、ここでは、サンプル回転角ごとの RI 画像の値を I(x,y) とし、それらのうちの「空気」を撮影した値をもとにしてサンプルを撮影した画素に対する I0 の値を推定する際に使う式だけを以下に記すことにします。
ここで使う「RI 画像上の空気の領域における I(x,y) などの平均値」の記法< I(x,y) >_y_in_TOP：RI 画像の上端の空気の領域（TOP）における I(x,y) の平均値

77 / 206
< I(x,y) >_x_in_LEFT< I(x,y) >_x_in_RIGHT< I(x,y) >_x_in_SIDE
RI 画像の左右端の空気の領域での I(x,y) の平均値。ただし、RI 画像の左端の領域を LEFT、右端を
RIGHT、そして、それら両方を SIDE と表記している。
top 法による I0 の値の推定の式
I0(x) = < I(x,y) >_y_in_TOP
side 法xL = < x >_x_in_LEFT
xR = < x >_x_in_RIGHT
L(y) = < I(x,y) >_x_in_LEFT
R(y) = < I(x,y) >_x_in_RIGHT
I0(x,y) = L(y) + { R(y) - L(y) }・( x - xL ) / ( xR - xL )hybrid [0-3] 法
I0 が以下の式で表されると仮定する。
hybrid [0,1] 法：I0(x,y) = C(y)・T(x)hybrid [2,3] 法：I0(x,y) = { A(y)・x + B(y) }・T(x)ただし、T(x) = < I(x,y) >_y_in_TOP
I0 の表式に含まれている未知の係数値 C(y)、A(y) と B(y) として以下の平均自乗残差 MSD[0-3](y) の値を最小にする値を使う（最小自乗法）。
hybrid 0 法：MSD0(y) = < { C(y) - I(x,y) / T(x) }^2 >_x_in_SIDE
hybrid 1 法：MSD1(y) = < { C(y)・T(x) - I(x,y) }^2 >_x_in_SIDE
hybrid 2 法：MSD2(y) = < { A(y)・x + B(y) - I(x,y) / T(x) }^2 >_x_in_SIDE
hybrid 3 法：MSD3(y) = < { ( A(y)・x + B(y) )・T(x) - I(x,y) }^2 >_x_in_SIDE
なお、hybrid 0 法の MSD0(y) を最小にする C(y) は以下の式になる。
C(y) = < I(x,y) / T(x) >_x_in_SIDE
測定値 I(x,y) を積算して雑音を抑えた T(x) を「独立変数」として使っているため、hybrid 0 より 1 法の方が、また、hybrid 2 より 3 法の方が I0 の推定精度が高いはずです。そして、位置 x に応じた T(x) のスケーリングを行っているため、hybrid [0,1] より [2,3] 法の I0 の方が測定値に適応した推定値になっていることは言うまでもありません。

78 / 206
(2) 書庫ファイル "sixm_mf.*" に入れたプログラムなどについて(2-1) プログラムのインストール
Linux、MacOS X や MinGW の計算機環境なら書庫ファイル "sixm_mf.*" を展開したディレクトリ sixm_mfに移動して "make" と端末入力するだけですべてのプログラムをコンパイルできるはずです。MinGW で得たgcc でコンパイルした 32 bit Windows 用実行ファイル "*.exe" を書庫ファイルに入れておきました。
一部は「とりあえず」のものなので、これらのプログラムすべてを実行ファイル用の既存のディレクトリにコピーするのではなく、ディレクトリ sixm_mf の絶対パスをシステムの実行パスに登録しておく（もしくは、カレントディレクトリを実行パスに登録し、ディレクトリ sixm_mf で処理を行う）のが良いでしょう。
(2-2) 書庫ファイル "sixm_mf.*" に入れたプログラムの概要
今回用意したプログラムを使えば SIXM の測定で得た HIS 形式データファイルをもとにした画像再構成の一連の処理がとりあえず可能です。ただし、[1] サンプルの回転中心を推定するプログラムは用意していません。
[2] １枚のスライス画像を再構成するプログラムしかありません。複数枚のスライス画像の再構成はshell script で実行して下さい（後注参照）。
[3] 画像再構成をマルチスレッドや GPU を使って実行できません。ただし、画像再構成プログラム
sg2tg_f_[a,p] は CBP engine を利用しているので、それをマルチスレッドや GPU 版に取り替えることは可能です。
[4] sg2tg_f_[a,p] は再構成画像を 32 bit 浮動小数点数画素値の TIFF のファイルに書き込みます。プロ
グラム t2t_float を使えばそれを通常の整数画素値の TIFF に変換したり、その画素値ヒストグラムのデータを整数画素値の TIFF に変換せずに取得することができます。
注
こちらの主力計算機（gsjgix）で実行すると、５月の SIXM 実験の測定の吸収と位相 CT 画像のそれぞれを以下の処理時間で再構成できました。
測定 170513a（450 scans・750 views・299 layers）：1000 秒強
170516c（550・600・498）：2900 秒強
170516d（650・375・302）：900 秒強
書庫ファイル "sixm_mf.*" に入れたプログラムの概要は以下の通りです。
以下のプログラムは今後改造して実用に供するもののプロトタイプ
his2rp
SIXM の測定で得た HIS 形式データファイルから暗電流補正済みの１枚の RP（refraction profile）

79 / 206
画像を取り出す。
his2raw
起動パラメータの指定に応じて mountain flattening 処理を行いつつ HIS 形式データファイルから吸収と位相 CT 画像の再構成に必要十分な RI と RR 画像を抽出する。
以下のものはとりあえず書いたプログラム
raw2sg
RI もしくは RR 画像の値を格納した１枚の sinogram を抽出する。
[i,r]0e_t、[i,r]0e_s と [i,r]0e_h_[0-3]
top（_t）、side（_s）および hybrid_[0-3]（_h_[0-3]）法を用いて R[I,R] 画像から [I,R]0 の値を推定し、それを用いて計算した X 線の投影値や「原点補正済みの屈折量」の１枚の sinogramを作成する。
以下のものは今後も使う予定だが、実用的ではないプログラム
sg2tg_f_[a,p]X 線の投影値や屈折量の１枚の sinogram から X 線の吸収（_a）もしくは位相（_p）の１枚のスライスの CT 画像を再構成する。
既存の汎用プログラム
t2t_float
浮動小数点数画素値の TIFF（float-TIFF）のファイルを整数画素値の TIFF（integer-TIFF）のものに変換するプログラム。起動パラメータの指定に応じて画素値ヒストグラムのデータを抽出することもできる。
bin2t_f と t_f2bin
sinogram などを格納したバイナリファイルを float-TIFF ファイルに変換するプログラムとその逆を行うプログラム。
txt2t_f と t_f2txt
テキストデータとして与えた画像ファイルを float-TIFF ファイルに変換するプログラムとその逆を行うプログラム。
オマケの C-shell scripts
rp.csh：his2rp のフロントエンド。
mf.csh：RP 画像に対して mountain flattening 処理を行った画像を作成する。
(2-3) 個々のプログラムの起動法と起動パラメータの説明
his2rp起動法
his2rpHIS{darks}RP_number

RP.tif

起動パラメータ
HIS：HIS 形式測定ファイルのパス名
darks：暗電流画像の枚数。指定省略時は生の RP 画像を抽出する。

80 / 206
RP_number：HIS ファイルの上の RP 画像のシーケンス番号（０～）
RP.tif：RP 画像を格納する float-TIFF のファイルのパス名
rp.csh
起動法
rp.cshlog&HIS

view

scan

{RP.tif}

起動パラメータ
log&HISHIS 形式測定ファイルと SIXM のログファイルのパス名の接頭語。それらのパス名が DIR/a.HISと DIR/a.log なら「DIR/a」を指定すれば良い。
view と scan
抽出したい RP 画像のシーケンス番号に対応している SIXM の回転と並進スキャンのステップ
番号
RP.tif
RP 画像を格納する float-TIFF のファイルのパス名。指定を省略すると、his2rp の起動に必要なHIS ファイルの上の暗電流画像の枚数と RP 画像のシーケンス番号を標準出力に書き出す。
his2raw
起動法
his2raw

HIS

scans

views

darks

{Wm

Ws}

RI/

RR/

>raw.log

起動パラメータ
HIS：HIS 形式測定ファイルのパス名
scans、views と darks
SIXM の並進スキャンおよび回転のステップ数と暗電流画像の枚数。SIXM の測定ログのファイル（a.log）の先頭行に書き込まれているコンマ区切りの１～３番目の値を転記すれば良い。
Wm と Ws
mountain flattening（MF）で使用する「山の半幅（≧ 0）」と「サンプリング領域の幅（≧ 2）」。
これらの値の指定を省略すると MF の処理を行わない。
RI/ と RR/：RI と RR 画像を格納するディレクトリのパス名
raw.log
RI および RR 画像のそれぞれの上の値の範囲を書き込むファイルのパス名。各行にタブコード
区切りで以下の５個の値が並んでいる。
[1] SIXM の回転のステップ番号[2,3] その状態の RI 画像の上の画素値の最小値と最大値[4,5] その状態の RR 画像の上の画素値の最小値と最大値
mf.csh起動法
mf.cshRP.tifWm

Ws

MF.tif

起動パラメータRP.tif：RP 画像の float-TIFF のファイルのパス名

81 / 206
Wm と Ws
mountain flattening（MF）で使用する山の半幅（≧ 0）とサンプリング領域の幅（≧ 2）。これらの値の指定は省略できない。
MF.tif：MF 処理の結果を格納する float-TIFF ファイルのパス名
raw2sg
起動法
raw2sg

raw/

NF

layer

SG.bin

起動パラメータ
raw/：RI もしくは RR 画像が入っているディレクトリのパス名
NF
そのディレクトリの下にあるファイル名を指定する「name file」。通常はハイフン "-" を指定すれば良い。
layer：sinogram を取り出すレイヤー（スライス）の番号
SG.binsinogram のデータを書き込むバイナリファイルの名前。ハイフン "-" を指定するとデータを標
準出力に書き込む。
[i,r]0e_t、[i,r]0e_s と [i,r]0e_h_[0-3]
起動法[i,r]0e_t

R[I,R]/

NF

top

layer

SG.bin[i,r]0e_s

R[I,R]/

NF

left

right

layer

R[I,R]/

NF

top

left

[i,r]0e_h_[0-3]SG.bin
right

layer

SG.bin

起動パラメータR[I,R]/ と NF
R[I,R] 画像のファイルが入っているディレクトリのパス名とその下にあるファイルの指定のための「nameFile」。通常は NF としてハイフン "-" を指定すれば良い。
top：R[I,R] 画像の上端の空気の領域の幅（画素数）
left と right：R[I,R] 画像の左右端の空気の領域の幅（画素数）
layer：sinogram を取り出すレイヤー（スライス）の番号
SG.binsinogram のデータを書き込むバイナリファイルの名前。ハイフン "-" を指定するとデータを標
準出力に書き込む。
sg2tg_f_[a,p]起動法
sg2tg_f_[a,p]SG.bin

dr

r0/dr

ra

TG.tif>TG.log

起動パラメータSG.binsinogram のバイナリデータファイルの名前。ハイフン "-" を指定すると標準入力からデータを読み込む。

82 / 206drsg2tg_f_a に対しては cm 単位の SIXM の並進スキャンのステップ幅を、また、sg2tg_f_p にはSDD / Dp の値を指定する。ただし、SDD：SIXM のサンプルと検出器の間の距離（単位は m）
Dp：RP 画像の横方向の画素の辺長（単位はμm）
このように 10^6 倍異なる単位の SDD と Dp から計算した dr を指定すると、sg2tg_f_p が再構成する RID の単位は 10^-6 になる。
r0/dr：サンプルの回転中心の位置を示す「detector offset」
ra：サンプル回転角の度単位の初期値
TG.tif
再構成画像の LAC もしくは RID の値（CT 値）を書き込む float-TIFF のファイルの名前。
TG.log再構成画像上の CT 値の最小値と最大値をタブコード区切りで並べた１行を書き込むテキスト
ファイルの名前。
t2t_float
see http://www-bl20.spring8.or.jp/~sp8ct/tmp/rhp.pdf#page=3
bin2t_f、t_f2bin、txt2t_f と t_f2txt
see http://www-bl20.spring8.or.jp/~sp8ct/tmp/float.pdf#page=4
長い E-mail になりました。とりあえず以上です。mountain flattening 法と hybrid 3 法の実行例は次便以降のE-mail で紹介します。
Date:

Fri, 07 Jul 2017 18:25:15 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Miyake, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", 北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: SIXM 用の新しいプログラムのプロトタイプの訂正と補足
みなさま、
GSJ/AIST のなかのです。お昼に送った E-mail の訂正と補足です。
(1) 訂正プログラム his2raw と C-shell script "mf.csh" の起動パラメータ Ws（次便以降の E-mail で説明するつもりの mountain flattening 処理用のパラメータ）の説明が間違っていました。下記のように「半値幅」ではなく「半幅」です。

83 / 206誤Wm と Ws
mountain flattening（MF）で使用する山の半値幅（≧ 0）とサンプリング領域の幅（≧ 2）。
正
Wm と Ws
mountain flattening（MF）で使用する「山の半幅（≧ 0）」と「サンプリング領域の幅（≧ 2）」。
(2) 補足書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_mf.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_mf.zipの中に５月の SIXM 実験の３測定（170513a と 170516[c,d]）の吸収および位相 CT 画像を再構成するためのパラメータファイル「測定番号/sixm.csh」が入っています。C-shell 環境で端末から
source

何とかかんとか/測定番号/sixm.cshと入力すれば、以下の C-shel 変数に測定ごとのパラメータ値を設定できます。
$layer：その測定の代表的なスライスの番号$top：RI および RR 画像の上端の空気の領域の幅（画素数）$side
RI および RR 画像の左右端の空気の領域の幅（画素数）。左端と右端の領域それぞれの合計２個の幅が設定されている。
$ps_cm：SIXM の並進スキャンのステップ幅（単位は cm）$sdd_m：サンプルと検出器の間の距離（単位は m）$dp_um：RP 画像の横方向の画素の辺長（単位はμm）$rc：サンプルの回転中心の位置を示す「センター値」$ra：サンプル回転角の度単位の初期値$lac_pv と$rid_pv
吸収と位相 CT 画像のそれぞれを８ビット整数画素値のものに変換する場合に最適な画素値１階調ごとの LAC もしくは RID の増分
これらと先の E-mail で紹介したプログラム群を用いた SIXM の画像再構成の具体的な手順は以下の通りです。
書庫ファイル "sixm_mf.*" の中のプログラムがコンパイル済みだとして、測定 170513a に関する入力例を示します。
# システムの実行パスの設定
set

path=(何とかかんとか/sixm_mf$path)

84 / 206
# ディレクトリの移動
cd

何とかかんとか/sixm_mf/170513a# HIS 形式測定ファイルと測定のログファイルをシンボリックリンクする。
ln-s

何とかかんとか/170513a/a.HIS

ln-s

何とかかんとか/170513a/a.log

.
.

# 注
#

５月の SIXM 実験の測定で得たファイルは計算機 vrm のディレクトリ

#/media/disk/tsukasa/1705/測定番号/ の下に置いてあります。

# RI および RR 画像の作成（面倒なので mountain flattening 処理はなし）
head

-1

a.log

→

451,751,100,1,0

mkdir

RI

his2raw

RR
a.HIS

451

751

100

RI

RR

>raw.log# top 法で I0 の値を推定し、代表的なスライスの sinogram を作成
i02e_t

RI

-

$top

$layerSG.bin# 代表的なスライスの吸収 CT 画像を再構成
sg2tg_f_aSG.bin$ps_cm-$rc$ra

TG.tif# その画像の画素値ヒストグラムを調べる。
t2t_float
とり急ぎ、

TG.tif0$lac_pv

8- >HG.txt>TG.log85 / 206
Date:

Tue, 01 Aug 2017 20:34:03 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa"

Cc:

Miyake, MATSUNO Junya, "TSUCHIYAMA, Akira",
北山, megumi matsumoto, Sugimoto Miyama, 伊神Subject: MF_for_RP_of_SIXM
みなさま、
GSJ/AIST のなかのです。かなり間が空いてしまいましたが、7/7 の E-mails で予告した SIXM の HIS 形式の測定データファイルに格納されている refraction profile（RP）画像に対する「mountain flattening（MF）」の話をします。
(0)
まずは SIXM 実験の開始直後の 2015/8/19 に竹内さんから頂いた E-mail とその添付ファイルを御覧下さい：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=62
そこに書かれているように、
SIXM で撮影した RP 画像には拡大した像の情報を持つ Fresnel Zone Plane（FZP）の１次回折光の X 線強度の値に加えて、測定データとしては使えない非回折光の強度の値が含まれています。
それは RP 画像の左右中央付近に「山（脈）」状に分布しており、その麓に広がる「台地」状の領域の値が SIXMの測定データとして意味を持つ１次回折光の信号です。そして、竹内さんがこの「山」の X 線強度の総和は「台地」の値よりも十分に小さいので、RP 画像から RI（raw X-ray intensity）
や RR（raw X-ray refraction）画像を抽出する際に「山」の部分を除外しなくても問題ないと考えられると言われていたので、ぼくはとりあえずは「山」の存在を無視して RP 画像から RI や RR 画像を抽出するプロ
グラム his2raw_[B,W,F,D] を書きました。
しかしながら、この「山」の存在がどうにも気になるので、RP 画像からそれを識別・除去して RI と RR 画像を抽出することにしました。ただし、その影響を低減するため、麓の「台地」の値を使って除去した「山」の跡地を平坦化します。このような「山」の識別、除去と平坦化の処理を moutain flattening（MF）と呼んでいます。今回は MF を行いつつ RI と RR 画像を抽出するプロトタイプのプログラムを使って５月の SIXM 実験で撮影した吸収と位相 CT 画像を再構成し、それらを MF なしの画像と比較しました。さらに、MF の適用・不適用に伴う RI 画像から計算される X 線投影値の違いについての理論的な考察を行いました。
(1)
MF の処理内容を説明します。この E-mail に添付した 170513a_392_107.pdf を御覧下さい。その最上段に５月の SIXM 実験で AV 貝を撮影した測定 170513a のサンプル回転のステップ番号が 392 の RI と RR 画像を示しました。既存のプログラム his2raw_F はそれらの画像上の横座標値が 107 の縦一列の画素値のそれぞれを 170513a_392_107.pdf の中段の左端に示した暗電流補正済みの RP 画像から以下の式で計算しています：

86 / 206
RI 画像上の画素値：RI(s, l, v) = < RP(p, l, s, v) >_p
RR 画像の値：RR(s, l, v) = < p・RP(p, l, s, v) >_p / RI(s, l, v)
ただし、
s：サンプルの並進ステップの番号（スキャン番号、scan）
l：RP、RI と RR 画像の縦方向の位置（レイヤー番号、layer）
v：サンプルの回転ステップの番号（投影番号、view）
p：RP 画像の横方向の位置< E(p) >_p：式もしくは値 E(p) の座標値 p に関する平均値
注7/7 の E-mails で紹介した C-shell script "rp.csh" を使えば、このような暗電流補正済みの RP 画像を容易に作成できます：
rp.csh170513a/a

392

107

rp_392_107.tif

このような RP 画像からの RI と RR 画像の画素値の計算の処理に組み込んで、以下の手順で MF を行います：[0] MF は s、l と v の値のそれぞれに対する p だけを変えた処理なので、ここではそれに用いる RP 画像の値を RP(p) と書くことにする。
[1] まず RP(p) が最大値をとる p の座標値 p0 を探し出し、そこからの距離が指定した値 Wm 以下の領域（| p - p0 | ≦ Wm）を「山」と見なす。
[2] その両側の指定した幅 Ws の領域（Wm ＜ | p - p0 | ≦ Wm + Ws）に位置する RP(p) の値をサンプリングし、それらを近似する p に関する１次式を最小自乗法によって決定する。
[3] 「山」の領域に位置する RP(p) の値の代わりにこの１次式で推定した値を使って RI と RR 画像の画素値を計算する。
170513a_392_107.pdf の中段の中央と右端に示したものが MF を行った画像です。また、それらの画像の上の縦座標値（layer）が 120 と 242 の横一列のラインプロファイル RP(p) を 170513a_392_107.pdf の最下段に示しました。
注
RP 画像の横列それぞれに対して MF を行うので、その結果を逐一確認するのは困難です。MF を行った１枚の画像を出力する C-shell script "mf.csh" だけを用意しました。170513a_392_107.pdf の中段の中央と右端の画像は左端の画像から以下のようにして作成しました。
mf.cshrp_392_107.tif

55

mf_392_107_5_5.tif

mf.cshrp_392_107.tif

10

10

mf_392_107_10_10.tif(2)
MF を行うためには２個の整数値のパラメータを指定する必要があります：
Wm（≧０）
RP 画像の「山」の半幅（「山」の領域の全幅は２×Wm +１）。

87 / 206
Ws（≧２）「山」の平坦化に使用する p の１次式の決定用の RP(p) の値のサンプリング領域の幅。ただし、この１次式の決定には２個以上の値があれば十分であり、「山」の両側にサンプリング領域を設定する
ので通常は Ws ≧１ならば問題ないが、例外的に「山」が RP 画像の左右の端にあって片側のサンプ
リング領域を設定できない場合に備えて Ws ≧２とした。
問題はこれらにどんな値を指定すれば良いかです。一般的な制約条件？を言うと、合計２×Ws 個のサンプリングした値から２×Wm＋１個の「山」の画素値を推定するので、Ws は Wm 以上の値にすれば良いはずです。
また、これまでに撮影した RP 画像の横画素数はすべて 128 であり、また、SIXM の有意な信号である「台地」の幅はそれよりも狭い 100 程度なので、少なくともその半分の情報を活用したいなら除去する「山」の半幅
Wm は 100 /2 /2 = 25 以下の値でないとダメです。
170513a_392_107.pdf に示した RP 画像に対しては Wm = Ws = 10 を指定した場合に MF をほぼ完全に実現できています。MF が不完全な layer 242 の付近の分裂した「山」は「傾斜した界面付近の空気と試料の両方を透過した X 線の屈折を反映したもの」だと思われますが、その出現頻度は RP 画像全体ではごく僅かなので、そこでの MF が完全になるような（10 よりも大きい）Wm の値を指定しなくても問題ないような気がします。さほど多くのものを試したわけではないですが、測定 170513a の他の RP 画像や５月の他の測定の RP
画像では Wm = Ws = 10 の指定によって MF をほぼ完全に実現できました。
(3)
MF のパラメータ Wm の値の選択に関する補足的な事項を記しておきます。他に使途がないので今まで紹介しませんでしたが、RI や RR 画像の抽出に使用している暗電流補正済みの RP 画像全部の画素値ヒストグラムを作成するプログラム his2hg を書きました。SIXM 用の書庫ファイルに入れてあります。
http://www-bl20.spring8.or.jp/~sp8ct/sixm.taz
http://www-bl20.spring8.or.jp/~sp8ct/sixm.zip
これを使えば、MF と同一の手順で 「山」を除外（mountain triming、MT）した RP 画像の画素値ヒストグ
ラムを得ることができます。
his2hg

a.HIS

Scans

Views

Darks

{L1

L2}

{W}

Min

Max

Bins

> HG.txt

ただし、
a.HIS：HIS 形式測定データファイルのパス名
Scans、Views と Darks
ログファイル a.log の先頭行にコンマ区切りで並んでいる SIXM の並進および回転のステップ数と暗電流画像の枚数。
L1 と L2
調査対象とする RP 画像の縦座標値の範囲。これらの指定を省略すると RP 画像の全領域の画素の値を調べる。

88 / 206
W（≧０）
MT で RP 画像上の「山」と見なす領域の半幅（MF の Wm と同意）。指定を省略すると MT を行わない。
Min と Max：作成するヒストグラムの全体の下端と上端の画素値
Bins
ヒストグラムの bin の総数。ただし、his2hg は Min 以下や Max 以上の値を持つ画素の個数を別個に数え上げるので、出力するヒストグラムの bin の総数は最大で Bins + 2 となる。
HG.txt
各行にタブコード区切りで以下の４個の値が並んでいる画素値ヒストグラムのデータをリダイレクトするテキストファイルのパス名。
[1] ヒストグラムの bin 番号（-1～Bins）[2,3] その bin の下端と上端の浮動小数点数画素値[4] その bin に落ちた RP 画像の画素の総数
his2hg を用いて５月の SIXM 実験の２測定と 2015/12 の１測定で撮影した RP 画像の画素値ヒストグラムを調べました。
測定 170513a：AV 貝を撮影
170513b と 151201l：どちらもサンプルなしで空気を撮影
起動パラメータの値 W を変えて his2hg で得た複数個の画素値ヒストグラムをこの E-mail に添付した
rp_hg+cv.pdf の左段に測定ごとにまとめて示しました。凡例に記したように W として０～10 の範囲の２刻みの値を指定しました。また、それがハイフン "-" のものは MT を行わずに得たヒストグラムです。これらから、５月の２測定の RP 画像では「山」の X 線強度の値が「飽和」していた（正確には、HIS ファイルの上の暗電流補正前の RP 画像の「山」の画素値は保持可能な上限の値 65535 になっていた）ことがわかります。また、2015/12 の測定で使った X 線強度は５月の測定の時の値よりもずっと低かったようです（1/6 程度？）。
これらのヒストグラムのデータを使って RP 画像の画素値の積算値（cumulative value）の分布を調べました。
rp_hg+cv.pdf の右段に示したグラフです。ヒストグラムとして得た値 b の画素の個数を HG(b) とすると、b以下の画素値の積算値の分布 CV(b) は以下の式で計算できます：
CV(b) = Σ_a≦b{ a × HG(a) }つまり、b が画素値の最小値未満なら、CV(b) = 0
b が画素値の最大値以上なら、CV(b) = 画素値の総和（total value、TV）
rp_hg+cv.pdf の右段のグラフでは測定ごとに CV(b) を MT なしの RP 画像の TV の値で正規化してあります。
これらより、W = 10 の MT を行った RP 画像の TV の値はどの測定でも MT なしの場合の 70 %程度になっていることがわかります。MT で除去した「山」の跡地を埋め戻すので、MF を行った場合にはこの TV の比はもっと高い値のはずです。つまり、Wm = 10 の MF を行った RI 画像には RP 画像の X 線強度の大部分（70%以上）の情報が残っていると思われます。

89 / 206
(4)
長々と書きましたが、結局、MF のパラメータ Wm の最適値について現時点では確定的なことを言えません。
SIXM 実験で撮影した RP 画像を吟味して測定ごとに決めるしかないようです。
(5)５月の SIXM 実験で撮影した RP 画像に対して適切だと思われる Wm = Ws = 10 を指定した MF によって RIと RR 画像を作成し、6/17 と 6/20 の E-mails で紹介したものと同じ５月の３測定の吸収と位相 CT 画像の再構成の処理を行いました。その際に「RI もしくは吸収 CT 画像用の入射 X 線強度 I0」と「RR もしくは位相 CT
画像用の X 線屈折量の原点 R0」の推定法として既存の SIXM 用のプログラムで採用している side 法と、7/7の E-mail で計算法を説明しただけの hybrid 3 法を試しました。
注
7/7 の E-mail で説明したように、ここで試した hybrid 3 法は 6/17 と 6/20 の E-mails で実行結果を紹介した hybrid [0-2] 法よりも高精度な手法のはずです（原理的には）。
今回再構成した結果の吸収と位相 CT 画像などをこの E-mail に添付した以下の３個の PDFs にまとめました
ので、じっくりと眺めて下さい。
no_mf.pdf および 10_10.pdf
MF なし（no_mf）および Wm = Ws = 10（10_10）の MF を行って得た RI と RR 画像の sinograms、
X 線投影値と屈折量の sinograms およびそれらから再構成した吸収と位相 CT の１枚のスライスの画像。処理を行った測定とスライス（ layer）の番号、および、図中に埋め込まれている文字列の意
味は 6/17 と 6/20 の E-mails で紹介したものと同じ。
tg.pdf
MF なし（no_mf）および Wm = Ws = 10（10_10）の MF を行って得た RI と RR 画像から再構成した吸収と位相の３次元 CT 画像の代表的な３断面と画素値ヒストグラムの図を並べたもの。既存のSIXM 用の C-shell script "draw_ [a,p].csh" で描画した。なお、レイアウトの都合上、10_10 の MFで得た RI と RR 画像から side 法を使って再構成した CT 画像などは載せなかった。
ぱっと見ではこれらの no_mf と 10_10（の MF）の CT 画像の違いはわからないかもしれません。しかしながら、後述する理論的な？考察による予想通り、これらのうちの吸収 CT 画像には僅かな差異が生じています：[1] 10_10 の MF を行って得た CT 画像の上の estimated LAC は no_mf の画像の値よりも全体的に少しだけ高くなっている。
[2] 10_10 の MF で得た吸収 CT 画像には no_mf の画像にはないスライス面内の物体像の「エッジ強調」が発生している。
これも理論的な考察から予想されることですが、[2] は LAC の値が低い AV 貝を撮影した測定 170513a の吸収 CT 画像で顕著です。また、この E-mail に添付した以下の２個の PDFs にまとめた画素値ヒストグラムの図を見れば [1] を確認することができます。

90 / 206
hg.pdfno_mf.pdf と 10_10.pdf に示した吸収と位相 CT 画像のスライス画像の画素値ヒストグラム
tg_hp.pdf
tg.pdf に示した３次元の吸収と位相 CT 画像全体のヒストグラム(6)
これらの図から明らかなように、SIXM で撮影した RP 画像に対して MF を行うと従来の MF なしで得たものとは異なった吸収および位相 CT 画像になります。このような MF によって生じる吸収 CT 画像の違いについて理論的？に考察してみました。この E-mail に添付した mf_ri.pdf を御覧下さい。
ここでは単純な「凸」の形状をしている RP（画像の横一列）について考えます。その上部の出っ張りが「山」
で下部が「台地」です。
「山」の幅を１（単位の値）としてその麓からの高さを A、「台地」の高さと幅をそれぞれ B と C とします。また、前記の竹内さんの E-mail にも記されているように、以下を仮定します：
A<< B・CFZP の非回折光を表す「山」の強度の和（面積）は SIXM の信号である１次回折光を表す「台地」の強度の和（面積）に比べて非常に小さい。

この時、RP（画像）から得た RI 画像の画素値 I は下式で表されるはずです：
完全な MF を実現できた場合：I = B・C
MF なしの RP を使った場合：I = A + B・C
そして、先の仮定 A << B・C を使うと、MF の適用・不適用に伴う「空気と試料のそれぞれを撮影した RI 画
像の画素値 I から計算される X 線投影値」の差を以下の式で表すことができます：P - PMF = A0 / (B0・C0) - A1 / (B1・C1)
ただし、
A0、B0、C0：空気を撮影した RP の A、B、C の値
A1、B1、C1：試料を撮影した RP の A、B、C の値
P と PMF
MF なしと MF を実行して得た I のそれぞれから計算した投影値
さらに、空気と試料を撮影した RP の「台地」の幅は概ね同じ値なので、それを C0 = C1 = C とした下式が成り立つと思われます：P - PMF = ( A0 / B0 - A1 / B1 ) / C(7)
さて、FZP の非回折光と１次回折光はモノクロメータから同時に出た光が試料の概ね同じ位置を透過したものですから、通常はそれらの強度の比は一定値になると考えられます。つまり、「山」の強度の値 A + B と「台地」の高さ B の比は空気と試料を撮影した RP 画像のどちらもで概ね同じ値になるはずです：(A0 + B0 ) / B0 = ( A1 + B1 ) / B1→

A0 / B0 = A1 / B1

そして、これが成り立っている場合には MF の適用・不適用に伴う X 線投影値の違いは生じないはずです。
P - PMF = ( A0 / B0 - A1 / B1 ) / C = 0→

P = PMF91 / 206
前記の E-mail で竹内さんが言われているのはこのことではないかと思われます。
ところが、先に紹介したように５月の SIXM 実験の測定では「山」の強度が飽和しているため、「山」と「台地」の強度の比は一定値にはなっていないはずです。このような「山」の飽和した強度の値を D とすると、
A0 + B0 = A1 + B1 = D→

P - PMF = (D/C)・( 1 / B0 - 1 / B1 )そして、空気を透過した X 線の強度 B0 は試料を透過した X 線の強度 B1 よりも大きい値なので、以下の式が常に成り立つはずです。
P - PMF = (D/C)・( 1 / B0 - 1 / B1 ) ≦ 0→

P ≦ PMFと言う訳で MF を行って得た X 線投影値は MF なしの値よりも大きくなります。これを単純に解釈すると、
MF を行って得た吸収 CT 画像の estimated LAC は MF なしの画像の値よりも大きくなっているはずです。先に示した hg.pdf や tg_hg.pdf の画素値ヒストグラムでは確かにそうなっています。しかしながら、投影値はLAC と透過 X 線の光路長との積なので、P ≦ PMF によって発生する現象はもう少し複雑です。結論だけを言うと MF を行って得た吸収 CT 画像には白色光を用いた CT 画像の場合と同様な「光線硬化」が発生し、その上の物体像の外周部は「エッジ強調」を行ったような相対的に高い estimated LAC の値に再構成されているはずです。ただし、これは MF なしで得た吸収 CT 画像を基準とした話です。MF を行った画像を基準とす
れば従来の MF なしの CT 画像には物体像の外周部の値が鈍っている「光線軟化」が生じていると言う方が良
いかもしれません。
いずれにせよ、MF なしのものに比べて MF を行って得た吸収 CT 画像の物体像の方がエッジが強調されて明瞭になっているはずです。そして、X 線投影値の差 P - PMF は１以下の「X 線強度の比の値」A0 / (B0・C0)と A1 / (B1・C1）の差に等しいので、この現象は P もしくは PMF が小さい低い値の LAC の試料で顕著なはずです。前述の MF を行って再構成した測定 170513a の AV 貝の吸収 CT 画像がその実例です。
(8)以上のように SIXM 実験で撮影した RP 画像に対する MF（mountain flattening）処理はそれなりに有効です。
ただし、先にもクドクド書いたように、それに指定するパラメータの値 Wm と Ws をどうするかが問題です。
7/7 の E-mail で紹介したプロトタイプのように MF をオプションで実行できるプログラムがベストかな？
長い E-mail になりました。とりあえず以上です。

92 / 206
添付ファイル 170513a_392_107.pdf

添付ファイル rp_hg+cv.pdf

93 / 206
添付ファイル no_mf.pdf

94 / 206
添付ファイル 10_10.pdf

95 / 206
添付ファイル tg.pdf（１ページ目；測定 170513a）

添付ファイル tg.pdf（２ページ目；測定 170516c）

96 / 206
添付ファイル tg.pdf（３ページ目；測定 170516d）

97 / 206
添付ファイル hg.pdf

添付ファイル tg_hg.pdf

98 / 206
添付ファイル mf_ri.pdf

99 / 206
Date:

2017/09/14 15:34:28

From:

Tsukasa NAKANOTo:"TSUCHIYAMA, Akira", MATSUNO Junya , Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa"

Cc:

Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: SIXM_mails
みなさま、
GSJ/AIST のなかのです。これまでに差し上げた SIXM 関連のことを書いた E-mails をまとめました。多量なので３つの PDFs に分けました：2015 年に差し上げた E-mails（以前に紹介済みのもの+α）
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf
2016 年
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2016.pdf
2017 年
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2017.pdf
どうぞ御覧下さい。とり急ぎ、
Date:Wed, 11 Oct 2017 10:34:47 +0900

From:

Tsukasa NAKANOTo:"TSUCHIYAMA, Akira", MATSUNO Junya, Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa"

Cc:

Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: SIXM_これだけは、...
みなさま、
GSJ/AIST のなかのです。先日紹介した SIXM 関連の E-mails のうち、こちらの人に SIXM のことを説明するために選び出した３×２ページを並べた sixm.pdf をこの E-mail に添付します。どうぞ御覧下さい。
横置き A4 の１ページ目
SIXM の吸収と位相 CT 画像の上の値（estimated LAC と RID）を決める MAC と MRID に関することが書いてある。
ページの左の内容を記した E-mail：http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=69
右：http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2016.pdf#page=187

100 / 206
２ページ目
SIXM ではホログラム的な手法で位相シフトを測定していない。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=23
３ページ目
SIXM の測定およびそのデータを用いた CT 処理の補足的事項。
ページの左竹内さんから指摘されたように試料と検出器の間にある FZP で micro beam を拡大しているので、このページの下部の内容は間違っています。SIXM で測定する RP 画像を示している上部の図だけを御覧下さい。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=105
右SIXM の吸収と位相 CT 画像の再構成の処理の違いは、細部を除けば、ここで説明している「位相回復フィルタ」だけです。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=24
とり急ぎ、
添付ファイル sixm.pdf
削除しました（縮小して掲載すると汚くなるので、上記のオリジナルの E-mails を御覧下さい）。

101 / 206
以下の 2017/4/4 の E-mail は後続する 2017/10/23 の E-mail に添付してあった４通の E-mails の最後（４通目）のものです。時系列順に掲載します。
Date:

2017/04/04 16:15:42

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, MATSUNO Junya

Cc:

Masayuki Uesugi, "TSUCHIYAMA, Akira"Subject: imagej_open_ITEX
うえすぎさま、
まつのさま、
GSJ/AIST のなかのです。SPring-8 の実験で使っている浜ホトのソフトウェア HiPic が出力する ITEX 形式の
画像（"*.img"）
を ImageJ で読み込むための plug-in を書きました。その JAVA のソースコード "open_ITEX.java"（単純なテキストファイルです）をこの E-mail に添付します。ImageJ で以下のようにすればインストールできます：
ImageJ を起動
Plugins → install で open_ITEX.java を選択
コンパイル後の保存場所としてディレクトリ「Input-Output」を選択
ただし、これだけではファイルの drag & drop で ITEX 形式のファイル "*.img" を開くことはできません。
ImageJ の plugins 用のディレクトリ plugins/Input-Output/ の下にある画像形式の判定用の JAVA のコード
HandleExtraFileTypes.java を書き換える必要があります。その上の適切な場所（後述）に以下の１行を埋め込むだけです：if (name.endsWith(".img") && buf[0]==73 && buf[1]==77) return tryPlugIn("Open_ITEX", path);
ぼくの手元の ImageJ の HandleExtraFileTypes.java をこの E-mail に添付しましたが、これはそちらの ImageJ（Fiji？）で使えるかどうかわかりません。そちらで使っている ImageJ や Fiji の HandleExtraFileTypes.javaを眺めて「拡張子 ".img" のファイルを処理しているコード」を探し出し、それよりも前の適当な場所に上記の行を埋め込む方が良いと思います。
ImageJ の plugins にはファイル名の拡張子 ".img" だけで画像形式を決めてしまうもの（Nifti_Reader）
があるので、そのチェックの前に ITEX 形式画像かどうかをチェックしないとダメです。なお、ITEX 形式の画像ファイルのチェックではファイル名の拡張子だけでなくファイルの先頭に埋め込まれている ITEX
形式に固有の「マジックナンバー」も調べます。

102 / 206
この E-mail に添付した HandleExtraFileTypes.java では 116 行目に文字列「.img」がありました。その部分（コメント行でした）の直前に前記の行を埋め込みました。
HandleExtraFileTypes.java を書き換えた後、前記の open_ITEX.java の場合と同様にしてそれを ImageJ のディレクトリ plugins/Input-Output/ の下にインストールして下さい。とり急ぎ、
添付ファイル Open_ITEX.java と HandleExtraFileTypes.java
削除しました（後述するように SPring-8 の FTP サイトにこれらの最新版が置いてあります）。
以下の 2017/4/7 の E-mail は後続する 2017/10/23 の E-mail に添付してあった４通の E-mails の３通目のものです。時系列順に掲載します。
Date:Fri, 07 Apr 2017 15:29:00 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, MATSUNO Junya

Cc:

Masayuki Uesugi, "TSUCHIYAMA, Akira"Subject: Fw: imagej_open_ITEX
うえすぎさま、
まつのさま、
なかのです。4/4 の E-mail で紹介した ImageJ で ITEX 形式画像を読み込むための plug-in「Open_ITEX.java」
を書き換えましたので、それを送付します。ITEX 画像のファイルに埋め込まれているコメントを「Image →Show Info」で閲覧できるようにしました。なお、その Window（Info Window）で「File → Save As」とす
れば、コメントを含む画像の情報をテキストファイルに書き込むことができます。昨年 11 月の SPring-8 実験で撮った測定 161121d の画像 q0002.img の情報を書き込んだファイル 161121d_q0002.txt をこの E-mail に添付します。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/oct.pdf#page=48
とり急ぎ、
添付ファイル Open_ITEX.java
削除しました（後述するように SPring-8 の FTP サイトに最新版が置いてあります）。
添付ファイル 161121d_q0002.txt
削除しました（上記の文書ファイル oct.pdf の 48 ページに掲載してあります）。

103 / 206
以下の 2017/4/8 の E-mail は後続する 2017/10/23 の E-mail に添付してあった４通の E-mails の２通目のものです。時系列順に掲載します。
Date:

2017/04/08 13:12:36

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, MATSUNO Junya

Cc:

Masayuki Uesugi, "TSUCHIYAMA, Akira"Subject: Re: imagej_open_ITEX
うえすぎさま、
まつのさま、
なかのです。何度もすみません。ImageJ で ITEX 形式の画像を読み込むための plug-in "Open_ITEX" を修正（エラーチェックを強化）しました。そして、今後も書き換えるかもしれないので、そのコードを SPring-8 の
FTP サイトに置くことにしました。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/Open_ITEX.java.txt
ファイル名の拡張子 ".txt" を取り除いてお使い下さい。なお、そのコードの後に JAVA のコメントとしてImageJ の 画 像 形 式 判 定 用 plug-in 「 ImageJ/plugins/Input-Output/HandleExtraFileTypes.java 」 へ のOpen_ITEX の設定の仕方を埋め込んでおきました。とり急ぎ、
以下の 2017/6/23 の E-mail は後続する 2017/10/23 の E-mail に添付してあった４通の E-mails の最初（１通目）のものです。時系列順に掲載します。
Date:

2017/06/23 19:49:11

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Masayuki Uesugi

Subject: ImageJ_macros_rhp.txt
うえすぎさま、
まつのさま、
GSJ/AIST のなかのです。４月の E-mails（この後に貼付けました）で紹介した HiPic で使っている ITEX 形式の画像を読み込むための plug-in "Open_ITEX" を用いて、SPring-8 の通常の X 線 CT 実験で得た測定画像のシーケンス（dark.img とログファイル output.log に記録されている順の "q*img"）を「image stack」としてまとめて読み込み表示する ImageJ の「マクロ言語」のコード "rhp.txt" を書きました。
http://www-bl20.spring8.or.jp/sp8ct/tmp/IJ_m_rhp.txt

104 / 206
このテキストファイルを（ファイル名を “rhp.txt” に改名して）既存の ImageJ のマクロ言語のスクリプトのためのディレクトリ "ImageJ/macros/" の下にコピーしておけば、以下のような端末からの入力で実行できます（ImageJ のメニューからも実行できると思いますが、その仕方をぼくは知りません）。
X 線 CT の測定データ一式が入っているディレクトリを選択する場合
ImageJ-macrorhp

測定データ一式が入っているディレクトリ（HiPicDir）を指定する場合
ImageJ-macrorhp

HiPicDir

なお、image stack にまとめた個々の画像のファイル名を表示する方法がわからなかったので、それ（シーケ
ンス番号ごとの画像のファイル名）を output.log の残りの情報とともに Log ウィンドウに表示するようにしてあります。
また、rhp.txt を書く前に「指定したディレクトリの下にある一連の TIFF などの画像を image stack にまとめるマクロ言語のコード is.txt」を書きました（実質的には１行だけなので、コードと言うほどのものでは、…）。
http://www-bl20.spring8.or.jp/sp8ct/tmp/IJ_m_is.txt
is.txt のインストール法と起動法は rhp.txt のものとまったく同じです。こちらも御利用下さい。とり急ぎ、
Date:Mon, 23 Oct 2017 20:27:47 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: ImageJ_macros
まつのさま、
GSJ/AIST のなかのです。来月の SIXM 実験用に RI（raw intensity）もしくは RR（raw refraction）画像上の空気の領域の選択に有用な ImageJ の「マクロ」のコード tlrb（ファイル名 tlrb.txt）などを書きました。そちらの Linux 機の上でのそれらの実行を試してもらえますか？
(0) Fiji は起動に時間がかかるので NG
ぼくが書いた ImageJ のマクロは Linux などの端末から起動するようになっているので、起動に時間がかかる
Fiji ではなく ImageJ を使います。

105 / 206(1) ImageJ のインストール
そちらの Linux 機に ImageJ をインストール済みならそれを再度インストールする必要はありません。インス
トールしていない場合は https://imagej.nih.gov/ij/docs/install/linux.html を参考に（Linux 用の）ImageJ の書庫ファイルを適当な場所に展開して下さい。
重要なことは ImageJ の書庫ファイルを展開して得たディレクトリ「ImageJ」の場所（パス）です。以下ではそれを「~/Desktop/ImageJ/」だとします。
(2) ImageJ のランチャー用の C-shell script などのインストール
ディレクトリ~/Desktop/ImageJ/ には ImageJ を X-window の端末から起動するためのランチャー・プログ
ラム「ImageJ」が入っていますが、それを使った起動パラメータ付きのマクロの実行にはちょっとした問題（説明はまた今度）があるので、その代わりとなる C-shell script「ImageJ.csh」を書きました：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/ImageJ.csh.txt
このテキストファイルの名前を「ImageJ.csh」に変えて~/Desktop/ImageJ/の下にコピーし、端末から「実行可能（executable）」のファイル属性を付加して下さい：
cd~/Desktop/ImageJ

wget
chmod

-O
+x

ImageJ.csh

http://www-bl20.spring8.or.jp/\~sp8ct/tmp/ImageJ.csh.txt

ImageJ.csh

ImageJ.csh は https://imagej.nih.gov/ij/docs/install/linux.html#options に記されているもののうち「-ijpath
path」以外の端末からのオプション指定を受け付けます。つまり、例えば、端末から~/Desktop/ImageJ/ImageJ.csh"file-name"と入力すれば ImageJ を起動して名前が "file-name" のファイルを開きます。
長い文字列「~/Desktop/ImageJ/ImageJ.csh」を毎回入力するのは不便なので、その「別名（alias）」の短い文字列（例えば、「IJ」）を login shell の設定ファイル（の最後）に登録しておくのが良いでしょう：
login shell が bash の場合
設定ファイル~/.bashrc

別名の設定行

alias

IJ=~/Desktop/ImageJ/ImageJ.csh

csh もしくは tcsh の場合
設定ファイル~/.cshrc

別名の設定行alias

IJ'~/Desktop/ImageJ/ImageJ.csh\!*'

106 / 206
以下ではこのようにして設定した別名「IJ」を使います。先の端末からの入力はIJ"file-name"となります。
(3) ImageJ のマクロのコード
来月の SIXM 実験で使う予定の ImageJ のマクロは tlrb だけですが、そのもとになったマクロ bb とそのまたもとになった 6/23 の E-mail（後に貼り付けました）で紹介した is の改造版のコードもここで紹介します：
ishttp://www-bl20.spring8.or.jp/~sp8ct/tmp/IJ_m_is.txtbb

http://www-bl20.spring8.or.jp/~sp8ct/tmp/IJ_m_bb.txt

tlrb

http://www-bl20.spring8.or.jp/~sp8ct/tmp/IJ_m_tlrb.txt

こ れ ら の フ ァ イ ル 「 IJ_m_*.txt 」 の そ れ ぞ れ を is.txt 、 bb.txt と tlrb.txt に 改 名 し て デ ィ レ ク ト リ「~/Desktop/ImageJ/macros/」の下に格納しておけば、ディレクトリ名や拡張子なしの文字列 is、bb と tlrbの指定により ImageJ はそれらをマクロのコードのファイルだと認識してくれます：
cd~/Desktop/ImageJ/macros

wget

-O

is.txthttp://www-bl20.spring8.or.jp/\~sp8ct/tmp/IJ_m_is.txt

wget

-O

bb.txthttp://www-bl20.spring8.or.jp/\~sp8ct/tmp/IJ_m_bb.txt

wget

-O

tlrb.txt

http://www-bl20.spring8.or.jp/\~sp8ct/tmp/IJ_m_tlrb.txt

これらのマクロの機能と起動法は以下の通りです。
マクロ is機能
指定したディレクトリの下にある一連のスライス画像を「Image Sequence 」 と し て 読 み 込 み 、「image stack」にまとめて表示する。
起動法
IJ-macrois{directory}{startincrement}

起動パラメータ
directory
一連のスライス画像が入っているディレクトリの名前。指定を省略するとディレクトリ選択用のウィンドウが開く。
start と increment
指定したディレクトリの下にある処理対象とする最初のスライス画像の番号（１～）とその増分（１～）
。これらの値の指定を省略すると start = increment = 1 となり、指定したディレクトリ
の下にあるスライス画像すべてを処理対象とする。

107 / 206bb
機能
is と同様にして画像群を表示した後に「rectangle selection tool」を起動する。マウスの左ボタンのドラッグなどによって選択した画像の上の長方形領域（bounding box）の画素幅単位の情報
x 座標値の最小・最大値と x 方向の幅
y 座標値の最小・最大値と y 方向の幅をマウス右ボタンの押し下げによって表示する。
起動法
IJ-macrobb

directory{startincrement}

{x

y

width

height}

起動パラメータ
directory
is のものと同意だが、省略不可。
start と increment
is のものと同意。
x、y、width と heightbounding box の x と y 座標値の最小値および x と y 方向の幅。これらの指定により以前に得たbounding box の位置を確認できる。
tlrb
機能
bb とまったく同じ処理を行うが、マウスの右ボタンの押し下げにより SIXM の CT 画像の再構成で必要な「RI や RR 画像の上の物体像の領域を示す bounding box」の上部（top）にある空気の領域の y 方向の幅
左側（left）にある空気の領域の x 方向の幅
右側（right）にある空気の領域の x 方向の幅
下端（bottom）の y 座標値（これは SIXM 的にはオマケの情報です）のそれぞれの画素幅単位の値を表示する。
起動法
IJ-macrotlrb

directory{startincrement}

{top

left

right

bottom}

起動パラメータ
directory
bb のものと同意。省略不可。
start と increment
is や bb のものと同意。
top、left、right と bottom
bounding box の確認用の既知の top、left、right と bottom の値。
マクロ bb と tlrb でマウス右ボタンを押し下げると選択した bounding box に関する情報の下に「record on
Log window ?」という質問とその回答用の以下の３つのボタンが表示されます：

108 / 206
Yes
表示されている bounding box の情報を「Log」ウィンドウに記録した後に bounding box の選択の処理を続行する。
No
bounding box の情報を Log ウィンドウに記録せずに処理を続行する。
Cancelマクロ bb もしくは tlrb の処理を終了する。
Log ウィンドウに記録した文字列はマウスによる通常の copy and paste が可能です。また、その上部の「File」
メニューにより Log ウィンドウの内容を任意のファイルに書き込むこともできます。
実は、bounding box の情報の管理は ImageJ の「ROI manager（tool）」にまかせた方が良いのですが、そのやり方をぼくは知らない。
なお、上記の Cancel ボタンをクリックしない限り ImageJ を終了できません。マクロ bb と tlrb の処理が終了
した後はマウス右ボタンの押し下げによって ImageJ が設定した処理メニューが表示されるはずです。
とりあえず以上です。これらの C-shell script やマクロをそちらの Linux 機で実行できない場合は連絡して下さい。よろしくお願いします。とり急ぎ、

109 / 206
Date:Fri, 27 Oct 2017 16:43:16 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: 6mct
まつのさま、
みなさま、
GSJ/AIST のなかのです。来月の実験の場で使ってもらいたい SIXM 用の新しいプログラムのコードなどを入れた書庫ファイルの準備ができました：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zip
これら（同内容です）に入っているものだけで SIXM の実験の場で行ってきた CT 画像の再構成などの一連の処理を行えます。そちらの Linux 機の上でそれを試してもらえますか？ 具体的には、下記の (5) の C-shell
script の実行です。
(1) 新しいプログラムの実行ファイルのコンパイル
そちらの Linux 機の適当な場所に上記の書庫ファイル（の一方）をダウンロード・展開し、作成されたディレ
クトリ「6mct」に移動した後に「make」して下さい。
cd

適当な場所

wget

http://www-bl20.spring8.or.jp/\~sp8ct/tmp/6mct.taz

tar

xzf

6mct.tazrm

6mct.tazcd

6mct# 今後も随時更新するので書庫ファイルを残さないで下さい。

make
この make の実行により GNU C Compiler（gcc）でプログラムの実行ファイルを作成します。この処理を IntelC Compiler（icc）で行いたいのなら、ファイル「Makefile」の先頭付近の「CC =」で始まっている行を適当に書き換えた後に make して下さい。コマンド make の起動行でそれを指定してもかまいません：
make

CC='icc-fast'# 処理速度最優先オプションを指定する場合

110 / 206
また、ディレクトリ「6mct/cuda」の下に CUDA GPU 用の４個の画像再構成プログラムのコードなどが入っています。ただし、convolution back-projection 法によって画像再構成の計算処理を行うサブルーチン（CBP
engine）だけが異なる、外見上はまったく同じ動作をする CPU 用のプログラム「*_t」があるので、GPU 用のプログラム「*_g」のコンパイルは（とりあえずは）必須ではありません。
NVIDIA GeForce GTX 750 Ti を搭載している Spring-8 の計算機 vrm の上では以下の入力で GPU 用の４個の実行ファイルを準備できます。
cd

cuda

make
mv

*_g

..

# GPU 用の実行ファイルをディレクトリ 6mct/ に移動しておく。

しかしながら、vrm のものと異なる compute capability の GPU を使う場合や、CUDA tool kit のインストー
ル場所が異なる場合は Makefile（6mct/cuda/Makefile）の上の以下の２行の書き換えが必要です：
NVCC =nvcc-O3-arch=sm_50# NVIDIA GeForce GTX 750 Ti の compute capability は 5.0

CUDA =/usr/local/cuda# vrm では tool kit 7.5 のディレクトリ /usr/local/cuda-7.5 を# /usr/local/cuda にシンボリック・リンクしている。

(2) 新しいプログラムの実行のための shell の設定ファイルの書き換え
ディレクトリ 6mct/の中のプログラム（実行可能な属性を付けた C-shell script もあります）を実行ファイル
用のディレクトリに移動するのではなく、login shell の設定ファイルで 6mct/ のフルパスを実行パスに登録して下さい。
login shell が bash の場合
設定ファイル~/.bashrc

実行パスの設定行

PATH=適当な場所/6mct:$PATH

csh もしくは tcsh の場合
設定ファイル~/.cshrc

実行パスの設定行

set

path=(適当な場所/6mct$path)

なお、後述する「新しいプログラムを使った SIXM の処理のデモ用の C-shell script」を実行するなら、"~/.cshrc"の上の実行パスの設定が必要です。また、その場合には 10/23 の E-mail で紹介した ImageJ のランチャーの
別名「IJ」も "~/.cshrc" に設定しておいて下さい。
ImageJ 用のディレクトリが「~/Desktop/ImageJ」の場合
alias

IJ

'~/Desktop/ImageJ/ImageJ.csh\!*'

111 / 206(3) 新しいプログラムの実行時に必要な Linux 用ツール
ディレクトリ 6mct/ の中の３個の C-shell scripts は CT 画像の画素値ヒストグラムのグラフの描画に gnuplotを使うので、事前にそれ（ver. 4.2 以降の gnuplot）をインストールしておいて下さい。また、それらのグラフの PostScript ファイルや新しいプログラムで作成した TIFF 画像の表示用のツールも必要です。PostScript
viewer は Linux で一般的な evince が良いでしょう。また、画像 viewer は ImageJ でも良いですが、その起動には時間がかかるので、ぼくは以前に紹介した改造版の xv を使っています：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/xv-hipic.pdf
なお、後述する「新しいプログラムを使った SIXM の処理のデモ用の C-shell script」は evince と xv を使うようになっています。
(4) 新しいプログラムを使った SIXM の一連の処理のデモ
ディレクトリ 6mct/ の中のプログラム群の使用法の説明書は現在作成中です。また、SIXM 実験の場で行う
CT 画像の再構成などの一連の処理の「レシピ」もまだ書いていません。ここでは、レシピに載せる例として実行した「新しいプログラムを使った SIXM の画像再構成などの一連の処理」を紹介します。
この E-mail に添付した 170516c.txt に端末から実際に入力したデータなどが記されています。５月に行った実験で「橋口サンプル」を撮影した測定 170516c の SIXM の測定データを使って以下の一連の処理を実行しました：[1] 測定データのコピー[2] 測定データのチェックなど[3] RI（raw intensity）と RR（raw refraction）画像の作成[4] R[I,R] 画像の画素値のビット数を小さくする（オプション）[5] R[I,R] 画像上のサンプル像の bounding box の調査[6] 各スライスの投影値や屈折量の平均値の「時間変動」のチェック[7] サンプル回転軸の位置の推定[8] サンプル回転軸の位置を変えた画像再構成のテスト[9] 吸収（tg_a）と位相 CT 画像（tg_p）のそれぞれの再構成[10,11]
吸収と位相 CT 画像のそれぞれの画素値ヒストグラムの調査やそれらのピークの情報に基づいた８ビット画素値の画像（byte 画像）の作成[12] 吸収と位相 CT 画像のそれぞれの「browse 画像」の作成（オマケ）170516c.txt の「"#" から行末まで」は「コメント」で、それら以外の文字列を端末から入力すれば OK です。

112 / 206
３個の "#" で始まる行に上記の [1]～[12]を記しました（後述する処理により端末に出力するため、それらを引用符「'」で囲んでいます）。また、２個の "#" で始まるものは実行したプログラムの出力行です。
そして、それら以外の個数の "#" で始まる行は、その前後で実行したプログラムの「代替案」や、その周囲の処理に関する「メモ」です。
170516c.txt ではカレント・ディレクトリにディレクトリ 170516c/ を作成し、その中に処理結果のファイルなどを格納します。その総量は 2.5 GB 程度なので、大容量メモリ搭載の Linux 機ならディレクトリ/dev/shm/（メモリ・ディスク）に移動（change directory）した後に 170516c.txt の処理を実行すれば良いと思います。
また、処理対象の SIXM の測定 170513c のデータファイル（a.log と a.HIS）の置き場所として 170516c.txt の
８～９行目にこちらで使っている計算機 gsjgix の上のディレクトリの名前 /work1/tsukasa/1705/170516c/を埋め込んであるので、そちらで実行する場合はこれを適宜置換して下さい。
長くなるので、この E-mail では [1]～[12]の処理や実行するプログラムのそれぞれの説明は省略します。
(5) 170516c.txt の実行
注
以下の処理の例では事前にテキストファイル 170516c.txt を/dev/shm/ にコピー済みだとします。
テキストファイル 170516c.txt は C-shell script として実行できます。前記のこちらの計算機 gsjgix の上なら以下の入力を行えば OK です：
cd/dev/shmcsh170516c.txt

しかしながら、前述のように gsjgix とは異なる場所に SIXM の測定データファイルを置いてある計算機ではそのディレクトリ名の置き換えが必要です。例えば、SPring-8 の計算機 vrm では測定 170516c のデータファ
イルはディレクトリ /media/disk/tsukasa/1705/170516c/ に置いてあるので、以下のように入力してそれに置換して実行すれば良いです：
cd/dev/shmseds@/work1/@/media/disk/@g170516c.txt|

csh# コマンド sed を使って 170516c.txt の上の文字列 "/work1/" を# "/media/disk/" に置換した結果を C-shell に流し込んで実行する。

113 / 206
このようにして 170516c.txt を実行すると、その上の２個の "#" で始まる行に示したプログラムからの出力を表示するだけなので、今どこを実行しているのかわからないです。それを補うため、３個の "#" で始まる行に記した [1]～[12] の説明用の文字列を端末に表示させるようにすると良いです：
cd/dev/shm

sed's@^### @echo @g'

170516c.txt|

csh# sed を使って 170517c.txt の行頭の "### " を "echo " に置換。
# コマンド echo と出力する文字列の間に空白文字が必要なことに注意。
170516c.txt では ImageJ（IJ）、gnuplot（C-shell script "plot_x11.csh"）、evince と xv のそれぞれによる X11
window の上での画像やグラフの表示を行います。gnuplot によるものを除いてこれらのコマンドを人手で終了しないと 170511.txt の処理が中断するので、処理のすべてを人手をかけずに「全自動」で実行できません。
170516c.txt から "IJ"、"plot_x11.csh"、"evince" と "xv" のそれぞれの文字列が含まれている行を削除すればそれを実現できます。
cd
grep/dev/shm
-v

-e

'IJ '

-e 'plot_x11.csh '-e'evince '-e'xv ' 170516c.txt|

csh# オプション指定 "-v" を付けたコマンド grep によって行を削除。
# 削除の対象となる文字列の後に念のために空白文字を付加した。
これらの手法を組み合わせて 170516c.txt を「全自動」で実行しました。
計算機 gsjgix の上での実行
cd/dev/shm

sed's@^### @echo @g'

grep

-v

-e

'IJ '

170516c.txt|\-e 'plot_x11.csh '-e'evince '

-e

'xv '

|

csh

vrm
cd

/dev/shmsed-es@/work1/@/media/disk/@g-e's@^### @echo @g'

170516c.txt

grep

-v

-e

-e

'evince '

csh

'IJ '

-e 'plot_x11.csh '

-e

'xv '

このようにして実行した 170516c.txt の総処理時間は以下の通りでした。
gsjgix（Xeon E5-2687W / 8 real cores / 3.1 GHz / 128 GB memory）
253 ～ 254 秒（== ４分強）
vrm（Xeon E5-2609 v2 / 4 real cores / 2.5 GHz / 64 GB memory）
487 ～ 560 秒（== ８～ 10 分）||\

114 / 206
なお、どちらの計算機でも処理時間の半分程度は前記の [3] の R[I,R] 画像の抽出処理に費やされていました。
とりあえず、以上です。そちらの Linux 機上での 170516c.txt の実行に問題があったら連絡して下さい。よろしくお願いします。とり急ぎ、
添付ファイル 170516c.txt
この E-mail の後に修正したので削除しました。
後に載せた 11/9 の E-mail に添付ファイルを御覧下さい。
Date:Mon, 30 Oct 2017 18:25:08 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: 6mct_modified
まつのさま、
みなさま、
GSJ/AIST のなかのです。10/27 の E-mail で紹介した書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zipに入れた４個の C-shell scripts（rp.csh、t2t_f.csh と bar_[l,g]s.csh）を少しだけ書き換えました。書庫ファ
イルは修正済みです。そちらの Linux 機に 6mct/ を展開済みなら、以下のようにして既存の C-shell scriptsのすべてを修正済みの書庫ファイルの中のもので上書きしてしまえば良いです：
cd「6mct/ をインストールしたディレクトリ」

wget

http://www-bl20.spring8.or.jp/\~sp8ct/tmp/6mct.taz

tar

xzf

6mct.tazrm

6mct.taz6mct/*.csh

お手数ですが、この作業をよろしくお願いします。とり急ぎ、

115 / 206
Date:Tue, 31 Oct 2017 19:07:32 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: 6mct_test
まつのさま、
みなさま、
GSJ/AIST のなかのです。10/27 の E-mail でその使用例を記した添付ファイル 170516c.txt に関連して書いた
ように、書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zipに入れた新しいプログラムによる SIXM の画像再構成などの処理の手順は
http://www-bl20.spring8.or.jp/~sp8ct/tmp/sixm_recipe.pdfに記した以前のものと大略同じです。今回は主に以前のプログラムへの新機能の追加や使用頻度が低かった機能の整理などを行いました：[1] プログラム his2raw
SIXM の測定で得た HIS 形式ファイルの上の RP（refraction profile）画像に対する MF（mountainflattening）の処理を追加した：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2017.pdf#page=85[2] プログラム "ri*" と "rr*"his2raw で作成した RI（raw intensity）と RR（raw refraction）の画像に対する、従来の top 法や
side 法を拡張した hybrid 法による入射 X 線強度 I0 や X 線屈折量の原点 R0 の推定処理を追加した：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2017.pdf#page=62[3] 新しい画像再構成プログラム
サンプル回転軸の位置を変えた画像再構成のテスト用に通常の X 線 CT で使っている「CBP engine」
を組み込んだ CPU と GPU 用のプログラム "r[i,r]_stg_[t,g]" を書いた。以前の C-shell scripts とは異なり、これらは Windows でも実行可能なはず（少なくとも CPU 用のものは）。また、「本番」の画像再構成用にも CBP engine を用いたプログラム "r[i,r]_tg_[t,g]" を用意した。なお、以前からあった R[I,R] 画像を読み込みつつ画像再構成処理を行うプログラム "r[i,r]2tg" も健在で、それらを使えば通常の X 線 CT の画像再構成で得られるものと同等な 16 ビット整数画素値の画像（word 画像を含む）を作成できる。
[4] 上記のプログラムすべて
his2raw、"r[i,r]_stg_[t,g]" と "r[i,r]_tg_[t,g] は以前の SIXM 用のプログラムで採用していた RAW
形式画像ファイル

116 / 206
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2016.pdf#page=36の２種類のもののうち浮動小数点数画素値の float-TIFF の画像だけを出力するようにしてある。ただし、新しい書庫ファイルにも入れてある既存のプログラム t2t_float
http://www-bl20.spring8.or.jp/~sp8ct/tmp/rhp.pdf#page=3などを使えば、それを整数画素値の integer-TIFF の画像に変換できる。また、プログラム "ri*" と"rr*" はすべて、それら両方の RAW 形式の画像ファイルを読み込んで処理することができる。
これらの以前のプログラムとの違いのうちで [2] 以外のものは、10/27 の E-mail の添付ファイル 170516c.txtに入力行の「代替案」として記した、１個の「#」で始まるコメント行の内容を実行すればテストできます：[1] MF の処理のテスト### 'making RI (raw intensity) and RR (raw refraction) images'
mkdir ri rr#

his2raw a.HIS 551 601 100

ri rr > raw.log# no mountain flattening#

his2raw a.HIS 551 601 100 5ri rr > raw.log# Wm = Ws = 5

his2raw a.HIS 551 601 100 10 10 ri rr > raw.log# Wm = Ws = 10

5[4] R[I,R] 画像の画素値のビット数削減のテスト### 'do one of the following optional processings, if necessary'#--------------------------------------------------------------#### 'conversion from float (32 bit) to 16 bit R[I,R] images'#

t2t_float ri - 16 ri > /dev/null#

t2t_float rr - 16 rr > /dev/null#### 'conversion from float (32 bit) to 8 bit R[I,R] images'#

t2t_float ri - 8 ri > /dev/null#

t2t_float rr - 8 rr > /dev/null#--------------------------------------------------------------[3] 画像再構成プログラムの性能テスト### 'reconstruction of absorption and phase-shift images'#

setenv THREADS 8# for r[i,r]2tg

setenv CBP_THREADS 8# for r[i,r]_tg_t117 / 206

mkdir tg_a
#

ri2tg

ri - 100 50 120 100e-7 241 +0 tg_a > tg_a.log

ri_tg_t ri - 100 50 120 100e-7 241 +0 tg_a > tg_a.log#

ri_tg_g ri - 100 50 120 100e-7 241 +0 tg_a > tg_a.log...
mkdir tg_p

#

rr2tg

rr - 100 50 120 6220e-3 -104 241 +0 tg_p > tg_p.log

rr_tg_t rr - 100 50 120 6220e-3 -104 241 +0 tg_p > tg_p.log#

rr_tg_g rr - 100 50 120 6220e-3 -104 241 +0 tg_p > tg_p.log

また、[2] に記した hybrid 法と従来の top 法や side 法の処理結果の比較はプログラム "ri*" と "rr*" の起動パラメータの指定によって実行できます：[2] R[I,R] 画像に対する top 法、side 法と hybrid 法のテスト
新しいプログラム "ri*" と "rr*" はすべて 10/23 の E-mail で紹介したマクロ tlrb（tlrb.txt）によりImageJ で調べた３つの非負の値
top：R[I,R] 画像の上の物体像の上部にある空気の部分の縦画素数
left：R[I,R] 画像の上の物体像の左側にある空気の部分の横画素数
right：R[I,R] 画像の上の物体像の右側にある空気の部分の横画素数を使って hybrid 法の処理を行うが、それらの起動パラメータの値が０なら以前のプログラムのものを模した以下の処理を行う：
top = 0 かつ left + right ≠ 0 の場合には side 法の処理を行う。
top ≠ 0 かつ left + right = 0 の場合には top 法の処理を行う。
注
top、left と right の３つの値すべてが負もしくは０の場合、 "ri*" と "rr*" は R[I,R] 画像の画素値
そのものを後続する画像再構成などの処理に使います（エラーにならないことに注意して下さい）。
SIXM の測定 170516c のデータに対して行ったテストの結果をこの E-mail に添付した test_170516c.jpg と
test_170516c.pdf に示しました。
test_170516c.jpg[2]のテストで得た吸収（左）と位相 CT 画像（右）。オマケとして MF を行った R[I,R] 画像に対して
hybrid 法を適用した結果も示した。前記の 6/17 の E-mail でも紹介したように、hybrid 法を使えば測定 170516c の入射 X 線に含まれていた周波数２および４Hz の「揺らぎ」によるリングアーチファ
クトの発生を防ぐことができる。

118 / 206
test_170516c.pdf
左から順に [1]、[4] および [3] のテストで得た吸収（上段）と位相 CT 画像の画素値ヒストグラムのグラフ（下段）。いずれも凡例に示した３つの場合を試した。中央および右端のグラフから R[I,R]の画素値のビット数や使用するプログラムによらず CT 画像はほぼ同じになっていることがわかる。
それに対して、前記の 8/1 の E-mail で紹介したように、MF の処理は再構成画像の画質に無視できない影響を与える。
また、test_170516c.pdf の右端のグラフのもとになった CT 画像の再構成に要した３種類・６個のプログラムの処理時間は以下の通りでした。
programgsjgix

vrm

ri2tg

28.65

45.87

rr2tg

27.15

36.46

ri_tg_t

21.18

45.77

rr_tg_t

20.53

34.80

ri_tg_g

28.01

41.12

rr_tg_g

19.98

30.21

sec.

ただし、使用した計算機 gsjgix と vrm の緒元は以下の通りです：
計算機 gsjgix
Xeon E5-2687W (8 real cores / 3.1 GHz / 128 GB)
NVIDIA Tesla K20c (2496 CUDA cores / 0.71 GHz / 5120 MB / 2600 Mhz)
vrm
Xeon E5-2609 v2 (4 real cores / 2.5 GHz / 64 GB)
NVIDIA GeForce GTX 750 Ti (640 CUDA cores / 1.11 GHz / 2047 MB / 2700 Mhz)
長い E-mail になりました。とりあえず以上です。
P.S.
test_170517c.jpg の「hybrid」と「MF + hybrid」の画像の画質の差を識別できますか？ 8/1 の Email でも紹介したように、MF を実行した吸収 CT 画像（tg_a）では物体像のエッジが明瞭になっています。

119 / 206
添付ファイル test_170516c.jpg

添付ファイル test_170516c.pdf

120 / 206
Date:Wed, 01 Nov 2017 09:16:06 +0900

From:

Tsukasa NAKANOTo:

MiyakeCc:

MATSUNO Junya, "TSUCHIYAMA, Akira", Kentaro Uesugi, "TAKEUCHI, Akihisa",
Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: Re: 6mct_test
みやけさま、
なかのです。SIXM の吸収 CT 画像 239.tif の「エッジ」は FZP を使った通常の CT 画像で問題になっている「薄皮」と同じものではないでしょうか？
FZP-CT で撮影した画像の物体像の「薄皮」
竹内さんが「反射起源説」を唱えている現象。ただし、竹内さんからの 5/18 の E-mail によると、
FZP のフォーカスを変えた場合の「薄皮」の現れ方はさほど違わないので、反射起源説は間違い？
もしそうなら、SIXM も FZP を使っているので、「エッジ」があって当然では？ つまり、
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2017.pdf#page=85
で言っているように、MF によって「エッジ」が出現したのではなく、MF なしでは見えていなかったものが見えるようになったと言うべきでしょう。FZP-CT 画像の「エッジ」もしくは「薄皮」を抑える話は別問題だと思います。とり急ぎ、On Wed, 1 Nov 2017 08:40:00 +0900 Miyake wrote:> 中野様> 正直、全然フォローしていませんけど、良くなっていますね。
> MF+hybrid の MF でエッジが明瞭になるからかもしれませんけど、添付の矢印部が気にはなりますね。
> となると hybrid のみのほうが良い？？
> 三宅>> >中野さま> >松野です、ご連絡ありがとうございます。
>>> >> test_170517c.jpg の「hybrid」と「MF + hybrid」の画像の画質の差を識別できますか？
> >こちらは時間が取れなくて色々試せていないのですが(試料がある人がやるべき・・・?)、> >バックグラウンドの取り方でとても良くなっていますね。
>>> >tg_a の 239 では「MF + hybrid」がいい気がします。試料の組織がシャープに見えるような気もしますし、> >「hybrid」は試料の周囲にうっすらハローが出ているような気がします。

121 / 206
三宅さんからの E-mail の添付ファイル 239.tif

Date:Wed, 01 Nov 2017 10:32:46 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Subject: Re: 6mct_test
まつのさま、
なかのです。ぼく的には（MF をする・しないに関わらず）SIXM 画像を使った「エッジ」もしくは「薄皮」の起源の追求は行わないつもりです。次便以降の E-mail に書くように MF の有効性は case by case なので、「薄皮」の問題については通常の FZP-CT 実験で追求した方が良いと思う。とり急ぎ、On Wed, 1 Nov 2017 10:04:38 +0900 MATSUNO Junya wrote:> 中野さま、三宅さま> 松野です。
> >「MF なしでは見えていなかったものが見えるようになったと言うべきでしょう。」> ということは、「エッジ」の起源を探すことを思っても、MF-hybrid で再構成してみて、> 挙動を調べていく、というのがいいのですね。
>> 2017 年 11 月 1 日 9:26 Miyake:>> > 中野さま> > ありがとうございます。
>>

122 / 206> > 「MF なしでは見えていなかったものが見えるようになったと言うべきでしょう。」> > なるほど、そういう捉え方になりますか。
> > ということは、MF-hybrid のほうが、良いんでしょうね。
> > ただし、「エッジ」もしくは「薄皮」問題は別として。
> > 三宅Date:Wed, 01 Nov 2017 14:11:39 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya, Miyake

Cc:"TSUCHIYAMA, Akira", Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: 6mct_test_MF
みなさま、
GSJ/AIST のなかのです。三宅さんや松野くんからのコメントがあった、SIXM 用の新しいプログラム his2rawに組み込んだ MF（mountain flattening）の処理に関することを書きます。8/1 の E-mail
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2017.pdf#page=85にも書いたように、MF の実行には以下の２つの考慮すべき事項があります。
[1] MF が有効な SIXM の測定
先の E-mail の添付ファイル mf_ri.pdf などに書いたように、SIXM の入射 X 線強度が低い場合にはMF は有効ではないと思われます。その場合、MF を行って得た RI 画像から再構成した吸収 CT 画像
は理論的には MF なしのものと同じになるはずです。RP（refraction profile）の上の「山」の X 線強度値が飽和している場合にのみ MF は有効です。
[2] MF 用のパラメータの値
MF の実行には以下の２個の整数値のパラメータの指定が必要です。
Wm（mountain width；≧０）
RP 画像上の X 線強度値の「山」の「半幅」の画素数。その山のピークの位置を p0 として、
MF では |p - p0| ≦ Wm を満たす RP 画像の上の各横列の座標値 p の領域の X 線強度値
を「ゴミ」と見なします（そのような山の領域を削除します）。
Ws（sampling width；≧２）
削除した山の両脇の「山麓」の幅の画素数。MF では RP 画像の横列ごとに Wm < |p - p0|≦ Wm + Ws の範囲にある X 線強度値を用いて削除した山の領域を埋め戻します。
問題はこれらの値を自動的に決める方法がないことです。
「山 == FZP の中央の穴」は５画素幅程度
ですが、その両脇の X 線強度が揺らいでいる部分も削除すべきだと思います（つまり、Wm≧５程
度？）。なお、Ws には Wm と同じ値を指定すれば十分だと思われますが、諸般の事情により his2rawに１以下の Ws の値を指定するとエラーになります。

123 / 206
このように MF に使うパラメータの値を自動的に決める方法がないので、現時点ではそれらを「エィ」と指定するしかないです。ただ、その場合でも、his2raw による「本番」の前に「もとの RP 画像とそれに MF を行った RP 画像」を目視確認することが望ましい。7/7 の E-mail
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_2017.pdf#page=76
で紹介したその処理のための C-shell scripts "rp.csh" と "mf.csh" に加えて、それらを使って RP 画像およびMF を行った RP 画像を作成し、それらの画像とそれらの上の横一列のラインプロファイルのグラフを ImageJ
で表示する新しい C-shell script "rp+mf_ij.csh" を下記の書庫ファイルに入れておきました。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zip
rp+mf_ij.csh を実行すれば、8/1 の E-mail に添付した 170513a_392_107.pdf（この E-mail に再度添付しました）の下２段のものと概ね同じ画像とグラフを ImageJ で表示できます。その起動法は以下の通りです。
rp+mf_ij.csh

log&HIS

view

scan

layer

{Wm,Ws...}

ただし、起動パラメータの意味は以下の通りです注オプションの「Wm,Ws」以外のパラメータの意味は 7/7 の E-mail で説明した rp.csh のものと同じです。
log&HIS
SIXM の測定ファイル "*.HIS" とログファイル "*.log" のパス名から ".HIS" と ".log" を除いた文字列。通常は「ディレクトリ名/a」。
view、scan と layer
サンプル回転角に対応している R[I,R] 画像の番号と、それらの画像上の画素の x および y 座標値。
Wm,Ws
MF 用のパラメータの値をコンマ区切りで指定する。複数の指定が可能。指定を省略すると MF を行
わない。なお、「Wm,Ws」としてコンマなしの１個の値 w を指定すると Wm = Ws = w と見なす。
170513a_392_107.pdf の下２段のものと同様な画像とグラフを表示したい場合は以下のように端末から入力
すれば OK です：
rp+mf_ij.csh

170513a/a

392

107

120

5,5

10

rp+mf_ij.csh

170513a/a

392

107

242

5

10,10

とりあえず以上です。

124 / 206
Date:Wed, 01 Nov 2017 16:59:36 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: 6mct_170516c.txt
みなさま、
GSJ/AIST のなかのです。10/27 の E-mail に添付した「測定 170516c のデータに対する SIXM 用の新しいプ
ログラムによる処理」の記録のファイル 170516c.txt に先の E-mail で紹介した「C-shell script "rp+mf_ij.csh"による MF のための RP 画像の観察」の処理を追加しました。書き換えたファイル 170516c.txt をこの E-mailに添付しましたので、必要なら以前のものと差し替えて下さい。追加した処理は SIXM の測定データのチェッ
クの直後に実行するようにしてあります。R[I,R] 画像のど真ん中の縦列の画素に相当する RP 画像に対して
Wm = Ws = 5 and 10 の MF を行い、その結果の画像とグラフを ImageJ で表示します。ImageJ の表示が完了するまでの所要時間は 10 秒程度？ とり急ぎ、
添付ファイル 170516c.txt
この E-mail の後に修正したので削除しました。
後に載せた 11/9 の E-mail に添付ファイルを御覧下さい。
Date:Thu, 02 Nov 2017 14:41:48 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto

Subject: 6mct_tlrb.txt
みなさま、
GSJ/AIST のなかのです。
10/23 の E-mail で紹介した次回の SIXM 実験で使う ImageJ のマクロ tlrb（tlrb.txt）
を改造しました。お手数ですが、以前と同様にして tlrb をそちらの Linux 機にインストールして下さい。
On Mon, 23 Oct 2017 20:27:47 +0900 Tsukasa NAKANO wrote:>

cd~/Desktop/ImageJ/macros

>

wget

-O

tlrb.txt

http://www-bl20.spring8.or.jp/\~sp8ct/tmp/IJ_m_tlrb.txt

125 / 206
注
SIXM 用の書庫ファイルにも tlrb.txt を入れてあります：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zip
起動パラメータとしてファイル名 LOG を指定すると、改造版の tlrb は R[I,R] 画像の上の物体像の領域を指す
選択した bounding box に関する４個の数値>

上部（top）にある空気の領域の y 方向の幅>

左側（left）にある空気の領域の x 方向の幅>

右側（right）にある空気の領域の x 方向の幅>

下端（bottom）の y 座標値（これは SIXM 的にはオマケの情報です）

を ImageJ の Log ウィンドウに記録すると同時にそのファイルに書き込みます。
tlrb の起動法
IJ-macrotlrb

directory{startincrement}

{top

left

right

bottom}-macrotlrb

directory{startincrement}

{top

left

right

bottom}

→
IJ

{LOG}

また、以前とは異なり、改造版の tlrb は bounding box の選択の前に[1] 読み込んだ R[I,R] 画像の横および縦画素数の２個の数値[2] 読み込んだ画像の全域に対応した top、left、right と bottom の値、もしくは、起動時に指定した
それらの４個の数値のそれぞれを並べた行を Log ウィンドウ（および、起動時に指定したファイル LOG）に記録します。そして、その後に、選択した bounding box に関する前記の４個の数値を並べた行を書き込みます。
以上のような tlrb の新機能を 10/27 の E-mail で紹介した「測定 170516c のデータに対する SIXM 用の新しいプログラムによる処理」でも使うようにしました。その手順を追加したファイル 170516c.txt をこの E-mail に添付します。必要なら以前のものと差し替えて下さい。とり急ぎ、
添付ファイル 170516c.txt
この E-mail の後に修正したので削除しました。
後に載せた 11/9 の E-mail に添付ファイルを御覧下さい。

126 / 206
Date:Tue, 07 Nov 2017 18:30:37 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto, Taguchi

Subject: Re: 6mct_tlrb.txt
まつのさま、
なかのです。
>>

IJ -macro tlrb ri 1 10 100 50 120 470 tlrb.log> > では、tlrb.log に反映されない(何も記入されない)ようです。
不思議ですね。ぼくの所では問題なく書き込めます。
>

IJ -macro tlrb ri 1 10 100 50 120 470 tlrb.log> で起動した ImageJ の画像上で右クリックしたあとの[Yes]ボタンの挙動がおかしいようです。
> ImageJ 上の Log ウインドウには座標が表示されるのですが、指定したテキストファイル(ここでは> tlrb.log）には値が書き込まれないようです。(tlrb.log は作成されますが。)>> なお、[cancel]を押すとテキストファイルへの書き込みが行われました。
これは「Yes をした直後にテキストファイルには書き込まないが、Cancel してマクロ tlrb を終了すると書き込みが行われる」の意味ですか？ もしそうなら、ImageJ or JAVA のファイル出力がリアルタイムでない（効率化のためファイル出力をバッファリングしている）ためでは？ それは ImageJ or JAVA の問題。
とり急ぎ、
On Tue, 7 Nov 2017 15:29:48 +0900 MATSUNO Junya wrote:> 中野さま> 松野です。
> 先ほどお送りしたご質問なのですが、こちらでもう少し試しました。
>>

IJ -macro tlrb ri 1 10 100 50 120 470 tlrb.log> で起動した ImageJ の画像上で右クリックしたあとの[Yes]ボタンの挙動がおかしいようです。
> ImageJ 上の Log ウインドウには座標が表示されるのですが、指定したテキストファイル(ここでは> tlrb.log）には値が書き込まれないようです。(tlrb.log は作成されますが。)>> なお、[cancel]を押すとテキストファイルへの書き込みが行われました。

127 / 206> 2017 年 11 月 7 日 15:00 MATSUNO Junya:>> > 中野さま> > 松野です。ご連絡遅くなり、失礼いたしました。
> > 本日改良版 tlrb.txt をダウンロードして、/ImageJ/macro にいれました。
>>> > 170516c.txt にしたがって再構成の練習をしていたのですが、>>IJ -macro tlrb ri 1 10 100 50 120 470 tlrb.log> > では、tlrb.log に反映されない(何も記入されない)ようです。
>>> > ご確認いただけないでしょうか。よろしくお願いいたします。
Date:Tue, 07 Nov 2017 19:05:22 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Miyake, Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Aiko Nakato, megumi matsumoto, Taguchi

Subject: 6mct_recipe
まつのさま、
みなさま、
GSJ/AIST のなかのです。明日からの SIXM 実験の場で新しい計算機プログラムを使って処理を行うための「SIXM の画像再構成の手順」を書きました。この E-mail に添付した recipe.txt です。今日の午後に数時間かけて書き殴った文書なので完成度は低いです。明日以降に加筆・修正するつもりですが、とりあえず送ります。
そちらで実験に合わせたものに整形してお使い下さい。 以下はそれに関する注意書きです。
[0] と [13] の処理は明日からの実験ではたぶん不要。
[3] の MF 処理のテストは明日の SIXM 実験の測定条件に依存する。
[6] で使う ImageJ のマクロ tlrb にバグがあると困るが、...
説明が妙に詳しい部分とあっさりしている部分がありますが、...
なお、recipe.txt の雛形にしたファイル 170516c.txt も少しだけ修正したので再度送付します。それで気が付いたのですが、これまでの SIXM 実験では中村君が書いた（完成度の低い）shell script で計算機を使った処理をしており、かつ、計算機に入力した数値などをわざわざ紙のログノートに手書きしていましたが、それを170516c.txt のような「入力したコマンド行すべてを記録する」方式にする方が良いのではないでしょうか？
170516c.txt の場合、入力したコマンド行は全体の 1/4 程度です。テキストファイルに記したコマンド行を
copy & paste して実際に実行すれば、パラメータの入力ミスなどを見つけるのが容易です。とり急ぎ、

128 / 206
P.S.
ぼくはいつも通り明日の午後２時ごろに重役出勤します。すみません。
添付ファイル recipe.txt と 170516c.txt
この E-mail の後に修正したので削除しました。
後に載せた 11/9 の E-mail に添付ファイルを御覧下さい。
Date:Thu, 09 Nov 2017 18:41:11 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya, "TSUCHIYAMA, Akira", Kentaro Uesugi, "TAKEUCHI, Akihisa",
Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Taguchi

Cc:

Miyake, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI

Subject: 6mct_bug_fix
みなさま、
GSJ/AIST のなかのです。SIXM 用の新しいプログラムなどの間違いを正しました。
(1)
SIXM 用の新しいプログラムのうち C-shell script "t2t_f.csh" と "pile.[h,v].csh" のバグを修正し、それらのコードを書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zipに入れておきました。
(2)
松野くんが指摘してくれた ImageJ のマクロ tlrb（tlrb.txt）のファイル書き込みに関するバグを修正し、上記の書庫ファイルに入れておきました。また、
http://www-bl20.spring8.or.jp/~sp8ct/tmp/IJ_m_tlrb.txt
も修正版です。
(3)
杉本さんが指摘してくれた「SIXM の画像再構成処理などの手順書（recipe.txt）」の間違いを直しました。この E-mail にその修正版と、その雛形にした C-shell script として実行可能なファイル 170516c.txt の修正版を添付します。また、オマケとして、SIXM の実験の場（SPring-8 BL47XU）にある Linux 機 test01 の上で AV貝を撮影した測定 170513a に対する画像再構成などの処理を試した時の記録のファイル 170513a.txt もこの
E-mail に添付します。
とり急ぎ、

129 / 206
添付ファイル recipe.txt
SIXM の画像再構成などの手順[0] プログラムのインストール法[1] 作業用ディレクトリと測定データの準備[2] 測定データのチェックなど[3] MF のための RP 画像の観察[4] R[I,R] 画像の作成[5] 作成した R[I,R] 画像に対するオプションの処理[6] R[I,R] 画像上の物体像を囲む bounding box の選択[7] スライスごとの値の「時間変動」や鉛直方向のサンプルの「動き」のチェック[8] サンプル回転軸の位置の推定[9] サンプル回転軸の位置を変えた画像再構成のテスト[10] 吸収および位相 CT 画像の再構成とそれらの確認[11] 吸収 CT 画像に対する後処理[12] 位相 CT 画像に対する後処理[13] 長さと表示輝度のスケールバーを付けた吸収と位相 CT 画像の作成（オマケ）[0] プログラムのインストール法
書庫ファイルのダウンロードと展開% cd ~/Desktop% wget http://www-bl20.spring8.or.jp/\~sp8ct/tmp/6mct.taz% tar xzf 6mct.taz% rm 6mct.taz
CPU 用のプログラムのコンパイル% cd 6mct% makeGPU 用のプログラムのインストール% cd cuda% vi Makefile
NVCC =nvcc -O3 -arch=sm_50
CUDA =/usr/local/cuda% make% mv *_g ..
% cd ..

130 / 206
ImageJ のランチャーとマクロのインストール% cp -p ImageJ.csh ~/Desktop/ImageJ% cp -p tlrb.txt ~/Desktop/ImageJ/macros
C-shell の設定ファイルへの追加% vi ~/.cshrc
set path=(~/Desktop/6mct $path)alias IJ '~/Desktop/ImageJ/ImageJ.csh \!*'
[1] 作業用ディレクトリと測定データの準備
測定ごとのディレクトリを作成し、その中に移動してすべての作業を行う：% mkdir 170516c% cd 170516c/dev/shm/170516c
SIXM の測定で得た２個のファイルをリンク（もしくはコピー）しておく：% ln -s /work1/tsukasa/1705/170516c/a.log .
% ln -s /work1/tsukasa/1705/170516c/a.HIS .
[2] 測定データのチェックなど
SIXM の測定データファイルのバイト数などを調べる：% ls -trlL
total 41275208-rwx------ 1 tsukasa tsukasa

14074443 May 16 18:52 a.log-rwx------ 1 tsukasa tsukasa 42251730944 May 16 18:52 a.HIS
SIXM の測定のパラメータ値 scans、views および darks を調べておく：% head -1 a.log
551,601,100,1,0
これらのコンマ区切りの数値のうちの最初の３個の意味は以下の通りで、それらを後述するプログラム hs2raw
起動パラメータとしてそのまま指定する：
scans = 551
各 view の最初の scan はゴミなので、R[I,R] 画像の横画素数は 550
views = 601
CT に使用する 180 度回転のステップ数は 600 views
darks = 100
データファイル a.HIS の先頭に格納されている暗電流 RP 画像の個数

131 / 206
データファイル a.HIS に格納されている RP 画像のサイズなどを調べる：% check_his a.HIS | uniq -c
42251730350
331251 128

498

2

ただし、check_his などが出力した数値の意味は以下の通り：
42251730350 (< 42251730944)
有効な RP 画像の総バイト数。この値はファイル a.HIS のバイト数以下のはず。
331251 (== 551*601+100)
有効な RP 画像の個数。ファイル a.log に記されている値から計算した値と一致するはず。
128
RP 画像の横画素数
Nz = 498
RP 画像の縦画素数。この値と等しい枚数の CT 画像のスライス画像を再構成できる。
2
RP 画像のタイプ（2 == 16 ビット整数画素値の画像）。後述する his2raw はこのタイプの RP 画像しか処理できない。
これら以外に以下の SIXM のパラメータの値を知っておく必要がある：
Dz = 108.1 (nm)RP 画像の画素の鉛直方向の辺長。この値は以下の処理では陽に指定しないが、RP 画像から作成する
R[I,R] 画像の画素の鉛直方向の辺長、および、それらから再構成する３次元 CT 画像のスライスの厚さとなる。
Dr = 100 (nm) = 100e-7 (cm)
SIXM のスキャンのステップ幅。この値は位相 CT 画像の再構成処理では陽に指定しないが、それを含めた３次元 CT 画像のスライス画像の正方形画素の辺長となる。
SDD = 6220 (mm) = 6220e-3 (m)サンプル回転軸と検出器面の間の距離
Dp = 6.5 (um) * 16 (binning) = 104 (um)RP 画像の画素の水平方向の辺長。RP 画像が正立像なので、Dp として負の符号を付けた -104 を指定する。
RA0 = 0 (degree)
サンプル回転角の初期値。非０の値を指定すれば軸回転した画像を画質の低下なしで再構成できる。
他のパラメータ値と区別するため、以下では RA0 として+0 を指定する。
なお、後述する画像再構成の処理では Dr、SDD および Dp として再構成する値に応じた上記の単位の値を指定する必要がある：吸収 CT 画像
単位が 1/cm の LAC の値を推定するので cm 単位の Dr の値を指定する。

132 / 206
位相 CT 画像
単位が 1e-6（100 万分の１）の RID の値を推定するので、SDD の単位に対して 100 万分の１の単位の Dp の値を指定する。
[3] MF のための RP 画像の観察
R[I,R] 画像の作成時に RP 画像に対して MF の処理を行うかどうかを判断する。そのためには複数の RP 画像を吟味することが望ましいが、ここではとりあえず R[I,R] 画像の「中央」の画素の値の計算に使う１個の RP 画
像だけを調べる：
R[I,R] 画像の「中央」の画素の位置
view = views / 2 = 300
scan = scans / 2 = 275
layer = Nz（RP 画像の縦画素数）/ 2 = 249
これらとファイル a.log に記されていた値を用いてファイル a.HIS から１個の RP 画像を抽出し、その画像（もとの RP 画像）とそれに対してパラメータの値
Wm (mountain width) = Ws (samplineg width) = 5 および 10を指定して MF を行った結果の RP 画像などを ImageJ で表示してみる：% rp+mf_ij.csh a 300 275 249 5,5 10,10-380.329987

63949.281250-380.329987

63949.281250

これらの画像や同時に表示されるラインプロファイルを観察してもとの RP 画像の「山」の高さが 2^16 = 65536 に近い「飽和した値」か
Wm と Ws の値ごとの MF の結果のプロファイルに「不自然さ」がないかを確認し、MF を行うか否か、もしくは、MF に使う Wm と Ws の値を決める。なお、rp+mf_ij.csh は MF の処理を行うたびにもとの RP 画像が保持している画素値の値域を上記のように（標準エラー出力に）書き出す。これらのうちの最大値からその「山」の高さが「飽和した値」かどうかを判断できる。
[4] R[I,R] 画像の作成
新しい２個のディレクトリを作成し、それらそれぞれの中に a.log の値を指定してプログラム his2raw で抽出した a.HIS の上のもとの RP 画像、もしくは、それに MF を行った結果の RP 画像から計算した R[I,R] 画像を書
き込む：
% mkdir ri rr% his2raw a.HIS 551 601 100

ri rr > raw.log# MF を行わない場合% his2raw a.HIS 551 601 100 5 5

ri rr > raw.log# Wm = Ws = 5% his2raw a.HIS 551 601 100 10 10 ri rr > raw.log# Wm = Ws = 10

133 / 206
なお、言うまでもないことだが、上の３通りの his2raw の起動例のうちのいずれか、もしくは、Wm と Ws として任意の値を指定した his2raw の１回の起動を行えば良い。
[5] 作成した R[I,R] 画像に対するオプションの処理必要なら以下のような R[I,R] 画像の画素値のビット数の削減処理を行っても良い。
float（32 ビット画素値）の R[I,R] 画像を 16 ビットのものに変換% t2t_float ri - 16 ri > /dev/null% t2t_float rr - 16 rr > /dev/null
float（32 ビット画素値）の R[I,R] 画像を８ビットのものに変換% t2t_float ri - 8 ri > /dev/null% t2t_float rr - 8 rr > /dev/null
これらの処理を行うと R[I,R] 画像の容量が激減するが、それを用いた画像再構成の結果がもとの float の画像を使ったものと同じになるか否かは定かではない。
[6] R[I,R] 画像上の物体像を囲む bounding box の選択
ImageJ のマクロ tlrb を使って R[I,R] 画像のいずれかを表示し、それらの上の物体像を完全にカバーする
bounding box のひろがりを調べる：% IJ -macro tlrb rr 1 10 tlrb.log
ただし、ここでは物体像の境界の識別が容易な RR 画像（ディレクトリ rr）を指定した（RI 画像を使いたければディレクトリを ri に置き換えれば良い）。また、処理時間短縮のため RR 画像のうち１番目から 10 枚おきの view
だけを表示するよう指定した（すべての view を表示したければ「1 10」を削除すれば良い）。
画像下部のスライダ使えば指定した複数の view の画像のそれぞれを表示できる。マウス左ボタンをドラッグしてそれらの画像の上に bounding box の長方形を描く。その後、マウスの右ボタンを押すと bounding box の情報を示すウィンドウが開くので、その下部に並んでいる以下の３つのボタンのいずれかをクリックする：
Yes
表示されている bounding box の情報を記録した後に処理を続行する。
No表示されている bounding box の情報を記録せずに処理を続行する。
Cancelマクロ tlrb による bounding box の選択の処理を終了する。
上記の Yes により bounding box の情報がファイル tlrb.log にも書き込まれる。Cancel（および ImageJ の終了）を行った後にそれを確認すれば良い：% tail -1 tlrb.log
100

50

120

470

134 / 206
これら４個の数値は R[I,R] 画像の上の物体像に関する以下の情報を示しており、後述するプログラム "r[i,r]*"のそれぞれに起動パラメータとして指定する：
top = 100
物体像の上部の空気の領域の幅、もしくは、物体像の上端の座標値
left = 50
物体像の左側の空気の領域の幅
right = 120
物体像の右側の空気の領域の幅
bottom = 470
物体像の下端の座標値
なお、以下のようにすれば選択した bounding box を確認することができる：% IJ -macro tlrb ri 1 10 100 50 120 470% IJ -macro tlrb rr 1 10 100 50 120 470[7] スライスごとの値の「時間変動」や鉛直方向のサンプルの「動き」のチェック
R[I,R] 画像から平均投影値もしくは平均積算微分屈折率の画像を作成する：% ri2mp ri - 100 50 120 mp.tif-0.019094

0.119755% rr2mr rr - 100 50 120 mr.tif-1.014936

0.893499

これらの画像の縦軸は R[I,R] 画像の縦軸に、また、横軸は R[I,R] 画像の view に対応しており、それぞれの画
素の値は、起動時に指定した top、left および right が指す領域の画素の値を使ってR[I,R] 画像の値から計算した投影値もしくは積算微分屈折率の値のR[I,R] 画像の view それぞれの画像の横列ごとの平均値である。これらの値に view（≒ 測定時刻）ごとの変動があると高画質の CT 画像を再構成できないので、作成した画像 m[p,r].tif を表示してその様相を調べる：% xv mp.tif mr.tif
これらの画像の上の横方向に伸びている縞模様が「傾斜」している場合は SIXM の測定中にサンプルが鉛直方向に動いた可能性が高い（後述）。
[8] サンプル回転軸の位置の推定
サンプル回転角が０度と 180 度の R[I,R] 画像の「比較」によって SIXM の測定で用いたサンプル回転軸の位置（いわゆる「センター値」）を推定する：135 / 206% ri2rc ri - 100 50 120 100 470 0.25 0.25 ri2rc.tif
206

343

241

-124

124

-3

% rr2rc rr - 100 50 120 100 470 0.25 0.25 rr2rc.tif
206

343

241

-124

124

-6

R[I,R] 画像の上の物体像がある領域だけを使うと「比較」の精度が向上するので、ここでは top、left と right の値に続けて物体像がある縦方向の範囲を指す top と bottom の値を指定した。
それらに続く２個の値「0.25 0.25」は回転角が０度と 180 度の画像の「比較」を試す回転軸の位置と縦方向の変位（縦ズレ）の量の相対値で、標準出力に書き出された２行それぞれの最初の２個の値がそれらに対応した「比較」を試した回転軸の位置と縦ズレの実際の範囲を示している。そして、これらの行の最後の値がそれぞれサンプル回転軸の位置（１行目）とSIXM の測定中に生じたサンプルの縦ズレの推定値（２行目）である。
上記の出力によると R[I,R] 画像から推定した回転軸の位置はどちらも同じ値 241 であり、それを吸収と位相
CT の両方の画像再構成で指定すれば良いはずである。なお、後述する画像再構成のテストの結果にもよるが、原理的には吸収と位相 CT の画像再構成で指定するサンプル回転軸の位置は同じ値にすべきである。
また、R[I,R] 画像の縦ズレ量の推定値の符号は前述の平均投影値や平均積算微分屈折率の画像の上の縞模様の「傾斜」と調和的である。つまり、ここで例として処理している測定 170516c では SIXM の測定中にサンプルが鉛直方向に少しだけ動いたようである。
試行した範囲の両端と同じ値の回転軸の位置や縦ズレ量の推定値は信頼できない。その場合は物体像がある縦方向の範囲を変えて r[i,r]2rc を再度実行する必要がある。また、撮影した物体像の内部構造が特異な場合には「比較」が正常に行えないこともある。その場合には起動時に指定したファイル r[i,r]2rc.tif に格納されている「RMSD のマップ」を観察して対応策を考える必要があるが、ここではその詳細の説明は省略する：% xv

ri2rc.tif rr2rc.tif% xv -preset 4 ri2rc.tif rr2rc.tif# RMSD のマップを白黒表示する# 擬似カラー表示（青が低い値）[9] サンプル回転軸の位置を変えた画像再構成のテスト
念のため、先に推定した値の前後のサンプル回転軸の位置を指定した画像再構成のテストを行う。ここでは以下のパラメータを指定する：
再構成するスライスの位置 = ( top + bottom ) / 2 = 285
試行する回転軸の位置の最小値 = 241-0.5*7 = 237.5
試行する回転軸の位置の間隔 = 0.5
試行する回転軸の位置の総数 = 7+1+7 = 15

136 / 206
画像再構成のテストは CPU で走る r[i,r]_stg_t と GPU を使う r[i,r]_stg_g のどちらのプログラムで行っても良い（以下では両者の実行法を併記する）。ただし、CPU 用を使う場合は実行の前に稼働するスレッド数の設定を行っておく必要がある：% setenv CBP_THREADS 8# ８個のスレッドで並列に画像再構成を行う

吸収と位相 CT のそれぞれの画像再構成のテスト用のディレクトリ test_[a,p] をまず作成し、ここまでで説明した値を指定して r[i,r]_stg_[t,g] を実行することによりそれらの中に各１個の sinogram と複数の tomogramsの画像を書き込む：% mkdir test_a% ri_stg_t ri - 100 50 120 285 100e-7

237.5 0.5 15 +0 test_a > test_a.log% ri_stg_g ri - 100 50 120 285 100e-7

237.5 0.5 15 +0 test_a > test_a.log% mkdir test_p% rr_stg_t rr - 100 50 120 285 6220e-3 -104 237.5 0.5 15 +0 test_p > test_p.log% rr_stg_g rr - 100 50 120 285 6220e-3 -104 237.5 0.5 15 +0 test_p > test_p.log
その後、ファイル「test_[a,p]/スライス番号.tif」の sinogram の画像を観察し、測定中のサンプルの不穏な「動き」の有無を確認する：
xv test_a/285.tif test_p/285.tif# sinograms of layer 285

ファイル「test_[a,p]/スライス番号_回転軸の位置.tif」が回転軸の位置を変えて再構成した画像である。これらを個別に眺めて回転軸の位置の違いに伴う CT 画像の画質を評価しても良いが、それよりも回転軸の位置が異なる画像を並べたものを眺める方が効率的である。以下のようにすれば吸収と位相 CT のそれぞれのテスト用のディレクトリの下にある再構成画像すべてを並べた画像を作成できる：
横方向優先の順番で５×３のマトリックス状に並べる場合% pile_h.csh test_a 1 1 15 5 3 test_a.tif% pile_h.csh test_p 1 1 15 5 3 test_p.tif
縦方向優先の順番で３×５のマトリックス状に並べる場合% pile_v.csh test_a 1 1 15 3 5 test_a.tif% pile_v.csh test_p 1 1 15 3 5 test_p.tif
これらの画像を詳細に観察して、偽像のない高画質な CT 画像の再構成に最適なサンプルの回転軸の位置を決定
する：
xv test_a.tif test_p.tif[10] 吸収および位相 CT 画像の再構成とそれらの確認
サンプル回転軸の位置を決定した後（ここでは吸収と位相 CT のどちらに対しても同じ値 241.0 とした）
、本番の画像再構成を行う。テスト用の場合と同様に CPU 用と GPU 用の合計２×３個のプログラムのいずれかを利137 / 206
用できる（以下ではそれらの実行法を併記する）。ただし、CPU 用のプログラムを実行する場合には稼働するス
レッド数（８とする）を事前に設定しておく必要がある：
プログラム r[i,r]2tg を実行する場合% setenv THREADS 8
プログラム r[i,r]_tg_t を実行する場合% setenv CBP_THREADS 8
テストの場合と同様に吸収と位相 CT の再構成画像用のそれぞれのディレクトリを作成した後、これまでに紹介したパラメータの値を指定して画像再構成プログラムを実行する：% mkdir tg_a
% ri2tgri - 100 50 120 100e-7

241.0 +0 tg_a > tg_a.log% ri_tg_t ri - 100 50 120 100e-7

241.0 +0 tg_a > tg_a.log% ri_tg_g ri - 100 50 120 100e-7

241.0 +0 tg_a > tg_a.log% mkdir tg_p
% rr2tg

rr - 100 50 120 6220e-3 -104 241.0 +0 tg_p > tg_p.log% rr_tg_t rr - 100 50 120 6220e-3 -104 241.0 +0 tg_p > tg_p.log% rr_tg_g rr - 100 50 120 6220e-3 -104 241.0 +0 tg_p > tg_p.log
再構成した画像をざっと見るため、テストのものと同様に吸収と位相 CT のそれぞれの（等間隔になるように選び出した）15 枚のスライスを５×３もしくは３×５のマトリックス状に並べた画像を作成してみる。
スライスの間隔 = ( bottom - top + 1 ) / 15 ≒ 24
最初のスライス = top + ( bottom - top + 1 - 24 * ( 15 - 1 )) / 2 ≒ 117
横方向優先の順番で５×３のマトリックス状に並べる場合% pile_h.csh tg_a 117 24 15 5 3 tg_a.tif% pile_h.csh tg_p 117 24 15 5 3 tg_p.tif
縦方向優先の順番で３×５のマトリックス状に並べる場合% pile_v.csh tg_a 117 24 15 3 5 tg_a.tif% pile_v.csh tg_p 117 24 15 3 5 tg_p.tif
これらの画像を眺めて画像再構成の結果に不備がないかを確認する：% xv tg_a.tif tg_p.tif[11] 吸収 CT 画像に対する後処理再構成した CT 画像は浮動小数点数画素値のものなのでそのままでは通常の画像処理を行うことができない。それらを整数画素値の画像に変換する必要がある。そのためにまず、再構成した LAC の値（CT 値）の値域を調べる：

138 / 206% mm.csh tg_a-375.003174

1699.017944

SIXM に限らずこれまでの CT 実験ではすべてのスライスで上記の範囲の CT 値を表現する 16 ビット画素値のword 画像を作成していた。それを作成するために指定する 16 ビット画素値１階調ごとの CT 値の増分の値(1699.017944-(-375.003174))/(2^16-1) = 0.0316475336537728
も先と同じ C-shell script "mm.csh" で計算できる：% mm.csh tg_a 16-375.003174

1699.017944

0.0316475336537728

このようにして得た値を指定して吸収 CT 画像の word 画像とその画素値ヒストグラムのデータファイルを作成
する：% mkdir word_a% t2t_f.csh tg_a-375.003174 0.0316475336537728 16 word_a > word_a.txt

また、word 画像を作成せずにヒストグラムだけを得ることもできる：% t2t_float tg_a - -375.003174 0.0316475336537728 16 -> word_a.txt

いずれにせよ再構成した CT 値の全域に関するヒストグラムを表示してサンプルの大部分を占める主要な物質の CT 値を調べる：% plot_x11.csh word_a.txt
その際に CT 値の範囲を限定したければ以下のようにすれば良い：% plot_x11.csh word_a.txt 0 500# CT 値 = 0～500 の部分を表示

このようにして表示したヒストグラムからサンプルの主要な物質に対応するピークの CT 値を読み取り、その1/100（これには根拠なし）の値を後述する byte 画像の８ビット画素値１階調ごとの CT 値の増分とする。
測定 170516c の吸収 CT 画像のヒストグラムのピークの CT 値 ≒ 124 (1/cm)→ byte 画像の８ビット画素値１階調ごとの CT 値の増分 = 1.24 (1/cm)
このようにして決めた CT 値の増分の値を指定して byte 画像とその画素値ヒストグラムのデータファイルを作成する。
% mkdir byte_a% t2t_f.csh tg_a 0 1.24 8 byte_a > byte_a.txt
先と同様に byte 画像のスライスのうちの等間隔になるように選び出した 15 枚を５×３もしくは３×５のマト
リックス状に並べた画像を作成してみる：

139 / 206
横方向優先の順番で５×３のマトリックス状に並べる場合% pile_h.csh byte_a 117 24 15 5 3 byte_a.tif
縦方向優先の順番で３×５のマトリックス状に並べる場合% pile_v.csh byte_a 117 24 15 3 5 byte_a.tif
また、byte 画像と同時に取得したヒストグラムの PostScript の図も作成する：% plot_a.csh ./byte_a.txt > byte_a.ps
なお、byte 画像の画素値０と 255 には「ゴミ」が混じっているので、それらを除外した方がヒストグラムの見栄えが良くなる：
plot_a.csh ./byte_a.txt 0.62 315.58 > byte_a.ps
ただし、0.62 = 1.24/2
byte 画像の画素値０に対応する CT 値の上限の値
315.58 = 1.24*254.5
byte 画像の画素値 255 に対応する CT 値の下限の値
以上のようにして作成した画像と図の出来栄えを確認する：% xv byte_a.tif% evince byte_a.ps[12] 位相 CT 画像に対する後処理
位相 CT 画像に対する後処理の手順も吸収 CT 用のものと同じなので、ここでは測定 170516c のデータを処理する場合のそれらの具体的な違いだけを記す。
% mm.csh tg_p-23.171337

24.950184

16 ビット画素値１階調ごとの CT 値の増分の値= (24.950184-(-23.171337))/(2^16-1) = 0.0007342873426413% mm.csh tg_p 16-23.171337

24.950184

0.0007342873426413% mkdir word_p% t2t_f.csh tg_p-23.171337 0.0007342873426413 16 word_p > word_p.txt% t2t_float tg_p - -23.171337 0.0007342873426413 16 -> word_p.txt% plot_x11.csh word_p.txt% plot_x11.csh word_p.txt 0 15

# CT 値 = 0～150 の部分を表示

140 / 206
測定 170516c の位相 CT 画像のヒストグラムのピークの CT 値 ≒ 7.52 (1e-6)→ byte 画像の８ビット画素値１階調ごとの CT 値の増分 = 0.0752 (1e-6)% mkdir byte_p% t2t_f.csh tg_p 0 0.0752 8 byte_p > byte_p.txt
横方向優先の順番で５×３のマトリックス状に並べる場合% pile_h.csh byte_p 117 24 15 5 3 byte_p.tif
縦方向優先の順番で３×５のマトリックス状に並べる場合% pile_v.csh byte_p 117 24 15 3 5 byte_p.tif% plot_p.csh ./byte_p.txt > byte_p.ps% plot_p.csh ./byte_p.txt 0.0376 19.1384 > byte_p.ps
0.0376 = 0.0752/2
byte 画像の画素値０に対応する CT 値の上限の値
19.1384 = 0.0752*254.5
byte 画像の画素値 255 に対応する CT 値の下限の値% xv byte_p.tif% evince byte_p.ps[13] 長さと表示輝度のスケールバーを付けた吸収と位相 CT 画像の作成（オマケ）
吸収と位相 CT 画像の両方に使える長さが 25 μm のスケールバーの画像の作成：% bar_ls.csh 250 5 50 '' '25 um' ls.tif
吸収と位相 CT のそれぞれの byte 画像の値に応じた表示輝度のスケールバー：% bar_gs.csh 750 25 50 0 "`echo 1.24\*255 | bc -l` (1/cm)"

bar_a.tif% bar_gs.csh 750 25 50 0 "`echo 0.0752\*255 | bc -l` (1e-6)" bar_p.tif
スケールバーの画像と吸収 CT の byte 画像を並べた画像を張り合わせる：% pile_gray 2 1 -250 0% pile_gray 1 2 0

255 bar_a.tif

bar_a.tif

ls.tif-50 255 browse_a.tif byte_a.tif bar_a.tif

スケールバーの画像と位相 CT の byte 画像を並べた画像を張り合わせる：% pile_gray 2 1 -250 0% pile_gray 1 2 0

255 bar_p.tif

bar_p.tif ls.tif-50 255 browse_p.tif byte_p.tif bar_p.tif

作成した吸収と位相 CT の browse 画像の確認：% xv browse_a.tif browse_p.tif

141 / 206
添付ファイル 170516c.txt### 'preparation of working directory and measured data'
mkdir 170516c
cd 170516c##/dev/shm/170516c
ln -s /work1/tsukasa/1705/170516c/a.log .
ln -s /work1/tsukasa/1705/170516c/a.HIS .

### 'data check'ls -trlL##

total 41275208##-rwx------ 1 tsukasa tsukasa##-rwx------ 1 tsukasa tsukasa 42251730944 May 16 18:52 a.HIS

14074443 May 16 18:52 a.log

head -1 a.log##

551,601,100,1,0#

scans = 551 (scans = 550 for R[I,R] images)#

views = 601 (views = 600 for half rotation CT)#

darks = 100
check_his a.HIS | uniq -c##

42251730350##

331251 128#

bytes of RP images = 42251730350 (< 42251730944)#

number of RP images = 331251 (== 551*601+100)#

width of RP images = 128#

height of RP images = 498#

type of RP images = 2#

other SIXM parameters#

Dz = 108.1 (nm)4982142 / 206#

Dr = 100 (nm) = 100e-7 (cm)#

SDD = 6220 (mm) = 6220e-3 (m)#Dp = 6.5 (um) * 16 (binning) = +104 (um)##-> Dp = -104 to notify upside-down RP
RA0 = 0 (degree)#-> RA0 = +0 to distinguish from other parameters### 'observation of RP (refraction profile) for MF (mountain flattening)'#

view = views / 2 = 300#

scan = scans / 2 = 275#

layer = height of RP images / 2 = 249#

Wm (mountain width) = Ws (samplineg width) = 5 and 10
rp+mf_ij.csh a 300 275 249 5,5 10,10##-380.329987

63949.281250##-380.329987

63949.281250### 'making RI (raw intensity) and RR (raw refraction) images'
mkdir ri rr#

his2raw a.HIS 551 601 100

ri rr > raw.log# no MF#

his2raw a.HIS 551 601 100 5 5

ri rr > raw.log# Wm = Ws = 5

his2raw a.HIS 551 601 100 10 10 ri rr > raw.log# Wm = Ws = 10#-------------------------------------------------------------------# do one of the following processings for bit-reduction, if necessary#### 'conversion from float (32 bit) to 16 bit R[I,R] images'#

t2t_float ri - 16 ri > /dev/null#

t2t_float rr - 16 rr > /dev/null#### 'conversion from float (32 bit) to 8 bit R[I,R] images'#

t2t_float ri - 8 ri > /dev/null#

t2t_float rr - 8 rr > /dev/null#--------------------------------------------------------------------

143 / 206### 'selection of bounding box on R[I,R] images'#

IJ -macro tlrb ri 1 10

tlrb.log#

IJ -macro tlrb ri 1 10 100 50 120 470 tlrb.log#

IJ -macro tlrb rr 1 10

tlrb.log

IJ -macro tlrb rr 1 10 100 50 120 470 tlrb.log
tail -1 tlrb.log
##

100

50

#

top = 100#left = 50#

right = 120#

bottom = 470

120

470

### 'making mean (or sum of) projection and refraction images'
ri2mp ri - 100 50 120 mp.tif##-0.019094 0.119755
rr2mr rr - 100 50 120 mr.tif##-1.014936 0.893499
xv mp.tif mr.tif# check tilt of horizontal line pattern### 'estimation of rotation center'ri2rc ri - 100 50 120 100 470 0.25 0.25 ri2rc.tif
##

206

343

241

##

-124

124

-3

# check consistency with mp.tif

rr2rc rr - 100 50 120 100 470 0.25 0.25 rr2rc.tif
##

206

343

241

##

-124

124

-6

#

rotation center = 241 ?

#xv -preset 4 ri2rc.tif rr2rc.tif# check consistency with mr.tif# confirmation of RMSD maps

144 / 206### 'test of image reconstruction'#

position of slice (layer) = ( top + bottom ) / 2 = 285#

base (or start) value of rotation centers = 241-0.5*7 = 237.5#

step (or interval) of rotation centers = 0.5#

total number of rotation centers = 7+1+7 = 15
setenv CBP_THREADS 8# for r[i,r]_stg_t

mkdir test_a#ri_stg_t ri - 100 50 120 285 100e-7

237.5 0.5 15 +0 test_a > test_a.log

ri_stg_g ri - 100 50 120 285 100e-7

237.5 0.5 15 +0 test_a > test_a.log

mkdir test_p
rr_stg_t rr - 100 50 120 285 6220e-3 -104 237.5 0.5 15 +0 test_p > test_p.log#

rr_stg_g rr - 100 50 120 285 6220e-3 -104 237.5 0.5 15 +0 test_p > test_p.log
xv test_a/285.tif test_p/285.tif# sinograms of layer 285#

base value for pile_[h,v].csh = 1 (0-th image == sinogram)#step value for pile_[h,v].csh = 1#

number of images for pile_[h,v].csh = 15 = 3*5 = 5*3#

pile_v.csh test_a 1 1 15 3 5 test_a.tif
pile_h.csh test_a 1 1 15 5 3 test_a.tif#

pile_v.csh test_p 1 1 15 3 5 test_p.tif
pile_h.csh test_p 1 1 15 5 3 test_p.tif
xv test_a.tif test_p.tif# tomograms with various rotation center### 'reconstruction of absorption and phase-shift images'#

rotation center = 241.0
setenv THREADS 8# for r[i,r]2tg

setenv CBP_THREADS 8# for r[i,r]_tg_t145 / 206
mkdir tg_a
#
#

ri2tg

ri - 100 50 120 100e-7

241.0 +0 tg_a > tg_a.log

ri_tg_t ri - 100 50 120 100e-7

241.0 +0 tg_a > tg_a.log

ri_tg_g ri - 100 50 120 100e-7

241.0 +0 tg_a > tg_a.log

mkdir tg_p
#

rr2tg

rr - 100 50 120 6220e-3 -104 241.0 +0 tg_p > tg_p.log

rr_tg_t rr - 100 50 120 6220e-3 -104 241.0 +0 tg_p > tg_p.log#

rr_tg_g rr - 100 50 120 6220e-3 -104 241.0 +0 tg_p > tg_p.log#

base value for pile_[h,v].csh = ( top + bottom + 1 - 24 * 14 ) / 2 ~ 117#

step value for pile_[h,v].csh = ( bottom - top + 1 ) / 15 ~ 24#

number of images for pile_[h,v].csh = 15 = 3*5 = 5*3#

pile_v.csh tg_a 117 24 15 3 5 tg_a.tif
pile_h.csh tg_a 117 24 15 5 3 tg_a.tif#

pile_v.csh tg_p 117 24 15 3 5 tg_p.tif
pile_h.csh tg_p 117 24 15 5 3 tg_p.tif
xv tg_a.tif tg_p.tif### 'procsssing for absorption CT images'
mm.csh tg_a 16##-375.003174

1699.017944

0.0316475336537728#

range of estimated LAC (CT-value) = -375.003174 ~ 1699.017944 (1/cm)#(1699.017944-(-375.003174))/(2^16-1) = 0.0316475336537728#

mkdir word_a#t2t_f.csh tg_a-375.003174 0.0316475336537728 16 word_a > word_a.txt

t2t_float tg_a - -375.003174 0.0316475336537728 16 plot_x11.csh word_a.txt
plot_x11.csh word_a.txt 0 500> word_a.txt

146 / 206##

peak CT-value = 124 (1/cm)-> CT-value step for byte (8-bit) images = 1.24 (1/cm)
mkdir byte_at2t_f.csh tg_a 0 1.24 8 byte_a > byte_a.txt#

pile_v.csh byte_a 117 24 15 3 5 byte_a.tif
pile_h.csh byte_a 117 24 15 5 3 byte_a.tif
xv byte_a.tif#

plot_a.csh ./byte_a.txt> byte_a.ps

plot_a.csh ./byte_a.txt 0.62 315.58 > byte_a.ps# 1.24/2 = 0.62
# 1.24*254.5 = 315.58

evince byte_a.ps### 'processing for phase-shift CT images'
mm.csh tg_p 16##-23.171337

24.950184

0.0007342873426413#

range of estimated RID (CT-value) = -23.171337 ~ 24.950184 (1e-6)#(24.950184-(-23.171337))/(2^16-1) = 0.0007342873426413#

mkdir word_p#t2t_f.csh tg_p-23.171337 0.0007342873426413 16 word_p > word_p.txt

t2t_float tg_p - -23.171337 0.0007342873426413 16 -> word_p.txt

plot_x11.csh word_p.txt
plot_x11.csh word_p.txt 0 15##

peak CT-value = 7.52 (1e-6)-> CT-value step for byte (8-bit) images = 0.0752 (1e-6)
mkdir byte_pt2t_f.csh tg_p 0 0.0752 8 byte_p > byte_p.txt

147 / 206#

pile_v.csh byte_p 117 24 15 3 5 byte_p.tif
pile_h.csh byte_p 117 24 15 5 3 byte_p.tif
xv byte_p.tif#

plot_p.csh ./byte_p.txt> byte_p.ps

plot_p.csh ./byte_p.txt 0.0376 19.1384 > byte_p.ps# 0.0752/2 = 0.0376# 0.0752*254.5 = 19.1384

evince byte_p.ps### 'browse images == piled byte images with length and gray scale bars'
bar_ls.csh 250 5 50 '' '25 um'

ls.tifbar_gs.csh 750 25 50 0 "`echo 1.24\*255 | bc -l` (1/cm)"

bar_a.tif

bar_gs.csh 750 25 50 0 "`echo 0.0752\*255 | bc -l` (1e-6)" bar_p.tif
pile_gray 2 1 -250 0
pile_gray 1 2 0

bar_a.tif ls.tif-50 255 browse_a.tif byte_a.tif bar_a.tif

pile_gray 2 1 -250 0
pile_gray 1 2 0

255 bar_a.tif

255 bar_p.tif

bar_p.tif ls.tif-50 255 browse_p.tif byte_p.tif bar_p.tif

xv browse_a.tif browse_p.tif

148 / 206
添付ファイル 170513a.txt### 'preparation of working directory and measured data'
mkdir 170513a
cd 170513a
ln -s /media/SSD/170513a/a.log .

# on test01.spring8.or.jp at BL47XU

ln -s /media/SSD/170513a/a.HIS .

# on test01.spring8.or.jp at BL47XU### 'data check'ls -trlL##

total 25360528##-rwx------. 1 bl47xu bl47xu##-rwx------. 1 bl47xu bl47xu 25954870272 May 13 21:04 a.HIS

14300099 May 13 21:04 a.log

head -1 a.log##

451,751,100,1,0#

scans = 451 (scans = 450 for R[I,R] images)#

views = 751 (views = 750 for half rotation CT)#

darks = 100
check_his a.HIS | uniq -c##

25954869809##

338801#bytes of RP images = 25954869809 (< 25954870272)#

number of RP images = 338801 (== 451*751+100)#

width of RP images = 128#

height of RP images = 299#

type of RP images = 2#

other SIXM parameters#

Dz = 108.1 (nm)#Dr = 100 (nm) = 100e-7 (cm)

128

299

2

149 / 206#

SDD = 6220 (mm) = 6220e-3 (m)#Dp = 6.5 (um) * 16 (binning) = +104 (um)#-> Dp = -104 to notify upside-down RP#

RA0 = 0 (degree)#-> RA0 = +0 to distinguish from other parameters### 'observation of RP (refraction profile) for MF (mountain flattening)'#

view = views / 2 = 375#

scan = scans / 2 = 225#

layer = height of RP images / 2 = 149#

Wm (mountain width) = Ws (samplineg width) = 5 and 10
rp+mf_ij.csh a 375 225 149 5,5 10,10##2.880000 63943.898438##

2.880000 63943.898438### 'making RI (raw intensity) and RR (raw refraction) images'
mkdir ri rr
his2raw a.HIS 451 751 100 10 10 ri rr > raw.log### 'selection of bounding box on R[I,R] images'
IJ -macro tlrb rr 1 10 tlrb.log
tail -1 tlrb.log
##

12

47

#

top = 12#

left = 47#

right = 112#

bottom = 298

112

298

# Wm = Ws = 10

150 / 206### 'making mean (or sum of) projection and refraction images'
ri2mp ri - 12 47 112 mp.tif##-0.009046 0.325132
rr2mr rr - 12 47 112 mr.tif##-2.835071 2.387944
xv mp.tif mr.tif# check tilt of horizontal line pattern### 'estimation of rotation center'ri2rc ri - 12 47 112 12 298 0.25 0.25 ri2rc.tif
##

168.5

280.5

193

##

-71

71

2

# check consistency with mp.tif

rr2rc rr - 12 47 112 12 298 0.25 0.25 rr2rc.tif
##

168.5

280.5

193.5

##

-71

71

-3

#

rotation center = 193 or 193.5 ?
xv -preset 4 ri2rc.tif rr2rc.tif# check consistency with mr.tif# confirmation of RMSD maps### 'test of image reconstruction'#

position of slice (layer) = ( top + bottom ) / 2 = 155#base (or start) value of rotation centers = 193-0.5*7 = 189.5#

step (or interval) of rotation centers = 0.5#

total number of rotation centers = 7+1+7 = 15
mkdir test_ari_stg_g ri - 12 47 112 155 100e-7

189.5 0.5 15 +0 test_a > test_a.log

mkdir test_p
rr_stg_g rr - 12 47 112 155 6220e-3 -104 189.5 0.5 15 +0 test_p > test_p.log
xv test_a/155.tif test_p/155.tif# sinograms of layer 155

151 / 206#base value for pile_[h,v].csh = 0 (15-th image = sinogram)#step value for pile_[h,v].csh = 1#

number of images for pile_[h,v].csh = 15 = 5*3
pile_h.csh test_a 0 1 15 5 3 test_a.tif
pile_h.csh test_p 0 1 15 5 3 test_p.tif
eog test_a.tif test_p.tif# tomograms with various rotation center### 'reconstruction of absorption and phase-shift images'#

rotation center = 193.5
mkdir tg_ari_tg_g ri - 12 47 112 100e-7

193.5 +0 tg_a > tg_a.log

mkdir tg_prr_tg_g rr - 12 47 112 6220e-3 -104 193.5 +0 tg_p > tg_p.log#

base value for pile_[h,v].csh = ( top + bottom + 1 - 19 * 14 ) / 2 ~ 22#

step value for pile_[h,v].csh = ( bottom - top + 1 ) / 15 ~ 19#

number of images for pile_[h,v].csh = 15 = 5*3
pile_h.csh tg_a 22 19 15 5 3 tg_a.tif
pile_h.csh tg_p 22 19 15 5 3 tg_p.tif
eog tg_a.tif tg_p.tif### 'procsssing for absorption CT images'
mm.csh tg_a 16##-460.169617

1631.678101

0.0319195501335164#

range of estimated LAC (CT-value) = -460.169617 ~ 1631.678101 (1/cm)#(1699.017944-(-375.003174))/(2^16-1) = 0.0319195501335164
t2t_float tg_a - -460.169617 0.0319195501335164 16 - > word_a.txt

152 / 206
plot_x11.csh word_a.txt
plot_x11.csh word_a.txt 0 500##

LAC of calcite (2.7 g/cc, CaCO3) at 8 keV = 203.149744 (1/cm)-> CT-value step for byte (8-bit) images = 203.149744e-2 (1/cm)
mkdir byte_at2t_f.csh tg_a 0 203.149744e-2 8 byte_a > byte_a.txt
pile_h.csh byte_a 22 19 15 5 3 byte_a.tif
eog byte_a.tif
plot_a.csh ./byte_a.txt 1.01574872 517.01609848 > byte_a.ps# 203.149744e-2 *0.5 = 1.01574872# 203.149744e-2 *254.5 = 517.01609848
evince byte_a.ps### 'processing for phase-shift CT images'
mm.csh tg_p 16##-37.171021

51.339115

0.0013505781033036#

range of estimated RID (CT-value) = -37.171021 ~ 51.339115 (1e-6)#(24.950184-(-23.171337))/(2^16-1) = 0.0013505781033036
t2t_float tg_p - -37.171021 0.0013505781033036 16 - > word_p.txt
plot_x11.csh word_p.txt
plot_x11.csh word_p.txt 0 15##

RID of calcite (2.7 g/cc, CaCO3) at 8 keV = 8.849336 (1e-6)-> CT-value step for byte (8-bit) images = 8.849336e-2 (1e-6)
mkdir byte_pt2t_f.csh tg_p 0 8.849336e-2 8 byte_p > byte_p.txt

153 / 206
pile_h.csh byte_p 22 19 15 5 3 byte_p.tif
eog byte_p.tif
plot_p.csh ./byte_p.txt 0.04424668 22.52156012 > byte_p.ps# 8.849336e-2 * 0.5 = 0.04424668# 8.849336e-2 *254.5 = 22.52156012
evince byte_p.ps### 'browse images == piled byte images with length and gray scale bars'
bar_ls.csh 200 4 40 '' '20 um'

ls.tifbar_gs.csh 600 20 40 0 "`echo 203.149744\*2.55 | bc -l` (1/cm)" bar_a.tif
bar_gs.csh 600 20 40 0 "`echo
pile_gray 2 1 -200 0
pile_gray 1 2 0

255 bar_a.tif

bar_a.tif ls.tif-40 255 browse_a.tif byte_a.tif bar_a.tif

pile_gray 2 1 -200 0
pile_gray 1 2 0

8.849336\*2.55 | bc -l` (1e-6)" bar_p.tif

255 bar_p.tif

bar_p.tif ls.tif-40 255 browse_p.tif byte_p.tif bar_p.tif

eog browse_a.tif browse_p.tif

154 / 206
Date:Wed, 15 Nov 2017 12:21:07 +0900

From:

Tsukasa NAKANO

To:

北山晃

Cc:

"TSUCHIYAMA, Akira", Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi,
Sugimoto Miyama, 中村隆太, Taguchi, Miyake, Aiko Nakato, megumi matsumoto,野口 高明, Minako HASHIGUCHI, MATSUNO Junya

Subject: Re: 2017B 1108_SIXM lognote
きたやまさま、
みなさま、
GSJ/AIST のなかのです。先の SIXM 実験のログノート、ありがとうございます。実験の場でその中に綴り込んだものを含む測定ごとの「再構成画像の browse 画像とそれらの画素値ヒストグラムの図」もしくは「画像再構成のテストに用いた sinogram の画像」をまとめた 171108.pdf をこの E-mail に添付します：
空気を撮影した 171108h と 171109g、および、昨日報告した 171112c の３測定を除く合計 22 の SIXMの測定データに対する図の作成処理を行った。
それらのうち 19 測定について SIXM の画像再構成用の一連の処理を完遂。
word 画像のヒストグラムの図を右側に配置したスライス画像では再構成で得た CT 値と表示輝度の対応関係を揃えていない。
AV 貝を撮影した３測定 171108a、171112a と 171112b では MF（mountain flattening）処理のな
し・ありの両方を試した。
サンプルが微妙に揺れていた２測定 171111b と 171112e に対しては sinogram の画像も作成した。
サンプルが動いていた３測定 171108b、171110b、171111d については sinogram の図だけを作成。
これらの 19 + 3 + 2 + 3 = 27 個の図のページを 171108.pdf にまとめた。
Adobe acrobat で「サイズを縮小」したのでファイル容量はおよそ 2.5 MB。
SPring-8 の計算機 vrm.spring8.or.jp のディレクトリ /media/disk/tsukasa/171108/ にこれらの図の gzip 圧
縮した PostScript ファイルをコピーしておきました：
測定番号.ps.gz：再構成画像の browse 画像と画素値ヒストグラムの図
測定番号_mf.ps.gz：MF 処理を行った結果の図
測定番号_sg.ps.gz：画像再構成のテストで用いた sinogram の画像
また、同じディレクトリ vrm.spring8.or.jp:/media/disk/tsukasa/171108/ に処理手順を記したテキストファ
イル「測定番号.txt」と「測定番号_mf.txt」もコピーしておきました。ただし、これらに記されている、ぼくが決めたサンプル回転軸の位置の値（いわゆるセンター値）には問題があるかもしれません：

155 / 206
grep

-n

'set rc='

*.txt

|

grep

-v

candidate

171108a.txt:70:set rc=144.5# rotation center

171108a_mf.txt:70:set rc=144.5# rotation center

171108c.txt:70:set rc=67.0# rotation center

171108e.txt:70:set rc=390.5# rotation center

171108g.txt:70:set rc=527.0# rotation center

171109a.txt:70:set rc=208.0# rotation center

171109b.txt:70:set rc=152.5# rotation center

171109c.txt:70:set rc=438# rotation center

171109d.txt:70:set rc=581# rotation center

171109f.txt:70:set rc=541# rotation center

171110a.txt:70:set rc=786# rotation center

171110c.txt:70:set rc=576# rotation center

171110d.txt:70:set rc=678# rotation center

171111a.txt:70:set rc=203# rotation center

171111b.txt:82:set rc=285.5# rotation center

171111c.txt:72:set rc=380# rotation center

171111e.txt:82:set rc=237# rotation center

171112a.txt:70:set rc=152.5# rotation center

171112a_mf.txt:70:set rc=152.5# rotation center

171112b.txt:70:set rc=153.5# rotation center

171112b_mf.txt:70:set rc=153.5# rotation center

171112d.txt:70:set rc=512.5# rotation center

とりあえず以上です。
On 2017/11/13 13:32:38 北山晃 wrote:> 皆様> 京大鉱物 M2 の北山です。いつもお世話になっております。
> 先日は実験お疲れさまでした。ありがとうございました。
>> 先日までの撮影のログノートをお送りいたします。
> よろしくお願い致します。
添付ファイル 171108.pdf
27 ページもあるので省略します。

156 / 206
Date:Wed, 15 Nov 2017 14:12:19 +0900

From:

Tsukasa NAKANOTo:"TSUCHIYAMA, Akira", MATSUNO Junya, Kentaro Uesugi, "TAKEUCHI, Akihisa",

Cc:

Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Taguchi, Aiko Nakato,
megumi matsumoto, 野口 高明, Minako HASHIGUCHI, Miyake

Subject: SIXM_171108_AV-3
みなさま、
GSJ/AIST のなかのです。先の SIXM 実験で入射 X 線の光量を変えて撮影した AV 貝サンプル AV-3 の CT 画
像に関する話です。
測定 170513a：５月の SIXM 実験で AV-3 を撮影（対比用）
171108a：今回の実験の最初に行った測定
171112a：171108a よりも大きな入射 X 線強度を設定
171112b：171112a の約２倍の強度に設定
これらは（ほぼ）同じスキャン幅（170513a：100 nm、今回：98.72 nm）の測定ですが、測定データファイル
a.HIS に埋め込まれていた測定時刻から得たそれぞれの refraction profile（RP）画像の露光時間は５月と今回で異なります：170513a：およそ 1/50 秒
171108a および 171112[a,b]：1/80 秒
これらの測定で得た複数の RP 画像を並べた図 av-3_rp.pdf をこの E-mail に添付しました。その左端の数値はサンプル回転のステップ番号で、横列の画像はそれぞれ上部に記したスキャン番号の位置で撮影した RP 画像です。X 線の光量を示すこれらの画像の画素値と表示輝度の対応関係は測定ごとに揃えてありますが、ページの右上に示したように γ= 2 を指定して「ガンマ補正」で強調した表示輝度になっています。ページ下部の「画素値と表示輝度の関係を示すグレースケールバー」の右端の数値（X 線強度の最大値）に注目して下さい。
これらの数値と各ページの RP 画像全部の表示輝度の明暗より、それぞれの測定で用いた入射 X 線強度は以下のようになっていたと思われます：
強度小：171108a<

171112a <170513a<171112b：強度大

この E-mail に添付した av-3_tg+hg.pdf と av-3_tg+hg_mf.pdf はそれぞれ、RP 画像に mountain flattening（MF）処理を行わなかった、もしくは、それを行った場合の吸収と位相 CT 画像の再構成処理の結果です（５月の測定の図以外は先の E-mail に添付した 171108.pdf に載せたものと同じ図です）。X 線エネルギー 8 keV
における calcite（密度 2.7 g/cc・組成 CaCo3 と仮定）の理論値が画素値 100 に対応するようにそれらの再構
成画像の上の estimated LAC や RID の値を８ビットの画素値に変換しました。また、そのような byte 画像の等間隔の８枚のスライスを並べた右側には３次元 byte 画像全体の画素値ヒストグラムの図を示しました。

157 / 206
これらより入射 X 線強度が大きくなると吸収 CT 画像の画質が良くなっていることがわかります。とは言え、強度が最小の 171108a 以外の３測定の吸収 CT 画像の画質の差異はわずかで、ぱっと見では強度と画質の関係はわかりません。それよりもむしろ、強度が最小の 171108a と最大の 171112b の吸収 CT 画像の上の物体
像の縁にある「ぼんやりとした幅が広いリング状の像」が気になります。MF を行うと RP 画像の「山」の強度値が飽和している 171112b の吸収 CT 画像ではその像はなくなっていますが、MF が無力な強度が小さい値の 171108a の画像のものは消えません。これは何に由来する偽像なのか？
とりあえず以上です。
添付ファイル av-3_rp.pdf
削除しました。

158 / 206
添付ファイル av-3_tg+hg.pdf（１ページ目；測定 170513a）

添付ファイル av-3_tg+hg.pdf（２ページ目；測定 171108a）

159 / 206
添付ファイル av-3_tg+hg.pdf（３ページ目；測定 171112a）

添付ファイル av-3_tg+hg.pdf（４ページ目；測定 171112b）

160 / 206
添付ファイル av-3_tg+hg_mf.pdf（１ページ目；測定 170513a）

添付ファイル av-3_tg+hg_mf.pdf（２ページ目；測定 171108a）

161 / 206
添付ファイル av-3_tg+hg_mf.pdf（３ページ目；測定 171112a）

添付ファイル av-3_tg+hg_mf.pdf（４ページ目；測定 171112b）

162 / 206
Date:Thu, 16 Nov 2017 11:14:26 +0900

From:

Tsukasa NAKANOTo:"TSUCHIYAMA, Akira", MATSUNO Junya

Cc:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太,
Taguchi, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI, Miyake

Subject: SIXM_171108_Fo-1
みなさま、
GSJ/AIST のなかのです。先の E-mail（後に貼り付けました）で報告した AV 貝サンプル AV-3 の画像に対するものと同様な処理を forsterite サンプル Fo-1 に対して行いました：
測定 170514a：５月の SIXM 実験で Fo-1 を撮影（対比用）
171109a：今回の実験の最初の方（入射 X 線強度を上げる前）の測定
上記の Fo-1 の測定条件は AV-3 の時と同様です：
スキャン幅：100 nm（170514a）と 98.72 nm（171109a）
RP 画像の露光時間：およそ 1/50 sec.（170514a）と 1/80 sec.（171109a）
先の E-mail のものと同様な以下の３個の PDFs を添付しました：
fo-1_rp.pdf：暗電流補正した RP 画像を並べた図
fo-1_tg+hg.pdf：MF なしの SIXM-CT 画像とそれらの画素値ヒストグラム
fo-1_tg+hg_mf.pdf：MF を行った処理結果
AV-3 の場合と同様に５月に撮影した Fo-1 の吸収 CT 画像にも「ぼんやりした幅が広いリング状の像」がありますが、それは MF を行ってもなくなりません。いずれにせよ、SIXM の吸収 CT 画像の画質は RP の「山」が飽和するくらいの入射 X 線の光量にしないとダメなようですね。とり急ぎ、
添付ファイル fo-1_rp.pdf
削除しました。

163 / 206
添付ファイル fo-1_tg+hg.pdf（１ページ目；測定 170514a）

添付ファイル fo-1_tg+hg.pdf（２ページ目；測定 171109a）164 / 206
添付ファイル fo-1_tg+hg_mf.pdf（１ページ目；測定 170514a）

添付ファイル fo-1_tg+hg_mf.pdf（２ページ目；測定 171109a）

165 / 206
Date:Thu, 16 Nov 2017 20:49:51 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya, "TSUCHIYAMA, Akira"Cc:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太,
Taguchi, Miyake, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI

Subject: 171111d
みなさま、
GSJ/AIST のなかのです。先の SIXM 実験で測定中にサンプル D06IB51 が豪快に動いていた 171111d のデー
タの修復作業を行いました。
サンプルの動きはこの E-mail に添付した 171111d.pdf の１ページ目の吸収と位相 CT 用の sinograms の図に示した通りです。これはサンプル回転角を表す番号（view）が 510 の時に発生していました。171111d の２ページ目に示した一連の「投影画像」からわかるように、view = 510 のサンプルの像の幅はその前後のものより狭くなっており、良く見ると画像上の x 座標値（scan）が 350～360 の辺りに「縦シワ」があります。このscan の時に何か起こったようです。
ただ、不思議なことに、この view のそれぞれの scan の画素値のもとになった RP 画像の測定時間は概ね1/80 秒間隔で、異常に長い・短い時間間隔の測定は見当たりません。
隣接した view の投影画像のペアの RMSD 計算を行ない、それらが概ね一致する配置を調べました。これには
top、left および right の位置を指定して R[I,R] 画像から作成した「X 線投影値（XP）」と「X 線の屈折率勾配の積算値（XR）」の画像を使いました：
mkdir

xp ;

ri2xp

ri

- top

left

right

xp

> xp.log

mkdir

xr ;

rr2xr

rr

-

left

right

xr

> xr.log

top

これらの画像のペアごとの「位置ズレ」の値 Dx と Dy は以下の通りです：
view のペア

XP の Dx, Dy

XR の Dx, Dy

508 と 509

-1, 0

0, 0

509 と 511

55, 1

56, 1

511 と 512

0, 0

1, 0

異常なしのペアでは view ごとに Dx と Dy は絶対値が１以下の値になっていますが、異常がある view = 510
を挟むペアでは Dx = 55～56 であり、水平方向にサンプルが 55×50 nm～2.75μm 程度動いたようです。

166 / 206view = 510 で生じていた位置ズレが Dx = 55 かつ Dy = 1 だとして、その食い違いを打ち消すようにそれ以降の view の XP と XR の画像すべてを修復しました。それらを使って 171111d.pdf の３ページ目の図（２ペー
ジ目の投影画像に対応）と４ページ目の図（１ページ目の sinograms に対応）を描きました。sinograms の図から像の「継ぎ目」の左半分に問題はないようですが、右の方はやや不自然な感じがします。それで、ぼくとしてはこれらを使った画像再構成は行いませんでした。
修復した XP と XR の画像を SPring-8 の計算機 vrm のディレクトリ
/media/disk/tsukasa/171108/171111d/xp//media/disk/tsukasa/171108/171111d/xr/にコピーしておきましたので、御自由にお使い下さい。先の実験の場で実行した SIXM 用の新しいプログラム"r[i,r]*" に起動時のパラメータとして
R[I,R] 画像のものの代わりに X[P,R] 画像のディレクトリ
top、left および right の値としてすべて０を指定してやれば良いはずです。
とりあえず以上です。

167 / 206
添付ファイル 171111d.pdf（１ページ目）

添付ファイル 171111d.pdf（２ページ目）

168 / 206
添付ファイル 171111d.pdf（３ページ目）

添付ファイル 171111d.pdf（４ページ目）

169 / 206
Date:Sat, 18 Nov 2017 10:46:26 +0900

From:

Tsukasa NAKANOTo:"TSUCHIYAMA, Akira", 野口 高明, MATSUNO Junya

Cc:

Kentaro Uesugi, "TAKEUCHI, Akihisa", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太,
Taguchi, Miyake, Aiko Nakato, megumi matsumoto, Minako HASHIGUCHI

Subject: Re: 171111d
つちやまさま、のぐちさま、
みなさま、
GSJ/AIST のなかのです。E-mails ありがとうございます。AIST の E-mail 配信ソフトの不調で応答が遅くなりました。一昨日の晩の E-mail の訂正と補足です。
(1) 訂正> view = 510 で生じていた位置ズレが Dx = 55 かつ Dy = 1 だとして、
横方向の位置ズレは Dx = 56 としました。また、サンプルの像が異常だった view = 510 の X[P,R] 画像はview = 509 と 511 の画像を平均したものにしました。
(2) 補足> 先の実験の場で実行した SIXM 用の新しいプログラム "r[i,r]*" に起動時のパラメータとして>

R[I,R] 画像のものの代わりに X[P,R]画像のディレクトリ

>top、left および right の値としてすべて０> を指定してやれば良いはずです。
修復した X[P,R] 画像を使った画像再構成の処理は以下のようにします：
ri2rc

xp

0

0 11

365.5

608.5

608

-67

67

-6

rr2rc

xr

-

-

0

0

0

0

279

0.25

0.25

xp2rc.tif

11 2790.25

0.25

xr2rc.tif

365.5

608.5

606.5

-67

67

-4

ここで、起動時に指定したパラメータ「000」は top、left、right の値、また、「11 と 279」はサンプル

像の上・下端の位置（== R[I,R] 画像に対する top と bottom の値）です。なお、サンプル回転軸の推定位置が指定した範囲の端に近いので、探索範囲「0.25
とり急ぎ、0.25」を「0.50.25」にした方が良いかもしれません。

170 / 206
Date:Tue, 12 Dec 2017 21:23:29 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya, "TSUCHIYAMA, Akira", Kentaro Uesugi

Cc:"TAKEUCHI, Akihisa", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Taguchi,
Miyake, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI

Subject: 6mct_steady_vertical_creep
みなさま、
GSJ/AIST のなかのです。
先月の前半の SIXM 実験でデビューした新しいプログラム ri2mp、rr2mr、
ri2stg_[t,g]、
rr2stg_[t,g]、ri2tg_[t,g] と rr2tg_[t,g] に対しても先月後半の FZP-CT 実験の後の E-mails で紹介した通常 CT
用のプログラム hp_ta、hp_stg_[t,g] と hp_tg_[t,g] に対するものと同様な「測定サンプルの定常な鉛直方向のクリープ」を仮定した「縦ズレ」の検出および補正の機能を付加しました。
縦ズレの検知機能を付加した SIXM 用のプログラム
ri2mp

RI/

NF

top

left

right

MP.tif{SVC.txt}

rr2mr

RR/

NF

top

left

right

MR.tif{SVC.txt}

縦ズレの補正機能を付加した SIXM 用の画像再構成プログラム
ri_stg_[t,g]

RI/

NF

top

left

right

layer

Dr

RC_base

step

count

{Dz}

RA0

rr_stg_[t,g] RR/ NF

topleft right layer SDD{-}Dp RC_base step

count {Dz}ri_tg_[t,g]

RI/

NF

top

left

right

{layer1

layer2}Dr

RA0 TG/

rr_tg_[t,g]

RR/

NF

top

left

right

{layer1

layer2}

SDD

{-}Dp

RC

layer

RA0

STG/

RC

{Dz}

{Dz}

STG/

RA0 STG/

RA0

TG/

オマケ：通常 CT 用のプログラム
hp_ta

HiPic/

TA.tif{SVC.txt}

hp_stg_[t,g]HiPic/

Dr

RC_basestep

hp_tg_[t,g]HiPic/

DrRC{layer1

{Dz}

count

{Dz}

layer2}RA0

TG/

通常 CT 用のものと同様に SIXM 用のプログラムに付加した新機能はオプションです。つまり、起動時にファイル名 SVC.txt や縦ズレ量 Dz を指定しなければ ri2mp、rr2mr、ri2stg_[t,g]、rr2stg_[t,g]、ri2tg_[t,g] とrr2tg_[t,g] は従来通りの処理を行います。そして、それらを指定した場合の処理内容は先の E-mails で説明した通常 CT 用のプログラムのものと概ね同じです。
すみません。SIXM の画像再構成の手順書には新機能の使用例は未記載です。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct_recipe.txt

171 / 206
改造したプログラムのソースコードや Windows の実行ファイルの類を SIXM 用の新しいプログラム用の書庫
ファイルに入れておきました。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zip
先月の SIXM 実験の測定データを使って改造したプログラムをテストしました。そのためにまず、11/15 のSubjiect が「Re: 2017B 1108_SIXM lognote」の E-mail などで紹介した SPring-8 での実験中とその直後にぼくが行った画像再構成などの処理内容を記録した（C-shell script としての実行が可能な）22 個のテキストフ
ァイル「測定番号.txt」のそれぞれの２行づつを書き換えました。UNIX コマンド「diff」による測定 171112dの修正前後のファイルの比較は以下の通りです（ディレクトリ old/ の下のものが修正前のファイル）：
diff

old/171112d.txt

171112d.txt→
35,36c35,40< ri2mp ri - $tlrb[1-3] mp.tif >/dev/null< rr2mr rr - $tlrb[1-3] mr.tif >/dev/null--> ri2mp ri - $tlrb[1-3] mp.tif /dev/null>#-0.086276>#-40.210388← MP の最小値と最大値

1.835379e-02← 縦ズレの推定値と RMV の値> rr2mr rr - $tlrb[1-3] mr.tif /dev/null>#-0.340046>#-40.725172← MR の最小値と最大値

5.154475e-02← 縦ズレの推定値と RMV の値

注
RMV = root mean variance（MP や MR 画像の上の縞の上の値のばらつき）
このようにして得た「通常の CT の X 線 total absorption（TA）画像に対応する MP と MR の画像」から推定
した縦ズレの値 Dz_MP と Dz_MR は以下のようになりました。比較のため、プログラム ri2rc や rr2rc で推定した「サンプル回転角が０と 180 度の RI や RR 画像のペア」の縦ズレの値 Dz_RI や Dz_RR も併記しました。
set

Dz_RI

Dz_RR

Dz_MP Dz_MR

171108a

-4

0

-3

-4

171108a_mf -4

0

-3

-4

171108b

-2

-6

-2

-2

171108c

-76

-11

1

0

171108e

1

4

1

0

171108g

2

4

1

0

172 / 206
171109a

-58

-2

-6

-3

171109b

-4

-15

-5

-5

171109c

-6

2

-7

-7

171109d

-8

6

-6

-7

171109f

-2

-6

-1

-1

171110a

-8

-4

-7

-7

171110b

-6

-14

-7

-7

171110c

-1

-16

-1

-1

171110d

-7

-12

-7

-7

171111a

-63

-3

-7

-7

171111b

-15

-13

-14

-10

171111c

-1

-9

0

-2

171111d

-5

-3

-4

-3

171111e

-5

1

-2

-2

171112a

-5

-11

-3

-2

171112a_mf -5

-11

0

-2

171112b

-2

-25

0

0

171112b_mf -2

-25

0

0

171112d

-3

-4

-4

-5

これらより、測定ごとの Dz_RI と Dz_RR の値の差に比べて Dz_MP と Dz_MR の値の差が小さいことがわかります。特に 171108c、171109a や 171111a の Dz_RI のような突出した値は Dz_MP や Dz_MR にはありません。サンプル回転角が０度と 180 度の R[I,R] 画像から推定した縦ズレの値よりも Dz_MP や Dz_MR の方がノイズに強いロバストな値のような気がします。
上記の推定値から先月の SIXM 実験の時に発生していた縦ズレは FZP-CT 実験の時のような「定盤の不具合」
によるものでなく、個々の測定サンプルの保持法に由来するものではないかと思われます。
On Fri, 1 Dec 2017 15:00:37 +0900 Kentaro UESUGI wrote:> この「定常的なクリープ」のような現象はこれまでに> １～２回あったのですが、おそらく定盤の不具合だと考えていました。
> （定盤のネジが１カ所緩んでいたとか、その程度の話ですが、サブミクロンだと結構効く）> 今回は定盤も動かしていないのでイマイチ原因の見当がつかないのですが、> 冬の停止期間か春の停止期間に定盤の上側だけを入れ替えようかと> 思っています。今のやつは２本レールですが、３本レールにして> 安定性が良くなればいいなという考えです。

173 / 206
それはともかく、２種類の手法で推定した４個の Dz が同程度の大きな値だった測定 171111b に対して０度と 180 度の RI もしくは RR 画像のペアの観察
ImageJ のマクロ svc.txt を用いた MP と MR 画像のそれぞれの skew 変換などを行うと Dz ≒ -13 程度の縦ズレがあったことは確かなようです。そこで改造したプログラム ri_tg_g と
rr_tg_g を用いて Dz = -13 と仮定した縦ズレを補正しつつ測定 171111b の吸収および位相 CT 画像を再構成してみました。
set

dr=98.72e-7

set

sdd=6.340

set

dp=104.0@ top = 25
@ left = 0@ right = 19
set

rc=285.5

set

dz=-13

mkdir

tg_a

tg_p

ri_tg_g

ri

-

$top

$left

$right$dr

rr_tg_g

rr

-

$top

$left

$right

$sdd

$rc

$dz

$dp

0

$rc

tg_a
$dz

> tg_a.log0tg_p> tg_p.log

こうして得た吸収および位相 CT 画像とそれらの画素値ヒストグラムの図をこの E-mail に添付した
171111b.pdf の下部に載せました。その上部のものは前述の 11/15 の E-mail に添付した 1711108.pdf に載せた縦ズレ補正なしの CT 画像と画素値ヒストグラムです。縦ズレ補正によって CT 画像の画質がわずかに向上した感じです。また、補正の有無でヒストグラムの形も少し違っているようです。
SIXM CT の縦ズレ検出と補正の話はとりあえず以上です。なお、前述の修正した「測定番号.txt」を含む先月の SIXM 実験に関するファイルはすべて計算機 vrm の以下のディレクトリに置いてあります。
/media/disk/tsukasa/171108/：SIXM の測定データファイル "a.*" を含む。総容量は 1.1 TB/media/ssd/tsukasa/171108/：a.HIS、a.log と a.bmp を消去した。1.7 GB「測定番号.txt」の実行結果の再構成画像などは消去しましたが、ディレクトリ 171111b/ の下には測定
171111b の縦ズレの確認用の以下の画像があります。
r[i,r]_000.tif：サンプル回転角が０度の R[I,R] 画像
r[i,r]_750.tif：180 度の R[I,R] 画像
m[p,r].tif：M[P,R] の画像
これらを自由にお使い下さい。とり急ぎ、

174 / 206
添付ファイル 171111b.pdf

175 / 206
Date:Fri, 19 Jan 2018 17:15:27 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa"

Cc:

MATSUNO Junya, "TSUCHIYAMA, Akira", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太,
Taguchi, Miyake, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI

Subject: 6mct_MR
みなさま、
GSJ/AIST のなかのです。昨年 12/12 の E-mail の続報です。SIXM-CT において「サンプルの定常的な鉛直方向のクリープ」を仮定した場合の、サンプル回転角ごとのRI（暗電流補正した X 線強度）or XP（X 線投影値）画像
RR（暗電流補正した X 線屈折量）or XR（原点補正した X 線屈折量）画像の「縦ズレ」の補正処理で用いた
MP 画像（回転角ごとの XP 画像の横列の画素の値の平均値の画像）
MR 画像 （回転角ごとの XR 画像の横列の画素の値の平均値の画像）のうちの後者に関して「重要なこと」に気づいたので、その話をします。
まず、この E-mail に添付した以下の PDFs を御覧下さい。昨年 11 月の SIXM-CT の測定 171111b の M[P,R]
画像などが示されています。
171111b_xm.pdf
回転角が０と 180 度の X[P,R] 画像および M[P,R] 画像。ただし、M[P,R] 画像の左端の列の各画素の値= 回転角が０の X[P,R] 画像の各行の画素の値の平均値、
M[P,R] 画像の右端の列の各画素の値= 回転角が 180 度の X[P,R] 画像の各行の画素の値の平均値。
各画像の画素値の値域はそれぞれの上部に記した「min. ~ max.」だが、[X,M]P と [X,M]R 画像のト
リオごとに画素値と表示輝度の対応関係をグレースケールバーで示したものに揃えた（各トリオの２個の X[P,R] 画像の画素のうちの最小・最大値付近の値を持つものを除外した 98 %の画素の値の範囲を表示輝度に線形に割り当てる対応関係にした）。また、M[P,R] 画像の上部にプログラム
r[i,r]2m[p,r] で推定した「縦ズレ量 Dz」を記した。その値から計算した M[P,R] 画像の左右の青線と赤線で示した端点のそれぞれを結んだ方向にサンプルがクリープしたはず。
171111b_mh.pdf
M[P,R] 画像の画素値ヒストグラムと r[i,r]2m[p,r] で推定した Dz を指定して下記のせん断（skew）
変換を行った M[P,R]画像。
x' = xy' = { Dz / ( Nx - 1 ) }・x + y176 / 206
ただし、x、y：変換前の M[P,R] 画像の上の座標値
x'、y'：変換後の M[P,R] 画像の上の座標値
Nx：M[P,R] 画像の横画素数（変換前後で同じ値）== サンプル 180 度回転のステップ数（views）+ 1
なお、昨年 12/8 の E-mails で紹介したように、ImageJ 用のマクロ svc.txt を使えば M[P,R] 画像のskew 変換を実行できる：
IJ-macrosvc

171111b/mp.tif

-14 ←

IJ

-macrosvc

171111b/mr.tif-10

Dz = -14← Dz = -10

このように、プログラム r[i,r]2m[p,r] で推定した Dz の値を与えた skew 変換によって M[P,R] 画像の上の傾いた「縞模様」を水平に戻すことができます。それと同様にして R[I,R] 画像を回転角に関して skew 変換した
後に画像再構成できるよう改造した SIXM-CT 用のプログラムを昨年 12/12 の E-mail で紹介しました。この「縦ズレ補正」の理論的背景？は以下の通りです。
ぼくが気づいた「重要なこと」は MR 画像の縞模様に関する話ですが、その理解には下記の理論的背景？
の理解が必要です。
吸収 CT の場合をまず考えます。以前にも何度か説明したように（測定中にサンプルの鉛直方向のクリープなどが発生していない）理想的な吸収 CT の測定では「MP 画像の値 MP(θ,z) に対応している total absorptionの値 TA(θ,z)」はサンプル回転角θによらず「CT 画像のスライス断面の位置 z ごとに一定の値」になっているはずです（そうなっていないと CT 画像の再構成ができない）：
r を XP 画像の横方向の座標値とすると、XP(r,z,θ) = ∫ LAC(r,s,z) ds← X 線投影値は X 線光路 s に沿ったサンプル内部の LAC の積算値
TA(θ,z) = ∫ XP(r,z,θ) dr = ∫∫ LAC(r,z,s) ds dr← TA の値は位置 z の断面における LAC の総和（一定値）
なお、Nr と Dr を XP 画像の横方向の画素数と画素の辺長とすると、TA(θ,z) ≒ MP(θ,z)・Nr・Dr = MP(θ,z) × XP 画像の実寸の横幅
それゆえ、理想的（or 正常）な MP 画像にはθ（横）方向に延びた一定の値を保持している線構造（== 真横方向に延びる縞模様）が含まれているはずです。これを逆に考えると、サンプルが鉛直方向の定常なクリープをしている（と仮定できる）測定の MP 画像では縞模様は真横方向から傾いているはずであり、それと平行な方向に切り直したスライス断面の CT 画像なら正常に再構成できるはずです。この処理を実行できるように
SIXM の吸収 CT 用の画像再構成プログラム ri_stg_[t,g] と ri_tg_[t,g] を改造しました。

177 / 206
位相 CT の「縦ズレ補正」の理論的背景？も吸収 CT の場合と概ね同じです：
X 線屈折率 n と RIDn(r,s,z) = 1 - RID(r,s,z)s 軸方向に平行な X 線光路に直交する r 軸方向の X 線屈折率勾配∂n / ∂r = - ∂RID / ∂r
積算 X 線屈折率勾配と屈折角 A
光線方程式（Fermat の原理）より、∫ (∂n / ∂r) ds ≒ sin(A) ≒ A(r,z,θ) ≒ tan(A) = XR(r,z,θ)・Dp / SDD
ただし、
Dp：refraction profile（RP）画像の画素の横幅
SDD：sample-detector distance
屈折角の総和（total refraction？）TR(θ,z) = ∫ A(r,z,θ) dr ≒ ∫∫ (∂n / ∂r) ds dr

式 [a]≒ MR(θ,z) ・Nr・Dr・Dp / SDD
吸収 CT の場合と同様に位相 CT でも「MR 画像の値 MR(θ,z) に対応している total refraction？の値 TR(θ,z)」はサンプル回転角θによらず「CT 画像のスライス断面の位置 z ごとに一定の値」になっているはずです（そうなっていないと CT 画像を再構成できない）。それに基づいてプログラム rr2mr で MR 画像から推定した Dzの値を用いて「縦ズレ補正」ができるように SIXM-CT の画像再構成プログラム rr_stg_[t,g] と rr_tg_[t,g] を改造しました。
以上で「縦ズレ補正」の理論的背景？の説明は終了ですが、位相 CT の式 [a] に関して馬鹿なことに気づきました。その式を以下のように書き換えてみます：
TR(θ,z) ≒ ∫ B(s,z,θ) ds
B(s,z,θ) = ∫ (∂n / ∂r)

dr

式 [b]

さて、位相 CT で測定している屈折角 A は X 線屈折率勾配の積算値なので、サンプル内部の屈折率（もしくはRID）の再構成では前処理として「屈折率勾配の積算値」から「屈折率の積算値」を推定する必要があります。
この「位相回復」の処理では通常は以下を仮定します：∂n / ∂r ≒ dn / dr ← n の r に関する偏微分を常微分と見なす。
これを式 [b] の積分に適用すると B(s,z,θ) は以下の値になります：B(s,z,θ) ≒ ∫ ( dn / dr ) dr = ∫ dn = nL(s,z,θ) - nR(s,z,θ)
ただし、nL(s,z,θ)：RR や XR 画像の左端の位置における X 線屈折率nR(s,z,θ)：RR や XR 画像の右端の位置における X 線屈折率
そして、RR や XR 画像（or SIXM の視野）の左右の端にあるのは空気なので、
nL ≡ 0 かつ nR ≡ 0 → B(s,z,θ) ≡ 0 → TR(θ,z) ≡ 0。

178 / 206
つまり、MR 画像の画素値は常に０になるはずです。この結論はサンプルが定常的にクリープしている測定でも有効です。前述の 171111b_mh.pdf に示した MR 画像の画素値ヒストグラムは画素値０にランダムノイズが乗った Gauss 分布に似た形状になっています（ただし、Gauss 分布とは微妙に違います；確認済み）。
注
プログラム rr2mr は MR 画像の「縞模様」が「一定の値」と仮定しているだけなので、その値が０でも縦ズレ量 Dz を推定可能です。
以上のことから、MR 画像に発生している「縞模様」は何らかの系統的な雑音に起因したものだと考えられます（これがぼくが気づいた「重要なこと」です）。問題はその素性で、以下のものを思い付きました。
位相回復の処理の失敗
２通りのものが考えられます。一つ目はサンプルの縁（エッジ）で発生するデルタ関数的な屈折率（== 位相）勾配に伴う雑音です。ただし、この屈折率勾配の雑音はサンプル回転角に応じて変化するので、縞模様を発生させるのではなくその「一定値」を乱すだけかもしれません。
もう一つは鉛直方向の位相勾配の影響（∂n / ∂r ≠ dn / dr）ですが、ぼくにはその評価ができません。ただし、その影響が大なら画像再構成の時に行う位相回復も失敗するはずですが、...。
吸収勾配による X 線マイクロビームの重心の位置ズレ
これについては竹内さんからの 2015/10/20 の E-mail で「ぼくの考えは間違っている」と言われたので詳しい話は省略します。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/SIXM_mails.pdf#page=102
ただし、以下のことは正しいと思われます：
SIXM では X 線マイクロビームの重心の位置で屈折量を決めている。
マイクロビームの形状はサンプルの LAC の空間分布に左右される。
LAC の空間勾配が大きい場合、屈折量の推定に誤差が生じるはず。
測定した屈折量には吸収（LAC）に起因する誤差が含まれるはず。
つまりは、MR 画像の縞模様は吸収（LAC）に起因する？
と言う訳で、MR 画像の０ではない値の「縞模様」の素性は現時点では不明です。
最後の方はいい加減になりましたが、とりあえず以上です。

179 / 206
添付ファイル 171111b_xm.pdf

添付ファイル 171111b_mh.pdf.

180 / 206
Date:Fri, 19 Jan 2018 18:18:44 +0900

From:

Tsukasa NAKANO

To:

Kentaro Uesugi, "TAKEUCHI, Akihisa", MATSUNO Junya

Cc:"TSUCHIYAMA, Akira", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Taguchi,
Miyake, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI

Subject: 6mct_MR_補足
みなさま、
GSJ/AIST のなかのです。先程の E-mail に以下のように書きましたが、これは言葉足らずでした。
On Fri, 19 Jan 2018 17:15:27 +0900 Tsukasa NAKANO wrote:>

注>プログラム rr2mr は MR 画像の「縞模様」が「一定の値」と仮定して>いるだけなので、その値が０でも縦ズレ量 Dz を推定可能です。

SIXM-CT の MR 画像は原理的には値０の画像であり、そこに含まれる「縞模様」の素性が不明なので、プロ
グラム rr2mr による縦ズレの推定値 Dz が何を表しているのかわかりません。SIXM-CT で「サンプルの定常的な鉛直方向のクリープを仮定した縦ズレ補正」を行う場合は ri2mp で推定した値 Dz をお使い下さい。
とり急ぎ、
Date:

Sat, 20 Jan 2018 11:59:01 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

Kentaro Uesugi, "TAKEUCHI, Akihisa", "TSUCHIYAMA, Akira", Masayuki Uesugi,
北山晃, Sugimoto Miyama, 中村隆太, Taguchi, Miyake, Aiko Nakato, megumi matsumoto,野口 高明, Minako HASHIGUCHI

Subject: Re: 6mct_MR_補足
まつのさま、
なかのです。E-mail ありがとうございます。
> ただ、推定した Dz よりも、Dz の半分くらいの値(Dz / 2)のほうが像質が上がっている> ように思うこともあり、
これは、測定中にサンプルがしだいに倒れて行く場合のように、サンプルが鉛直方向の等速度運動ではなく（等）加速度運動をしている

181 / 206ということですかね。その場合は画像再構成用プログラムに組み込んだ「縦ズレ補正」は無力ですが、Dz/2 を使うと「実際の加速度運動を最も良く近似する等速度運動」になるのかもしれません。とり急ぎ、On Fri, 19 Jan 2018 20:21:40 +0900 MATSUNO Junya wrote:> 中野さま> 松野です。いつもありがとうございます。
>> こちらでの再構成は、ri2mp で推定した Dz を使っています。
> ただ、推定した Dz よりも、Dz の半分くらいの値(Dz / 2)のほうが像質が上がっている> ように思うこともあり、> 現状は、ri_stg をいくつかの Dz で試して見た目をチェックして本番用の Dz を採用しています。
>> 回転軸と Dz の 2 個のパラメータをチェックすると時間がかかるのですが、仕方がないのかな、> と思っています。

182 / 206
Date:Tue, 23 Jan 2018 18:23:20 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya, "TSUCHIYAMA, Akira", Kentaro Uesugi

Cc:"TAKEUCHI, Akihisa", Masayuki Uesugi, 北山晃, Sugimoto Miyama, 中村隆太, Taguchi,
Miyake, Aiko Nakato, megumi matsumoto, 野口 高明, Minako HASHIGUCHI

Subject: Re: 6mct_steady_vertical_creep
みなさま、
GSJ/AIST のなかのです。測定サンプルの steady vertical creep の検出・補正に関する説明を「（新しいプログ
ラムを使った）SIXM の画像再構成の手順書」
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct_recipe.txt
追加しました。とり急ぎ、
On Tue, 12 Dec 2017 21:23:29 +0900 Tsukasa NAKANO

wrote:> みなさま、>> GSJ/AIST のなかのです。先月の前半の SIXM 実験でデビューした新しいプログラム ri2mp、rr2mr、> ri2stg_[t,g]、rr2stg_[t,g]、ri2tg_[t,g] と rr2tg_[t,g] に対しても先月の後半の FZP-CT 実験の後の E> mails で紹介した通常 CT 用のプログラム hp_ta、hp_stg_[t,g] と hp_tg_[t,g] に対するものと同様な> 「測定サンプルの定常な鉛直方向のクリープ」を仮定した「縦ズレ」の検出および補正の機能を付加> しました。
> ...
>
>
>
> ...

すみません。SIXM の画像再構成の手順書には新機能の使用例は未記載です。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct_recipe.txt

183 / 206
Date:Tue, 23 Jan 2018 17:59:58 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

MIYAKE, Kentaro UESUGI, Akihisa TAKEUCHI, "TSUCHIYAMA, Akira",
北山晃, Miyama Sugimoto, Taguchi, megumi matsumoto,野口 高明, Tooru Matsumoto, okumura.shota.82e, Minako HASHIGUCHI, Aiko Nakato, 中村隆太

Subject: Re: 2017B の DET-SIXM の絵合わせ
まつのさま、
なかのです。松野君が位置決め処理を行った Acfer094-lith1-9 を撮った SIXM の測定 171110b は失敗です。
2017/11/15 に差し上げた件名「Re: 2017B 1108_SIXM lognote」の E-mail に添付した 171108.pdf の 13 ページ目の sinogram の図（この E-mail に再添付した 171110b_sg.pdf）からわかるように、サンプル回転角が180 度付近の sinogram の形状が変です（回転角に応じて左右に変化していない縦方向に伸びた sinogram になっています）。また、この E-mail に添付した 171110b_mpr.pdf に示した（アスペクト比を通常のものから変えた）M[P,R] 画像からわかるように、それらの上の横に延びる「縞模様」は一様に傾いているのではなく、途中から傾きが変わっています。つまり、測定 171110b のサンプルの動きは steady vertical creep と仮定できません。と言うわけで、松野君が行っている以下の方法はダメです。
> 深く考えずに、Dz を振ってみて、良さそうなのを選ぶ、としています。
また、失敗した測定のデータを SIXM の画素サイズの検定に使うのもダメです。
このようなダメな測定の詳細（何がダメだったのか）をきちんと記録しておき、その原因を解明することが重要だと思います。とり急ぎ、On Sun, 21 Jan 2018 09:45:04 +0900 MATSUNO Junya wrote:> 中野さま> 松野です。ご返信ありがとうございました。
> > サンプルが鉛直方向の等速度運動ではなく（等）加速度運動をしている> なるほど、加速度運動しているのかもしれませんね。
> 個人的には、サンプル自身の問題(固定法やビームダメージ?) + ステージの鉛直の> 等速度運動の足し合わせなのかな、、と思っていますが、> 深く考えずに、Dz を振ってみて、良さそうなのを選ぶ、としています。

184 / 206
On Sun, 7 Jan 2018 23:56:46 +0900 MATSUNO Junya wrote:> みなさま>> 松野です。
> この件に関して、Acfer094-lith1-9 で、再構成の svc 補正(等速の縦のクリープ)を行い、> DET の 7,8 keV と SIXM のレジストレーションを行いました。
> DET の 8keV の値を固定し、中野さんの手法でピクセルサイズの最適値を求めたところ、>> SPring-8 での値 --> 最適値> xy : 49.36 --> 48.26> z : 106.4 --> 103.4>> となりました。
> この値は、北山くんの時に求めた> > xy : 49.36 --> 48.2
> > z : 106.4 --> 103.6> とほぼおなじでした。
>> ということで、やはりボクセルの対角線では、3%くらいズレているようです。
添付ファイル 171110b_sg.pdf

185 / 206
添付ファイル 171110b_mpr.pdf

Date:Wed, 24 Jan 2018 15:38:02 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

MIYAKE, Kentaro UESUGI, Akihisa TAKEUCHI, "TSUCHIYAMA, Akira",
北山晃, Miyama Sugimoto, Taguchi, megumi matsumoto, 野口 高明,
Tooru Matsumoto, okumura.shota.82e, Minako HASHIGUCHI, Aiko Nakato, 中村隆太

Subject: Re: 2017B の DET-SIXM の絵合わせ
まつのさま、
なかのです。E-mail ありがとうございます。
> 松本恵さんに指摘されるまで私も忘れていたのですが、1/7 に私がお送りしたメールで処理した> Acfer094-lith1-9 の SIXM の測定データは、> 171110c です。
それは失礼しました。昨年 11 月の SIXM 実験の終了直後（2017/11/12 10:14:16）のつちやまさんの E-mailに添付されていたサンプルリストでは測定 171110b と 171110c が線で区切られた別の行に記されていたので、勘違いしました。

186 / 206> ご連絡いただきました 171110b とは違い、鉛直等速運動が綺麗に出ていたように思います。
この E-mail に添付した 171110c.pdf（昨年の 11/15 に差し上げた E-mail に添付した 171108.pdf の 14？ペー
ジと同じもの）でわかるように、171110c の吸収および位相 CT 画像に問題はないようですね。ただし、このE-mail に添付した 171110c_mpr.pdf からわかるように、M[P,R] 画像から推定した縦ズレ量は -1 であり、171110c では steady vertical creep は発生していないのでは？
> > E-mail に添付した 171110b_mpr.pdf に示した（アスペクト比を通常のものから変えた）M[P,R] 画像> 縦方向に伸ばされたのでしょうか。
そうです。171110[b,c]_mpr.pdf の上の M[P,R] 画像は画素の横と縦の辺長を 1:5 にして表示しています ...
そもそも、M[P,R] 画像の横軸と縦軸は異なる種類の値（横：サンプルの回転角、縦：鉛直方向の座標値）を表しているので、それらを 1:1 で表示する必然性はありません。
> >> 深く考えずに、Dz を振ってみて、良さそうなのを選ぶ、としています。
> > steady vertical creep と仮定できません。
> 鉛直な等速運動では仮定できない、、となった場合は、補正しない方がいいのでしょうか。
> 物理的な背景がわからないままに実験のデータを補正するべきでない、
ぼくはそう思っています。SIXM 実験は「実験」なので、失敗した測定結果は「実戦」で使うのではなく、問題点の解明の材料にすべきだと思っています。
> 綺麗に見える絵が再構成された時のパラメータは、未補正時よりも実験を> よく表現できている、と思うのですが。
問題は「綺麗に見える」で、何を根拠に「綺麗」と判断したのかがわかりません。
> > 失敗した測定のデータを SIXM の画素サイズの検定に使うのもダメです。
> 去年から問題になっている画素サイズの件、実はクリープが原因、、なんてこともあるのでしょうか。
> 中野さんが hp_tg にクリープ補正を追加してくださったので、total absorption の画像作成を含め、> 中藤サンプルあたりからの再構成をチェックしていっています。
> そして、結構動いているようです、、。
> ...
> 去年度の SIXM のクリープチェックはまだできていないので、それ次第なのでしょうが。
TA の画像を並べるなどして、上記のことを誰でもわかるように紹介して下さい。
とり急ぎ、

187 / 206
On Wed, 24 Jan 2018 12:53:47 +0900 MATSUNO Junya wrote:> 中野さま> 松野です、コメントいただきまして、ありがとうございます。
>> 松本恵さんに指摘されるまで私も忘れていたのですが、1/7 に私がお送りしたメールで処理した> Acfer094-lith1-9 の SIXM の測定データは、> 171110c> です。なので、ご連絡いただきました 171110b とは違い、鉛直等速運動が綺麗に出ていたように思います。
>> > E-mail に添付した 171110b_mpr.pdf に示した（アスペクト比を通常のものから変えた）M[P,R] 画像> 縦方向に伸ばされたのでしょうか。
> 強調して見ると、とてもわかりやすいですね。
>> >> 深く考えずに、Dz を振ってみて、良さそうなのを選ぶ、としています。
> > steady vertical creep と仮定できません。
> 鉛直な等速運動では仮定できない、、となった場合は、補正しない方がいいのでしょうか。
> 物理的な背景がわからないままに実験のデータを補正するべきでない、というのはよくわかるのですが、> 綺麗に見える絵が再構成された時のパラメータは、未補正時よりも実験をよく表現できている、> と思うのですが。
>> > 失敗した測定のデータを SIXM の画素サイズの検定に使うのもダメです。
> 去年から問題になっている画素サイズの件、実はクリープが原因、、なんてこともあるのでしょうか。
> 中野さんが hp_tg にクリープ補正を追加してくださったので、total absorption の画像作成を含め、> 中藤サンプルあたりからの再構成をチェックしていっています。
> そして、結構動いているようです、、。
>> 例えば、Acfer094-DI：> 160725a (7keV, サンプル上部)> 160725b (7keV, サンプル下部)> 160725c (8keV)> では、hp_ta が出力する dz の値は、
> 160725a 3> 160725b -8> 160725c -1> となっていて 25a, 25b では大きいことがわかります。
> 実際の ta の画像を観察すると、> 25a は、クリープしているように思いますが、後半にサンプルがガクッと上がっているのがわかりました。

188 / 206> 25b は、25a のようにガクッと変わることはなく、だらだら下がっているだけの気がします。
> 一方、25c は動いているかどうか、よくわかりません。(撮影時間が短いからか。
）>> とはいえ、7keV-8keV でのピクセルサイズ比はそんなにずれていなかったので、> このクリープ量が一連の画素サイズ問題の主犯では気もします。
> 去年度の SIXM のクリープチェックはまだできていないので、それ次第なのでしょうが。
添付ファイル 171110c.pdf

189 / 206
添付ファイル 171110c_mpr.pdf

Date:Sat, 27 Jan 2018 14:30:42 +0900

From:

Tsukasa NAKANOTo:

MATSUNO Junya

Cc:

MIYAKE, Kentaro UESUGI, Akihisa TAKEUCHI, "TSUCHIYAMA, Akira",
北山晃, Miyama Sugimoto, Taguchi, megumi matsumoto, 野口 高明,
Tooru Matsumoto, okumura.shota.82e, Minako HASHIGUCHI, Aiko Nakato, 中村隆太

Subject: TA 画像などからの縦ズレ検出
まつのさま、
GSJ/AIST のなかのです。通常 CT の TA 画像や SIXM-CT の M[P,R] 画像から steady vertical creep の縦ズレ
Dz を検出する際にそれらの画像上の縦方向の調査範囲を指定できるようプログラム hp_ta や r[i,r]2m[p,r] を改造しました。
On Wed, 24 Jan 2018 12:53:47 +0900 MATSUNO Junya

wrote:> > 失敗した測定のデータを SIXM の画素サイズの検定に使うのもダメです。
> 去年から問題になっている画素サイズの件、実はクリープが原因、、なんてこともあるのでしょうか。
> 中野さんが hp_tg にクリープ補正を追加してくださったので、total absorption の画像作成を含め、> 中藤サンプルあたりからの再構成をチェックしていっています。

190 / 206
hp_ta や r[i,r]2m[p,r] に対する（それらが作成した）TA や M[P,R] 画像上の縦方向の調査範囲 y1～y2 の指定はオプションで、ファイル SVC.txt を指定して縦ズレ Dz の検出を実行する場合にのみ有効です：
hp_ta

HiPic/

TA.tif{{y1

y2}

SVC.txt}

ri2mp

RI/

NF

top

left

right

MP.tif{{y1

y2}

SVC.txt}

rr2mr

RR/

NF

top

left

right

MR.tif{{y1

y2}

SVC.txt}

このような改造に加えて、hp_ta や r[i,r]2m[p,r] で作成した TA や M[P,R] 画像から縦ズレ Dz を検出するだけのプログラム ta_dz を書きました：
ta_dz

TA_or_MP_or_MR.tif

{y1

y2}

{SVC.txt}

ta_dz の起動パラメータの意味は hp_ta や r[i,r]2m[p,r] のものと同様ですが、オプション指定の取り扱い方が異なります（これでわかりますよね？）。なお、調査対象とする画像 TA_or_MP_or_MR.tif は古いプログラム
hp2xta で作成した整数画素値のものでもかまいません。その場合には警告が出ますが、縦ズレ Dz を問題なく推定できるはずです。
改造版の hp_ta と新しいプログラム ta_dz のソースコードや Windows 用実行ファイルなどを以下の書庫ファ
イルに入れておきました：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/rhp.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/rhp.zip
また、SIXM 用の新しい書庫ファイル中の r[i,r]2m[p,r]のコードなどを改造版のものと差し替えておきました：
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/6mct.zip
昨年 11 月の SIXM 実験で得た測定 171110[b,c] のデータを使って改造版の r[i,r]2m[p,r] と ta_dz の動作テストを行いました。この E-mail に添付した ta_dz.txt がその記録です。
次便以降の E-mail で詳しいことを話しますが、測定 171110[b,c] のサンプル回転角が０度と 180 度のRR 画像から推定した縦ズレ Dz が異常な値になっているのは「サンプルの天井を覆っている白金？の像」のためだということに気づきました。ta_dz.txt に記した処理ではその像の部分を除外するような画像上の縦方向の調査範囲も指定しています。そのようにした場合の MR 画像から推定した Dz の値は範囲指定
なしの場合と概ね同じ値ですが、MP 画像から得た値は大きく異なっています。これは予想外でした ...。
とり急ぎ、

191 / 206
添付ファイル ta_dz.txt
ri2mp 171110b/ri - 5 107 196 171110b/mp.tif /dev/null | tail -1
ri2mp 171110b/ri - 5 107 196 /dev/null 45 291 /dev/null | tail -1
rr2mr 171110b/rr - 5 107 196 171110b/mr.tif /dev/null | tail -1
rr2mr 171110b/rr - 5 107 196 /dev/null 45 291 /dev/null | tail -1#-72.568290e-02

# mp

0

1.413833e-02# mp 5+40~291-72.072283e-01

# mr

-6

4.122213e-02# mr 5+40~291

Dz

RMV

ri2mp 171110c/ri - 20 105 197 171110c/mp.tif /dev/null | tail -1
ri2mp 171110c/ri - 20 105 197 /dev/null 60 297 /dev/null | tail -1
rr2mr 171110c/rr - 20 105 197 171110c/mr.tif /dev/null | tail -1
rr2mr 171110c/rr - 20 105 197 /dev/null 60 297 /dev/null | tail -1#-11.970947e-02

# mp

-4

1.350675e-02# mp 20+40~297-1

1.529269e-01

# mr

-1

3.617148e-02# mr 20+40~297

Dz

RMV

ta_dz 171110b/mp.tif
ta_dz 171110b/mp.tif 45 291
ta_dz 171110b/mr.tif
ta_dz 171110b/mr.tif 45 291#-72.568290e-02

# mp

0

1.413833e-02# mp 5+40~291-72.072283e-01

# mr

-6

4.122213e-02# mr 5+40~291

Dz

RMV

ta_dz 171110c/mp.tif
ta_dz 171110c/mp.tif 60 297
ta_dz 171110c/mr.tif
ta_dz 171110c/mr.tif 60 297#-11.970947e-02

# mp

-4

1.350675e-02# mp 20+40~297-1

1.529269e-01

# mr

-1

3.617148e-02# mr 20+40~297

Dz

RMV

192 / 206
Date:Tue, 30 Jan 2018 22:31:48 +0900

From:

Tsukasa NAKANO

To:

Akihisa TAKEUCHI, Kentaro UESUGICc:

MATSUNO Junya, MIYAKE, "TSUCHIYAMA, Akira", 北山晃, Miyama Sugimoto, Taguchi,
megumi matsumoto, 野口 高明, Tooru Matsumoto, okumura.shota.82e,
Minako HASHIGUCHI, Aiko Nakato, 中村隆太

Subject: SIXM_RP画像上の傾いた暗い帯
たけうちさま、
うえすぎさま、
GSJ/AISTのなかのです。SIXMのHIS ファイルから取り出したRP（refraction profile）画像の上にあった「傾いた暗い帯」についてお尋ねします。少し長くなりますが最初から話します。
昨年11月のSIXM実験で得た測定171110[b,c] のサンプル回転角が０度と180度のXP（投影値）画像と回転角が０度と180度のXR（「空気の値」で補正したX線屈折量）画像のペアのそれぞれから推定した「縦ズレ」の値が大きく異なっていたので、その原因を調べました。このE-mailに添付した171110bc_xpr.pdfを御覧下さい。測定 171110[b,c] のX[P,R] 画像に関する以下の４枚一組の画像を示しました：
４枚一組の左上の画像（画像名：x[p,r]_000）
測定171110[b,c] のサンプル回転角が０度のX[P,R] 画像
右上の画像（x[p,r]_750）
回転角が180度のX[P,R] 画像
左下（HF もしくは HFIV）
画像 xp_750を左右反転した画像（HF）、もしくは、xr_750の左右と「各画素のXRの値の符号」を反転した画像（HFIV）
右下（xp_000 - HF もしくは xr_000 - HFIV）
上部に記したoffsetとDzの値を用いて位置ズレ補正を行った画像xp_000とHFの差分画像、もしくは、
xr_000とHFIVの差分画像。
このように同じ測定のX[P,R] 画像のペアのそれぞれから推定した縦ズレの値Dzは大きく異なっており、差分画像を見ればわかるようにXR画像のペアから推定したDzの値が間違っていることは明らかです。画像xr_000とxr_750の比較から、この推定ミスは
回転角が０度と180度の画像のそれぞれの上部の、サンプルの天井を覆っている白金？の上下端の部分のXRの値が符号反転していない（それらの表示輝度が黒白反転していない）
ことによって生じたと思われます。

193 / 206
以 上 の よ う な 「 XR の 値 が 異 常 な 部 分 」 に 相 当 す る RP 画 像 を 調 べ ま し た 。 こ の E-mail に 添 付 し た
171110bc_rp.pdfを御覧下さい。こちらは測定171110[b,c] の回転角が０度と180度のそれぞれの以下の４枚一組の画像を示しています：
４枚一組の左上の画像（画像名：ri_000もしくはri_750）
回転角が０度もしくは180度のRI（暗電流補正したX線強度）画像
左下の画像（rr_000もしくはrr_750）
回転角が０度もしくは180度のRR（未補正のX線屈折量）画像
右上（rp_000_SCAN もしくはrp_750_SCAN）
上記の回転角が０度もしくは180度のR[I,R] 画像の上に青線で示した、スキャン番号（== R[I,R] 画
像の横座標値）が「SCAN」の位置の縦一列の画素の値の計算に用いたRP画像
右下（rp_000_??? もしくは rp_750_???）
上記のRP画像の左右端に赤線で示した「サンプルの天井を覆っている白金？」の部分を縦方向に引き伸ばし、低い画素値を識別できるように表示輝度を「ガンマ補正」した画像。
注
正確には、左側の２枚はX[P,R] 画像の作成時に「空気の値」の計算に用いた左右と上部の領域を除去したR[I,R] 画像です。また、右上のRP画像の縦方向の範囲は左側のR[I,R] 画像のものと同じです。
これらからわかるように、「サンプルの天井を覆っている白金？」の部分を測定したRP画像の領域には「傾いた暗い帯」があります。そして、RR画像の画素の値はRP画像の横一列の画素の値の重心の位置なので、傾いた暗い帯の上端では重心が左方に移動する→ RRの値が低くなり、RRやXR画像に暗点もしくは暗線が生じる。
傾いた暗い帯の下端では重心が右方に移動する→ RRの値が高くなり、RRやXR画像に明点もしくは明線が生じる。
と言うわけで、「サンプルの天井を覆っている白金？」の像の上下端でのRRやXRの異常値の原因はRP画像の上の「傾いた暗い帯」だ思われますが、これはサンプル内部の鉛直（縦）方向の位相勾配によって生じた、SIXMでは検知できない縦方向のX線の屈折による現象でしょうか？ もしくは、それ以外のことが原因？ 教えて下さい。
よろしくお願いします。とり急ぎ、

194 / 206
添付ファイル171110bc_xpr.pdf

195 / 206
添付ファイル 171110bc_rp.pdf

Date:Thu, 01 Feb 2018 15:55:36 +0900

From:

Tsukasa NAKANOTo:"TAKEUCHI, Akihisa", MATSUNO Junya

Cc:

Kentaro UESUGI, MIYAKE, "TSUCHIYAMA, Akira", 北山晃, Miyama Sugimoto, Taguchi,
megumi matsumoto, 野口 高明, Tooru Matsumoto, okumura.shota.82e,
Minako HASHIGUCHI, Aiko Nakato, 中村隆太

Subject: Re: SIXM_RP 画像上の傾いた暗い帯
たけうちさま、なかのです。E-mail ありがとうございます。
> 斜めの暗線をよく見ると右と左で幅が違うのが分かるでしょうか。右側の方が少し太いと思います。
はい。これは測定 171110c の rp_000_577 や rp_750_577 で顕著ですね。
> 実は走査光学系用の FZP も結像光学系用の FZP も光軸に対して鉛直でなくて斜めに設置されています。
> これは FZP の効率を稼ぐために X 線進行方向の FZP 厚みを増やすためです。
> なので結像用 FZP の場合、右と左で若干ですが倍率が違います。
> 斜めに見えるのは、この倍率の違いが多少影響しています。
> rp 像でこのように斜めに見える場合、これは rr, ri 像では水平方向のボケ（つまり走査光学系側のボケ）196 / 206> として出て来るんですが、このセットアップの場合、この程度の傾きであれば殆ど影響はありません。
了解。
> ただ、
> 中野さんが予想されているように縦方向の屈折が何等かの悪影響を及ぼしていることも間違いないと> 思います。
> というか、縦方向＝結像光学系では視野周辺部（この場合視野上部分）にどうしても屈折コントラスト> のようなパタンが乗りやすく、特にこういったエッジの効いた重いものがあると顕著です。
SIXM では縦方向の屈折は防ぎようがない → 視野周辺部にある白金？のような重いものは NG、ということですね。了解しました。
松野さま、
このような SIXM では不可避の縦方向の屈折のためにプログラム rr2rc によるサンプル回転角が０度と 180 度の RR 画像の縦ズレの推定が失敗する場合は、以下のようにして問題が発生している箇所（測定 171110[b,c]ではサンプルの天井を覆っている白金？の像）を避けるような縦方向の範囲を指定して下さい：
ri2rc

171110b-"xp_000.tif

xp_750.tif"

0

0

0

5

291

0.25

0.25

ri2rc

171110b-"xp_000.tif

xp_750.tif"

0

0

0

45

291

0.25

0.25

rr2rc

171110b-"xr_000.tif

xr_750.tif"

0

0

0 5

291

0.25

0.25

|

paste

-

-

rr2rc

171110b-"xr_000.tif xr_750.tif"

45

291

0.25

0.25

|

paste

-

-

#

0

0

0

449.5

749.5

578.5

-71

71

-6

# xp

449.5

749.5

578.5

-61

61

-7

# xp +40

449.5

749.5

577

-71

71

-14

# xr

449.5

749.5

577.5

-61

61

-7

# xr +40

RC1

RC2

RC

Dz1

Dz2

Dz

|

paste
|

-

paste

-

-

ri2rc

171110c-"xp_000.tif

xp_750.tif"

0

0

0 20

297

0.25

0.25

|

paste

-

-

ri2rc

171110c-"xp_000.tif

xp_750.tif"

0

0

0 60

297

0.25

0.25

|

paste

-

-

rr2rc

171110c-"xr_000.tif

xr_750.tif"

0

0

0 20

297

0.25

0.25

|

paste

-

-

rr2rc

171110c-"xr_000.tif xr_750.tif"

#

0

0

0

60

297

0.25

449.5

749.5

578

-69

69

-1

# xp

449.5

749.5

578

-59

59

-1

# xp +40

449.5

749.5

576

-69

69

-16

# xr

449.5

749.5

577

-59

59

-2

# xr +40

RC1

RC2

RC

Dz1

Dz2

Dz

0.25

|

paste

-

-

197 / 206
なお、上の例ではプログラム r[i,r]2rc の起動パラメータ「name file」として先頭がハイフン「-」でそれに続く引用符「"」で囲んだ２個のファイル名を指定することにより、処理に必要なサンプル回転角が０度と 180 度の２個の X[P,R]画像を指定しています。
この指定法は r[i,r]2rc だけに対するものではなく、ぼくが書いた「name file」を起動パラメータとするプログ
ラムすべてに適用可能な指定法です。とり急ぎ、On Wed, 31 Jan 2018 18:49:30 +0900 "TAKEUCHI, Akihisa" wrote:> 中野様>> 竹内です。
> 貴重なデータありがとうございました。
>> 斜めの暗線をよく見ると右と左で幅が違うのが分かるでしょうか。右側の方が少し太いと思います。
> 実は走査光学系用の FZP も結像光学系用の FZP も光軸に対して鉛直でなくて斜めに設置されています。
> これは FZP の効率を稼ぐために X 線進行方向の FZP 厚みを増やすためです。
> なので結像用 FZP の場合、右と左で若干ですが倍率が違います。
> 斜めに見えるのは、この倍率の違いが多少影響しています。
> rp 像でこのように斜めに見える場合、これは rr, ri 像では水平方向のボケ（つまり走査光学系側のボケ）> として出て来るんですが、このセットアップの場合、この程度の傾きであれば殆ど影響はありません。
>> ただ、> 中野さんが予想されているように縦方向の屈折が何等かの悪影響を及ぼしていることも間違いないと> 思います。
> というか、縦方向＝結像光学系では視野周辺部（この場合視野上部分）にどうしても屈折コントラスト> のようなパタンが乗りやすく、特にこういったエッジの効いた重いものがあると顕著です。

198 / 206

199 / 206
1705_rp.pdf

200 / 206
test_psd.pdf

201 / 206
test_as.pdf

202 / 206
psd.pdf

203 / 206
as.pdf

204 / 206
bpf.pdf

205 / 206
170516c.pdf

206 / 206
170513a.pdf

170516d.pdf