GSL Shell プログラム:xyz2mol.gsl

2017-10-30 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-10-27)の記事「Python プログラム:xyz2mol.py」で、
既存の“xyz2mol”プログラム
即ち、

   座標データだけから成るファイルを元に、
   原子間の結合データを生成

する処理コード
を纏めた。


そこで、
このPython プログラムを、
Lua(GSL Shell)に移植した。


取り敢えずは単純な移植なのだが、
序でなので、
(1) 入力ファイルは、ドラッグ&ドロップで指定する
(2) 原子数(と結合数)は最大 999 までとする
ところまでは機能強化した。

--------------- DnD_xyz2mol.gsl
require'pl'
--------------------
Dir, Fname = path.splitpath( arg[1] ) -- D&D でファイル名取得
lfs.chdir( Dir ) -- これ必須?
file_nm = string.gsub( Fname, '.xyz', '' ) -- 入力「.xyz」ファイル ( 除 拡張子 )
-- 出力ファイル名は、(file_nm).mol ( 結合情報付き )

Dx=1.10 -- 結合判定用:共有結合半径の和の Dx 倍以内
--====================================
-- 1...92 元素名(左詰め)
tt = ' H HeLiBeB C N O F NeNaMgAlSiP S ClAr KCaScTiV CrMnFeCoNiCuZnGaGeAsSeBrKrRbSrY ZrNbMoTcRuRhPdAgCdInSnSbTeI XeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaW ReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPaU '

-- 1..92 共有結合半径 ( From Winmostar )
rr = '0.29 1.30 1.23 0.90 0.82 0.77 0.75 0.73 0.72 1.60 1.54 1.36 1.18 1.11 1.06 1.02 0.99 1.90 2.03 1.74 1.44 1.32 1.22 1.18 1.17 1.17 1.16 1.15 1.17 1.25 1.26 1.22 1.20 1.16 1.14 2.00 2.16 1.91 1.62 1.45 1.34 1.30 1.27 1.25 1.25 1.28 1.34 1.48 1.44 1.41 1.40 1.36 1.33 2.20 2.35 1.98 1.69 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.44 1.34 1.30 1.28 1.26 1.27 1.30 1.34 1.49 1.48 1.47 1.45 1.46 1.45 2.71 2.40 2.10 1.70 1.70 1.70 1.70'
rTc = stringx.split( rr ) -- 文字列配列(空白区切)

An={}; Ac=matrix.new( 999, 1 )
Ax=matrix.new( 999, 1 ); Ay=matrix.new( 999, 1 ); Az=matrix.new( 999, 1 )
B1=matrix.new( 999, 1 ); B2=matrix.new( 999, 1 ); rT=matrix.new( 92, 1 )
for i=1, #rTc do rT[i]=rTc[i]+0 end

w = utils.readlines( file_nm .. '.xyz' ) -- 入力「.xyz」ファイル取り込み
aa=w[1]+0 -- Atom 数
wl2=w[2] -- セルベクトル情報 ( 文字列のママ )
for a=1,aa do v = stringx.split(w[a+2])
Ax[a]=v[2]+0; Ay[a]=v[3]+0; Az[a]=v[4]+0
an = string.sub(v[1]..' ',1,2); k = string.find( tt, an )
An[a]=an; Ac[a]=k/2
end

bb=0 -- ===== 結合計算 =======
for k=1,aa do
for j=1,k-1 do
dd2=(Ax[k]-Ax[j])^2+(Ay[k]-Ay[j])^2+(Az[k]-Az[j])^2
dr2=((rT[Ac[k]]+rT[Ac[j]])*Dx)^2
if dd2 end
end

OT = io.open( file_nm .. '.mol', 'w' ) --=== 「.mol」ファイル出力
utils.fprintf( OT, '--- from %s.xyz --> %s.mol\n' , file_nm,file_nm )
utils.fprintf( OT, '%s\n' , wl2 )
utils.fprintf( OT, "By 'xyz2mol.gsl'\n" )
utils.fprintf( OT, '%3d%3d 0 0 0 0 1 V2000\n' , aa, bb )
for a=1,aa do
utils.fprintf( OT, ' %9.5f %9.5f %9.5f %-2s 0 0 0 0 0 0\n' ,
Ax[a], Ay[a], Az[a], An[a] )
end
for b=1,bb do
utils.fprintf( OT, '%3d%3d 1 0 0 0\n' , B1[b], B2[b] )
end
utils.fprintf( OT , 'M END\n' )
OT:close()
となった。


本日はここまで。


この GSL Shell プログラムを流用して、目的のモノを作ろう!


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171009
スポンサーサイト

Python プログラム:xyz2mol.py

2017-10-27 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
3年前(2014-08-08)になる古い記事ですが、
プログラム設計:msi2mol」正しくは、xyz2molでしたが。

それで、
この記事にある設計に従って、
Python プログラム xyz2mol.py を作っていた。

なぜ今頃?

実は同様なことを、最近やりたくなって、
当然 GSL Shell で作る予定だが、・・・

探していたら、過去に作っていたので、
これをベースに移植を考えた。


なので、当時のコードをここに整理した。

# ----------------------- xyz2mol.py
from math import *
from string import *

file_nm = 'test' # 入力「.xyz」ファイル名 ( 除 拡張子 )

# 出力ファイル名は、(file_nm).mol ( 結合情報付き )

Dx=1.10 # 結合判定:共有結合半径の和の Dx 倍以内

