はじめまして。
Delphi7にて画像処理ソフトを作成しているのですが、
扱っている画像が医用画像(CTなど)で1つのファイル容量が約100MB
ほどあります。8×512×512×512のinteger型の3次元配列を
使用しており、実行時のページングファイルが1GB弱にもなってしまいます。
これでは非力なPCではソフトが起動できない可能性があるのでなんとかページングファイルを減らしたいのですが、どのようにすればよいのか
分かりません。どなたかうまいやり方がありましたらよろしくお願いいたします。
自分でテンポラリファイルを作って、そこに一定の区切りをつけてかきこむとか。
今回は区切りが明確なので、ある意味やりやすいかもしれません。
>扱っている画像が医用画像(CTなど)で1つのファイル容量が約100MB
>ほどあります。8×512×512×512のinteger型の3次元配列を
>使用しており、実行時のページングファイルが1GB弱にもなってしまいます。
うーむ、ファイルの容量が100MBなのに、なぜ、配列に読み込むと10倍になるのか
分かりません。
> 8×512×512×512のinteger型の3次元配列
最初の8の意味はなんですか? また、integer = 4バイトの配列が本当に必要
ですか?
>最初の8の意味はなんですか? また、integer = 4バイトの配列が本当に必要
>ですか?
最初の8はビットですね.最近の医用画像は2バイト使用するものがあるので,ちょっと違うような気もしますが,実験用のデータかも知れません.
最近は医用画像処理からはなれていますが,100MBというのはあまり
聞いたことがないんですが...
何か特殊な研究用かも...
また,3次元の処理ですが,処理の内容にもよりますが,オンメモリでなく
ても可能な場合があります(つまり一度に全部のデータを同時に使う処理で
ないこともある).
参考までに,胸部のCR(コンピュータ画像)でも大きくても4MBです.
胸部は放射線画像の中でも情報量(情報工学でいう情報量ではなく,
データ数が多いという意味で)が多い方です.
X線CTやMRIの画像の1枚分はそれよりも少ないハズです.
でも質問は ページングファイルを少なくするには?
ということですので,直接関係はないと思いますが.
>最初の8はビットですね.
それなら integer の配列使うのは無駄にメモリを消費するだけで byte の配列にする
と1/4になりますね。処理用のPCだけメモリを1GBくらい積めば、ページフォールト
は起こらないのでは?
CTのスライス(?)画像が複数枚一括で入ったDICOMデータのような気がします。
本筋と離れてしまいました。。。失礼しました。
お返事ありがとうございます。
通りすがりさんのおっしゃる通り、1スライス512×512画素の2byteデータ
の画像が複数枚(最大512枚を想定)入ったDICOMデータを使用しております。また、研究等でも使用するため、4byteのデータも扱えるようにinteger型の配列も使用しています。最初の8×というのはボリュームレンダリングをさせるための配列等を考慮すると、3次元配列が8つ必要になってくるのです。
jokさんのおっしゃるように一度byet型に変換してやってみたいと思います。
ツイート | ![]() |