tt = " HHeLiBe B C N O FNeNaMgAlSi P SClAr KCaScTi VCrMnFeCoNiCuZnGaGeAsSeBrKrRbSr YZrNbMoTcRuRhPdAgCdInSnSbTe IXeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTa WReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPa U"
# 1...92 元素名(右詰め)

rr = " 0.00 0.29 1.30 1.23 0.90 0.82 0.77 0.75 0.73 0.72 1.60 1.54 1.36 1.18 1.11 1.06 1.02 0.99 1.90 2.03 1.74 1.44 1.32 1.22 1.18 1.17 1.17 1.16 1.15 1.17 1.25 1.26 1.22 1.20 1.16 1.14 2.00 2.16 1.91 1.62 1.45 1.34 1.30 1.27 1.25 1.25 1.28 1.34 1.48 1.44 1.41 1.40 1.36 1.33 2.20 2.35 1.98 1.69 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.70 1.44 1.34 1.30 1.28 1.26 1.27 1.30 1.34 1.49 1.48 1.47 1.45 1.46 1.45 2.71 2.40 2.10 1.70 1.70 1.70 1.70" # 1..92 共有結合半径 ( From Winmostar )
rTc=rr.split() # 文字列配列(空白区切)

An=['']*300; Ax=[0]*300; Ay=[0]*300; Az=[0]*300;
Ac=[0]*300; B1=[0]*300; B2=[0]*300; rT=[0]*100; # 配列(リスト)初期化
for i in range(len(rTc)): rT[i]=float(rTc[i])

IN = open( file_nm + '.xyz' ) # === 入力「.xyz」ファイル取り込み ===
w=IN.readline(); aa=int(w) # Atom 数
wl2=IN.readline()
for a in range(aa):
w=IN.readline(); w=w.rstrip('\r\n'); v=w.split()
an=v[0]; Ax[a]=float(v[1]); Ay[a]=float(v[2]); Az[a]=float(v[3])
if( len(an)==1 ): an=" "+an
k=tt.find(an)
An[a]=v[0]; Ac[a]=k/2
IN.close()

bb=0 # ===== 結合関係計算 =====
for k in range(1,aa):
kb=k-1
for j in range(kb):
if( Ac[k]==Ac[j] ): continue
dd2=(Ax[k]-Ax[j])**2+(Ay[k]-Ay[j])**2+(Az[k]-Az[j])**2
dr2=((rT[Ac[k]]+rT[Ac[j]])*Dx)**2
if( dd2
OT = open( file_nm + '.mol', 'w' ) # === 「.mol」ファイル出力 ===

OT.write( '--- from ' + file_nm + '.xyz --> ' + file_nm + '.mol\n' )
OT.write( wl2 )
OT.write( "By 'xyz2mol.py'\n" )
OT.write( str(aa).rjust(3) + str(bb).rjust(3) + ' 0 0 0 0 1 V2000\n' ) # sprintf 形式
for a in range(aa):
OT.write( " %9.5f %9.5f %9.5f %-2s 0 0 0 0 0 0\n" % ( Ax[a], Ay[a], Az[a], An[a] ) ) # printf 形式
for b in range(bb):
OT.write( "%3d%3d 1 0 0 0\n" % ( B1[b], B2[b] ) )
OT.write( "M END\n" )
OT.close();
と云うこと?


本日はここまで。


このプログラムを参考にして GSL Shell で作ろう!


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140215,171006

ImageJ 学習:“OpenCV”の利用

2017-10-25 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-10-23)の記事:
ImageJ 学習:“Re-ImageJで学ぶ!”サイト」で書いた記事一覧に、

  第67回 ImageJによるOpenCVの利用で学ぶ!

がある。

かなり気になったので、・・・・・

「ImageJ OpenCV」で検索してみた。


真っ先に「OpenCV - ImageJ」が見つかる。

 ・・・・・
 ・・・・・
 Currently, there are three alternatives to connect ImageJ with OpenCV:

 ・CVForge: an ImageJ plugin implementing a simple-to-use interface ・・・
 ・IJ-OpenCV: a library to create applications combining features from ・・・
 ・IJToolsUsingOpenCV: a suite of ImageJ plugins that connects ImageJ ・・・


そして、3番目の方法に関しては、
WAKU-TAKE-A PROGRAM
ImageJからOpenCVを利用しよう!
が見つかる。

  ImageJからOpenCVを利用しよう!
  9th July 2017 at 10:47am

  Windows版OpenCVには、Java用のラッパーが用意されています。

  このラッパーを使って、OpenCVの関数を利用するImageJ用プラグインを
  作成することができます。以下のHowToで説明します。
  思ったより簡単に出来て、自分でも驚きました。

  私も「IJToolsUsingOpenCV」というImageJ用プラグインを作ってみました。
  リンク先にコードがありますので参考にしてください。

  手軽に試してみたい方は、作成したプラグインのバイナリー(classファイル)を
  こちらに置いておきますので、是非使ってみてください。

  HowTo

   ・ ImageJからOpenCVを利用する方法について



この辺りの記事を良く読んで、学習かナ?



本日はここまで。


ImageJ 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171007

ImageJ 学習:“Re-ImageJで学ぶ!”サイト

2017-10-23 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
先日(2017-10-18)の記事「ImageJ 学習:CLAHEでコントラスト調整」で、

  Re-ImageJで学ぶ!

  インナービジョン連載中のリジット 山本修司「ImageJで学ぶ実践医用・
  バイオ画像処理」を自分の勉強のためにリメイクした「Re-ImageJで学ぶ!」を
  開設いたしました。 画像解析を学ぶ学生や、ImageJの使い方を忘れてしまった
  研究者の方まで、広く読んでいただければ幸いです。


と云うサイトの1ページを参照した。


改めて、このサイトを確認した。

はじめに -Re-ImageJで学ぶ!-」ページでは、

  はじめまして、VISブログ担当です。

  この度、ImageJを使った壮大な医用画像処理/解析の探求をブログにしようという
  強い思いから、インナービジョン連載中のリジット 山本修司「ImageJで学ぶ
  実践医用・バイオ画像処理」を自分の勉強のためにリメイクした
  「Re-ImageJで学ぶ!」を開設いたしました。

  画像解析を学ぶ学生や、ImageJの使い方を忘れてしまった研究者の方まで、
  広く読んでいただければ幸いです。
  温故知新で何かお役に立てる情報をお届けできれば嬉しい限りです。
  そして、VISブログ担当も、この記事を書くことで、ImageJの片鱗に触れて、
  画像解析を再考していきたいと考えています。

  よろしくお願いいたします。

  作成:2015/7/14
  場所:VIS事務所にて


  本ブログの運用について

  ・本ブログは、インナービジョン連載中のリジット 山本修司「ImageJで学ぶ
   実践医用・バイオ画像処理」を自分の勉強のためにリメイクしたものです。
  ・更新は不定期です。
  ・記事の内容に対する建設的なコメントは歓迎いたします。
  ・プライバシーポリシーは、VISのプライバシーポリシーに準じます。

  その他、追記事項があればここに追記いたします。


と云うことで、


  目次

  はじめに -Re-ImageJで学ぶ!-
  第1回 ImageJってどんなソフトウェア?で学ぶ!
  第2回 ImageJのインストールと医用画像表示で学ぶ!
  第3回 いろいろな書式の画像データを理解しようで学ぶ!
  第4回 医用画像の基本的な性質を知ろう(その1)で学ぶ
  ・・・・・
  ・・・・・
  第67回 ImageJによるOpenCVの利用で学ぶ!
  第68回 ImageJによる粒子画像流速測定法の利用で学ぶ!
  第69回 ImageJを用いたDNAマイクロアレイの画像解析で学ぶ!

  第70回 ImageJを用いたBoneJの紹介で学ぶ!


とあった。


これは、参考にするには大変有用な記事ダ。

頑張って学習しよう!


本日はここまで。


ImageJ 学習は続く?!


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171007

ゼロのゼロ乗は?

2017-10-20 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
ふとしたことから、ゼロのゼロ乗はチャント(?)計算できるのか?
と云う疑問点が出てきた。

確認してみた。

先ずは、ウィキペディア:
0の0乗
  0 の 0 乗(ぜろのぜろじょう、英: ・・・ )は、
  累乗あるいは指数関数において、底を 0、指数を 0 としたものである。
  通常、指数関数 a^x は実数 ( 1 ≠ ) a > 0 と x に対して定義されているため、
  0^0 はこの意味では定義されていない。
  その値は、指数の 0 が「非負整数の 0」であるような場合には、
  1 と定義しておくと便利であることが多い一方で、
  「実数あるいは複素数としての 0」であるような場合には、
  例えば二変数関数 x^y を考えれば分かるように、原点 (x,y) = (0,0) において
  自然な(二変数関数として連続となる)定義は存在しない。

  ・・・・・
  ・・・・・


<紙>的には、0^0 は、1 ですネ。


それで、幾つかの処理系で確認:

(1) lua: Lua 5.2.2
  print( 0^0 ) ・・・ チャント 1 となった。

(2) luajit: LuaJIT 2.0.2
  print( 0^0 ) ・・・ チャント 1 となった。

(3) gsl-shell: GSL Shell 2.3.1
  0^0 ・・・・・ チャント 1 となった。

(4) python: WinPython 2.7.6.3
  0**0 ・・・・・ チャント 1 となった。

(5) js: SpiderMonkey 54.0a1
  0^0 ・・・・・ ダメだ。 0 とでた。

(6) Perl 5.14.2
  0**0 ・・・・・ チャント 1 となった。

(7) Mathematica 6.0
  0^0 ・・・・・ エラー:"不定式0^0が見付かりました."

(8) MS-Excel 2002 / Kingsoft Spreadsheets 2013
  +0^0 ・・・・・ エラー:#NUM! / #NUM

(9) KaleidaGraph 4.1J
  0^0 ・・・・・ ダメだ。 0 とでた。


本日はここまで。


思いつくままのランダムな 学習も続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171003,07

ImageJ 学習:CLAHEでコントラスト調整

2017-10-18 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
某雑誌(論文?)を立ち読みしていたら、気になる記事があった。

記事のタイトルは忘れたが、キーワードとしては、
ImageJコントラストCLAHE
があった?様な

それで、
「ImageJ コントラスト CLAHE」で検索してみた。

“Re - ImageJで学ぶ!”の
第61回 ImageJによるコントラスト調整の応用-CLAHEについてで学ぶ!
が見つかった。

立ち読みしたのは(多分)この記事にある“参考記事”でしょう?

で、
このページは、・・・・・

 Re-ImageJで学ぶ!

 インナービジョン連載中のリジット 山本修司「ImageJで学ぶ実践医用・
 バイオ画像処理」を自分の勉強のためにリメイクした「Re-ImageJで学ぶ!」を
 開設いたしました。 画像解析を学ぶ学生や、ImageJの使い方を忘れてしまった
 研究者の方まで、広く読んでいただければ幸いです。


と云うサイトの連載記事で、

 2015年12月10日木曜日
 第61回 ImageJによるコントラスト調整の応用ーCLAHEについてで学ぶ!
 この記事は参考記事を援用して、筆者の考えも交えつつ、記述しています。

ですね。

若干(殆ど全て?)引用させて頂く。


 ImageJの標準の画像処理機能の中には、ヒストグラムを均一にして
 コントラストを調整するメニューもありますが、
 同じ画像の中でも濃淡コントラストが極端に異なる領域が存在する場合、
 画像ノイズも強調されてしまい、
 期待通りの画像処理結果が得られないことがあります。
 このような場合に、ユーザー側で許容できるノイズレベルや、
 画質を調整できるコントラスト制御機能があれば非常に便利です。

 今回は、このコントラストの均一化について、
 パラメータの調整が可能な”CLAHE”(コントラスト制限付適応
 ヒストグラム均一化/均等化)について説明します。
 医用画像処理の応用として、CLAHE処理は、放射線治療の分野で使用される
 リニアックグラフィ(ポータルイメージ)やマンモグラフィなど
 にも適応されています。


 CLAHEとは

 ヒストグラム均一化処理は、処理対象となる画像全体に機能しますが、
 コントラスト制限付適応ヒストグラム均一化/均等化処理
 (Contrast Limited Adaptive Histogram Equalization:CLAHE)は、
 画像内のtilesと呼ばれる分割されたブロックごとに処理をすることで、
 画像の局所領域のコントラストを強調し、細部の可視性を高める手法です。
 CLAHEは局所領域のノイズの過剰な増幅を抑えた強調処理
 ができるといわれています。

 CLAHEでは、分割されたtileに対して、近似的かつ最適なヒストグラムの
 コントラストになるよう自動濃淡調整を行います。
 この処理の際、計算ブロックごとの境界にアーチファクトが生じるため、
 双一次内挿(バイリニア補間)を使って、近傍のtileに補間処理をかけます。

 ImageJでは、Stephan Saalfeld氏によって開発されたCLAHEプラグイン( ・・・ )
 が用意されており、通常のヒストグラム均一化と一味違う結果が得られます。
 以下にCLAHEのコントロールパラメータを示します。
 ・ブロックサイズ:画像を分割するtileのサイズの決定。
  目安として画質を維持したい対象のサイズよりも大きな
  ブロックサイズを選択すと良い。
 ・ヒストグラムのビン数:8および24ビットカラー(RGB)のみ
  対応のヒストグラムで、ビン数はtileのピクセル数よりも小さく
  設定しなければならない。
 ・最大スロープ:強度伝達関数(intensity transfer function)による
  コントラスト伸張の制限を決める。
  この値の1は、元画像を基準として、それよりも大きな値を入力する
  ことによって画像局所の最大コントラストを決定する。

 ・・・・・
 ・・・・・
 ・・・・・

 図は、前述の比較例をImageJのSNR計測プラグインを用いて定量的に行った例です。

 ・・・・・
 ・・・・・

 それぞれ、オリジナルを元画像(リファレンス)として
 SNR(Signal-to-noise ratio)、PSNR(Peak signal-to-noise ratio)、
 RMSE(Root mean square error)、MAE(Mean absolute error)を
 求めた値を示しています。

 CLAHEでtileを細かくしていくほど、
 すべてのデータが元データと比べて改善していることがわかります。
 tileなどの設定値や解析対象物によって使い分けをすると、
 より良い結果が導けるかもしれません。
 腹部MRI画像での処理例では、かなり改善されるようです。

 ・・・・・
 ・・・・・

 参考記事:「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.
       INNERVISION(25・11) 2010, p114-115」

 ・・・・・
 ・・・・・


本日はここまで。


ImageJ 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


171004

DICOM ファイルを TIFF に変換

2017-10-16 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-10-13)の記事「MRIConvert 使って DICOM から TIFF に変換」では、
  ・・・・・
  ・・・・・
  .dcmファイルを入力して、
  .niiファイル経由で、
  16bit .tifファイルに変換する。

  条件としては:
  ・・・・・
  ・・・・・
  ・・・・・

と云うことで、一応のモノが出来た。

だが、
先月(2017-09-13)の記事「DICOM 学習:ファイル読み込み
で書いたコードを流用すれば、.niiファイル経由もイラナイ?

と云うことで、作ってみた:
----- DICOM_to_TIFF.gsl -----
require'pl'; require'cv2_a'; SF = string.format
int16 = |x| ffi.cast( 'int16_t*', x )
uint16 = |x| ffi.cast( 'uint16_t*', x )
uint32 = |x| ffi.cast( 'uint32_t*', x )

ReadUInt16 = || uint16( IN:read(2) )[0]
ReadUInt32 = || uint32( IN:read(4) )[0]
ReadChars = |n| IN:read(n)

Fname = 'x.dcm'; IN = io.open( Fname, 'rb' ) -- サンプルデータ --

-- 先頭 128 バイトは Preamble ( all ゼロ )
-- 次の4バイトは:'DICM'

zzz = IN:read(128); fid = IN:read(4)
if fid ~= 'DICM' then
print( 'Not a DICM' ); _=io.read(1); os.exit()
end

------------------ 参考サイトの C# コードから・・・
g = ReadUInt16()
while g == 2 do
e = ReadUInt16();
vr = ReadChars(2)
if vr == 'AE' or vr == 'AS' or vr == 'AT' or vr == 'CS' or
vr == 'DA' or vr == 'DS' or vr == 'DT' or vr == 'FL' or
vr == 'FD' or vr == 'IS' or vr == 'LO' or vr == 'PN' or
vr == 'SH' or vr == 'SL' or vr == 'SS' or vr == 'ST' or
vr == 'TM' or vr == 'UI' or vr == 'UL' or vr == 'US'
then
length = ReadUInt16()
else -- Read the reserved byte
_ = ReadUInt16()
length = ReadUInt32()
end
----- print( g, e, vr, length, SF('%X',IN:seek()) ) -- デバッグ用
val = ReadChars(length)
g = ReadUInt16()
end

------------------- 以下部分を追加/流用

while g==8 or g==16 or g==24 or g==32 or g==40 or g==64 or g==28677 do
e = ReadUInt16();
length = ReadUInt32()
----- print( g, e, vr, length, SF('%X',IN:seek()) ) -- デバッグ用
val = ReadChars(length)

----------------
if g==40 then
if e==0x0010 then xx = uint16(val)[0] end
if e==0x0011 then yy = uint16(val)[0] end
if e==0x0100 then bpp= uint16(val)[0] end
end
----------------

g = ReadUInt16()
end

IN:close()

if bpp ~= 16 then print( 'Not 16bits' ); _=io.read(1); os.exit() end

-----------------------------------------------
_=path.currentdir() -- 'pl' で 'lfs' を使う為の準備
SZ = lfs.attributes( Fname, 'size' ) -- ファイルサイズ

IN = io.open( Fname, 'rb' )
zzz = IN:read( SZ - xx*yy*2 )
AT = uint16( IN:read('*a') ) -- Read xx*yy*2
IN:close()

require'cv2_a'
tif = cv2.cvCreateMat( yy, xx, CV_16UC1 )
BT = ffi.cast( 'uint16_t*', tif.Byte )

for n=0,xx*yy-1 do
BT[n] = AT[n] + 0x8000 ------------------
end

if string.find( Fname, 'dcm' ) ~= nil then
FN = string.gsub( Fname, '.dcm', '.tif' )
else
FN = Fname..'.tif'
end
cv2.cvSaveImage( 'o-'..FN , tif, 0 )
これで、・・・・・

これで、
.dcmファイルを 16 bit TIFFファイルに変換。
そこそこ汎用で???


本日はここまで。


DICOM 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170822,1005

MRIConvert 使って DICOM から TIFF に変換

2017-10-13 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前々回(2017-10-09)の記事「MRIConvert files / mcverter」で書いた如く、
  ・・・・・
  ・・・・・
  結論としては、<紙>的には
  .dcmファイルを、.niiファイルに変換するのなら、
  “MRIConvert”のmcverter.exeで決まりでしょうか。
  ・・・・・
  ・・・・・

と云うことで、

.dcmファイルを入力して、
.niiファイル経由で、
16bit .tifファイルに変換する。

条件としては:

入力 DICOM 画像は、
16ビットで、リトルエンディアン(little-endian)
そして、(多分)無圧縮

画像サイズは、(多分)任意
そして、カレントに「mcverter.exe」と、
対象の“.dcm”ファイルを置く。


テストデータとして、例の 'x.dcm' を入力し、
結果は 'x.tif' とする。
中間に 'x.nii' を作る。

そう云うことで、出来たコードは:
----- dcm_nii_tiff16.gsl -----
in_DICOM, out_TIFF = 'x.dcm', 'x.tif'
tmpF, tmp_nii = 'x', 'x.nii'
--============================================
require'pl'; require'cv2_a'

Byte = |x| ffi.cast( 'uint8_t*', x )
uint16 = |x| ffi.cast( 'uint16_t*', x )

ppp = string.format( '/o . /F %s /f nifti /n %s', tmpF, in_DICOM )
os.execute( 'mcverter.exe ' .. ppp )

_=path.currentdir() -- 'pl' で 'lfs' を使う為の準備
SZ = lfs.attributes( tmp_nii, 'size' ) -- ファイルサイズ

IN = io.open( tmp_nii, 'rb' )
ptr = Byte( IN:read(SZ) ); IN:close()

H = uint16( ptr ); xx, yy = H[21], H[22]

-------------------------------------------
AT = uint16( ptr + SZ - xx*yy*2 )

require'cv2_a'
tif = cv2.cvCreateMat( yy, xx, CV_16UC1 )
BT = ffi.cast( 'uint16_t*', tif.Byte )

for n=0,xx*yy-1 do
BT[n] = AT[n] + 0x8000 --------------
end

cv2.cvSaveImage( out_TIFF , tif, 0 )

file.delete( tmp_nii )
file.delete( tmpF..'_info.txt' )
と云うことで良さそう。

備考:
(1) コードの途中で:
   _=path.currentdir() -- 'pl' で 'lfs' を使う為の準備
  とあるが、・・・
  コメントの通り、
  requireするのは、plだけだが、
  LFSを使いたい為、pl.pathを(ダミーで)使う。
  ( pl.path モジュールは、LFS を使っている )

(2) 配列 AT は、
  読み込んだファイルの後ろから必要数としている。

(3) 画像データ値は、
  符号付の -2048~1965 じゃなくて、
  符号無しの 30720~34733 となる。


本日はここまで。


DICOM 学習は続く?


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170925

nii ファイルとは何?

2017-10-11 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
このところ、“DICOM 学習”を行っている???

そこには、拡張子が“.nii”のファイルが出てくる。

ここで、
改めて“.nii”ファイルについて学習した。


以前(2017-09-25)の記事:
… XMedCon:The project stands for Medical Image ・・・」で、
変換先のフォーマットとして、
“nifti”即ち、NIfTI Analyze を指定すると
.niiファイルが出来た。


それで、手始めに
DICOM NifTI format」で検索してみた。

最初のページでは、・・・

 ・DICOM to NIfTI converter, NIfTI tool and viewer - File Exchange ...
 ・Siemens DICOM sort and convert to NIfTI - File Exchange - MATLAB ...
 ・dcm2nii DICOM to NIfTI conversion - Center for Advanced Brain ...
 ・SPM/DICOM - Wikibooks, open books for an open world
 ・NIfTI-1 FAQ - Neuroimaging Informatics Technology Initiative - NIH
 ・The NIFTI file format | Brainder.
 ・dcm2nii DICOM to NIfTI conversion
 ・Tutorial 2: Converting and preparing data - MRI-TUTORIAL.COM
 ・dicomnifti - converts DICOM files into the NIfTI format - Debian ...
 ・How can one convert Nifti to DICOM for DTI images? - ResearchGate

と云ったように、
“DICOM”から“NIfTI”への変換に関するモノが多い?


ならばと、
NIFTI file format」で検索してみた。

最初のページでは、・・・

 ・NIfTI-1 Data Format - Neuroimaging Informatics Technology Initiative
 ・NIfTI-1 header file - NIH
 ・NIfTI-1 FAQ - Neuroimaging Informatics Technology Initiative - NIH
 ・NIfTI: - Neuroimaging Informatics Technology Initiative
 ・NIfTI-1 File Format - NIH
 ・NIfTI-1 Test Data Sets - Neuroimaging Informatics Technology ...
 ・The NIFTI file format | Brainder.
 ・The NIFTI-2 file format | Brainder.
 ・the nifti-1 data format - NITRC
 ・NIfTI conversion (volumetric files) - BrainVoyager Support

と云ったようなページが見つかる。

中から適当に
The NIFTI file format | Brainder.」を選んで見てみた。

  The Neuroimaging Informatics Technology Initiative (nifti) file format
 was envisioned about a decade ago as a replacement to the then widespread,
 yet problematic, analyze 7.5 file format.
  The main problem with the previous format was perhaps the lack of
 adequate information about orientation in space,
 such that the stored data could not be unambiguously interpreted.
  Although the file was used by many different imaging software,
 the lack of adequate information on orientation obliged some,
 most notably spm, to include, for every analyze file,
 an accompanying file describing the orientation,
 such as a file with extension .mat.
  The new format was defined in two meetings of the so called
 Data Format Working Group (dfwg) at the National Institutes of Health (nih),
 one in 31 March and another in 02 September of 2003.
  Representatives of some of the most popular neuroimaging software agreed
 upon a format that would include new information, and upon using the new
 format, either natively, or have it as an option to import and export.
=== Google 翻訳
  Neuroimaging Informatics Technology Initiative(nifti)ファイル
 フォーマットは、10年ほど前に広まっているがまだ問題の多い7.5の
 ファイルフォーマットの代わりに考えられていた。
  以前の形式の主な問題は、おそらく、宇宙での向きに関する適切な情報が
 不足していて、記憶されたデータを明確に解釈できないことでした。
  ファイルは多くの異なるイメージングソフトウェアで使用されていましたが、
 オリエンテーションについての適切な情報が不足しているため、
 分析ファイルごとに、拡張子.matのファイルなど、
 オリエンテーションを記述する添付ファイルを含める必要がありました。
  新しいフォーマットは、2003年3月31日、9月2日に国立保健研究所(NIH)で
 開催されたいわゆるデータフォーマットワーキンググループ(dfwg)の
 2回の会議で定義されました。
  最も人気のあるニューロイメージングソフトウェア新しい情報を
 含むフォーマットと、新しいフォーマットを使用したときにネイティブに、
 あるいはインポートとエクスポートのオプションとして
 持っていることに合意しました。


イマイチ<紙>には理解できない点もあるが、

NIfTI とは、
“Neuroimaging Informatics Technology Initiative”
のことですか。


そして、少し下の方に、

 Overview of the header structure
  In order to keep compatibility with the analyze format,
 the size of the nifti header was maintained at 348 bytes
 as in the old format.
  Some fields were reused, some were preserved, but ignored,
 and some were entirely overwritten.
  The table below shows each of the fields, their sizes,
 and a brief description.
  More details on how each field should be interpreted
 are provided further below.
=== Google 翻訳
  分析フォーマットとの互換性を維持するために、古いフォーマットのように、
 niftiヘッダーのサイズは348バイトに維持されていました。
  一部のフィールドは再利用され、一部は保存されましたが無視され、
 一部は完全に上書きされました。
  下の表は、各フィールド、そのサイズ、
 および簡単な説明を示しています。
  各フィールドの解釈方法の詳細については、
 後で詳しく説明します。


<紙>が(ファイルダンプ)を見るに、
348バイトの後に、4バイトの未使用?領域があるようだ。

つまり、先頭から 352バイトのヘッダーに続いて
16ビット・データがあると見てとれる。


ヘッダー情報で欲しいのは、・・・・・

  TYPE  NAME   OFFSET SIZE  DESCRIPTION

  short  dim[8]  40B  16B   Data array dimensions.


ここの、次元数、サイズ(次元分) ですネ。
例えば、 3   512、512、1、・・・


本日はここまで。


DICOM 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170917

MRIConvert files / mcverter

2017-10-09 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-10-06)の記事「dcm2niix:DICOM to NIfTI conversion」では、
  ・・・・・
  ・・・・・
  Important note: dcm2nii is obsolete.
  While I hope it is generally robust and useful,
  active development has moved to dcm2niix.
  ・・・・・
  ・・・・・
などと書いていた。


dcm2nii:MainPage」をよくよく見ていたら、

9 Alternatives

7番目に、
 ・ Jolinda Smith's mcverter is written in C++,
    and has great support for various vendors.
   It attempts to preserve diffusion gradient information.
とある。

この“mcverter”とは?
MRIConvert files

取り敢えず、
MRIConvert-2.1.0-win32.zip
をダウンロードしてみた。

  2016-02-05 付  2.91MB

中には、
2つの .exe ファイル「mcverter.exe」「MRIConvert.exe」と
「~.txt」ファイル2つのみ。

即実行可ダ。

で、<紙>的には「mcverter.exe」1つあれば十分。


例えば、
カレントにある“x.dcm”を入力して、
カレント dir に、NIfTI 形式の“.nii”ファイルを作る
コマンドは
mcverter.exe  /o .  /f nifti  /n  x.dcm
または、
mcverter.exe  --output="."  --format="nifti"  --nii  x.dcm
で出来る。
正確には、
“KH16-6_St6_Sb4-10R_s_20170313_011_002___Vol_0_5_Vol.nii”
“KH16-6_St6_Sb4-10R_s_20170313_011_002___Vol_0_5_Vol_info.txt”
が出来る。

“.nii”は“NIfTI”形式で、

画素の値は:-2048(=30720)~1965(=34733)
と、“dcm2niix”と同じく真の値。
( XMedCon より good )

Y軸上下は、“XMedCon”と同じく見た目通り
( dcm2niix の様に 逆じゃない )

そして、“.exe”1つで済む。


なお、
“.txt”は、画像の情報で、
“dcm2niix”より多い。



結論としては、<紙>的には
.dcmファイルを、.niiファイルに変換するのなら、
“MRIConvert”のmcverter.exeで決まりでしょうか。



本日はここまで。


DICOM 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170821

dcm2niix:DICOM to NIfTI conversion

2017-10-06 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-10-04)の記事「DICOM 学習:参考サイト」の最後に載せたサイト:
DICOM introduction and free software

の(ほぼ)最終段に、

  Links to DICOM image conversion
  ・ dcm2nii can convert DICOM images to the popular NIfTI file format
   (other excellent converters are also listed on the dcm2nii page).

が載っている ( この段落、最初に列挙されているリンクには載っていない? )


それで、飛んでみた。

 dcm2nii DICOM to NIfTI conversion

 Introduction

 Important note: dcm2nii is obsolete.
 While I hope it is generally robust and useful,
 active development has moved to dcm2niix.
 In general, dcm2niix is typically better suited for modern DICOM images.
 On the other hand, dcm2nii is useful for archival studies with
 legacy proprietary format that predated DICOM.
 This software is provided under the BSD 2-Clause license.

 ・・・・・
 ・・・・・

つまり、
dcm2niiは古いモノで、今ならdcm2niixを使う。


これは如何か?


ダウンロードした:
 「dcm2niix_19-Aug-2017_win.zip」 2017-08-19 付 609KB
  中身は実質 dcm2niix.exe 1つ。

これ、即実行可能ダ。

試しに、
カレントに“dcm2niix.exe”と、(例の)“x.dcm”を置いて、

dcm2niix.exe  .
と打ち込むと、
2つのファイルが出来た:
“___Vol_0.5_Vol._20170313150941_2.json”
“___Vol_0.5_Vol._20170313150941_2.nii”

“.json”はテキスト・ファイルで、“.dcm”の情報
“.nii”は、以前(2017-09-25)の記事:
… XMedCon:The project stands for Medical Image ・・・
で書いている“.nii”ファイルとは若干異なる。

画素の値は:-2048(=30720)~1965(=34733)
と、真の値。

だが、上下が反転している!

でも、「.exe」1つのみで済むのは good

二者択一だと、悩むナ。


因みに、コマンドusageは、
usage: dcm2niix.exe [options] 
Options :
-1..-9 : gz compression level (1=fastest..9=smallest, default -1)
-b : BIDS sidecar (y/n/o(o=only: no NIfTI), default y)
-ba : anonymize BIDS (y/n, default y)
-f : filename (%a=antenna (coil) number, %c=comments, %d=description, %e echo number, %f=folder name, %i ID of patient, %j seriesInstanceUID, %k studyInstanceUID, %m=manufacturer, %n=name of patient, %p=protocol, %s=series number, %t=time, %u=acquisition number, %v=vendor, %x=study ID; %z sequence name; default '%f_%p_%t_%s')
-h : show help
-i : ignore derived, localizer and 2D images (y/n, default n)
-m : merge 2D slices from same series regardless of study time, echo, coil, orientation, etc. (y/n, default n)
-o : output directory (omit to save to input folder)
-p : Philips precise float (not display) scaling (y/n, default y)
-s : single file mode, do not convert other images in folder (y/n, default n)
-t : text notes includes private patient details (y/n, default n)
-v : verbose (n/y or 0/1/2 [no, yes, logorrheic], default 0)
-x : crop (y/n, default n)
-z : gz compress images (y/i/n, default n) [y=pigz, i=internal, n=no]
Defaults stored in Windows registry
Examples :
dcm2niix.exe c:\DICOM\dir
dcm2niix.exe -o c:\out\dir c:\DICOM\dir
dcm2niix.exe -f mystudy%s c:\DICOM\dir
dcm2niix.exe -o "c:\dir with spaces\dir" c:\dicomdir
でしょうか?


本日はここまで。


DICOM 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170821

DICOM 学習:参考サイト

2017-10-04 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
備忘録として、DICOM 学習用参考サイトの幾つかを列挙。


DICOM ファイル(Photoshop Extended)

  DICOM(Digital Imaging and Communications in Medicine の略)は、
 医療用スキャンを受信するための最もよく使用される標準です。
  Photoshop Extended を使用すると、DICOM(.dc3、.dcm、.dic または
 拡張子なし)ファイルを開いて使用できます。
  DICOM ファイルには、あるスキャンの各レイヤーを表す複数の
 スライスまたはフレームを含めることができます。

  Photoshop は、DICOM ファイルからすべてのフレームを読み取り、
 Photoshop のレイヤーに変換します。
  また、Photoshop ではすべての DICOM フレームを 1 つのレイヤーの
 グリッドに配置して、3D 空間で回転できる 3D ボリュームとして
 フレームを開くことができます。
  Photoshop では、8、10、12 または 16 ビットの DICOM ファイルを
 読み取ることができます (Photoshop では、10 ビットファイルと
 12 ビットファイルが 16 ビットファイルに変換されます)。

  Photoshop で DICOM ファイルを開くと、Photoshop のツールを使用して、
 ファイルを調整したり、ファイルにマークや注釈を付けることができます。
  例えば、ファイルにコメントを追加するには注釈ツール、
 特定のスキャン領域にマークを付けるには鉛筆ツール、スキャン画像から
 ダストやスクラッチを除去するにはダスト&スクラッチフィルターを使用します。
  ものさしツールまたは選択ツールを使用して画像コンテンツを測定します。

 ・・・・・
 ・・・・・



Viewing DICOM images with GIMP

   I have the latest version if GIMP
  which is able to open up the DICOM images,
  but the images are not clear and not reconstructed properly.
   Is there any specific plugin which can help me?

 →

  You might want to use MicroDicom, it does the reconstruction properly.
  You even have a windowing function.

 ・・・・・
 ・・・・・



Read & convert DICOM image - ImageMagick

   Is it possible to read and convert a DICOM to jpg?
  Although I have successfully installed latest version supporting
  the PHP interface, MagickReadImage() fails to read a dcm file
   (in other formats such as jpg, bmp function works fine).
  ・・・ (ImageMagick 6.4.1 05/16/08 Q16)
  ・・・・・・・・・・

 →

   ImageMagick reads DICOM images.
  There have been enhancements and bug fixes to the DICOM reader
  since your release of ImageMagick.
   The current release is ImageMagick 6.6.0-5.
  If you post a URL to one of your images,
  we will download it and determine if the latest release can
  read it properly or if there is a bug in the DICOM reader.

 ・・・・・
 ・・・・・



DICOM introduction and free software

  The DICOM Standard
   This guide gives is a brief description of the DICOM standard,
  which is commonly used for the transfer and storage of medical images.
  ・ An introduction to the DICOM single-file format
  ・ The DICOM header
  ・ Window center and window width (aka brightness and contrast)
  ・ Links to free DICOM viewers
  ・ Links to free DICOM servers/clients
  ・ Links to sample DICOM images
  ・ Links to DICOM resources

 ・・・・・
 ・・・・・



本日はここまで。


DICOM 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170821

YAKAMI DICOM ツール集 ( フリーの DICOM Viewer/・・・ )

2017-10-02 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-09-29)の記事「DICOM 学習:ApolloView Lite」では、
些か失望したので、
Free DICOM Viewer」検索の続き。

YAKAMI DICOM ツール集(フリーの DICOM Viewer/Converter/etc.)
はどうか?

 紹介
  「八上 DICOM ツール集 / YAKAMI DICOM Tools」は、フリーウェアで、
 研究用に DICOM ファイルを扱うためのツール集です。無料でご利用になれます。
 診療用には使用しないでください。

  このパッケージは、以下のアプリケーションと文書を含んでいます。

 アプリケーション
  DICOM Viewer
  DICOM Converter
  File Mover
  Folder Renamer
  DICOM Counter
  Shortcut Maker
  Index Maker
  Table Maker
  PACS Client
  WL/WW Editor
  Gamma Editor
  CLUT Editor
  Combi Editor
  Command-Line Converter
  Conveyer
  共通設定
  レジストリ設定

 文書:
  ・・・・・
  ・・・・・


ダウンロードした:
 「YAKAMI_DICOM_Tools_x86-1.4.5.0.ja.zip」 2014-01-21 付 5.05MB
  中身は実質 YAKAMI_DICOM_Tools.ja.msi 1つ。

インストールした:
  D:/TOOL/YAKAMI_Tools_x86/ 以下に。
   8 Dir と、84 ファイル で、20.9MB
  Path 登録は無し


“DICOM Viewer”は、
その名の通り
 親子ウィンドウ式(MDI)高速 DICOM ビューワープログラム

“DICOM Converter”では、
 TIFF 画像ファイルで出力できるが、8bit

拡張子「.dcm」「.nii」が“DICOM Viewer”に対応付けられた!!!


これも、
<紙>的には、イラナイ な。


本日はここまで。


DICOM 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170821
おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク