画像処理結果の表示方法

[戻る]
北風ふうた 2005/07/25(月) 22:12:12
こんばんわ。VC6 MFC ダイアログベース W2kで開発を行っています。

現在DICOMという医療画像を対象に開発を行っています。
NewやVector何でもいいのですが、メモリ上に画像データを取得し、
簡単な処理を加え表示しているのですが、表示が遅くて困っています。

512*512*16Bitsの画像に対してコントラストの変更をマウスのドラックで行いたいのです
が、書くピクセル事処理している(まとめてメモリ上のデータの処理ができればいいので
すが方法がわかりません)こととSetPixelを使っていることでかなり遅いです。というか
処理が追いつきません。

考えられる良法があれば御教示お願いいたします。

超初心者 2005/07/25(月) 22:47:37
メモリ上のデータを
1画素ごとに計算ながらSetPixelで表示
しているってことですか?

オリジナルのDICOMデータとは別に
メモリ上にコントラストを変えたRGB各8ビット系3バイトで
構成されたデータを作りましょう。
並び順は逆のBGRで、上下も逆にします。

実際にSetPixelがどれほど遅いのか知りませんが、
コントラスト後のデータをSetDIBitsかSetDIBitsToDeviceで表示すれば
SetPixelを数万回実行するより速いはずです。(試していません。)

SetDIBitsToDeviceについて詳しくは検索してください。

北風ふうた 2005/07/25(月) 23:31:22
DIBつかったら早いです。
ありがとうございます。

あとコントラスト計算を各画素にしてるのをどうにかすっきりしたいのですが、
 for (int y=0;y<512; y++)

北風ふうた 2005/07/25(月) 23:35:22
すみませんまちがって送信してしまいました。

DIBつかったら早いです。
ありがとうございます。

あとコントラスト計算を各画素にしてるのをどうにかすっきりしたいのですが、
 for (int y=0;y<512; y++)
  for (int x=0;x<512; x++)
   im[y][x]=buf[y][x]*2;

ってコードがあったとして
イメージ的にim=buf*2みたいに一気に計算するってことはできないでしょうか?

PATIO 2005/07/26(火) 10:40:06
>イメージ的にim=buf*2みたいに一気に計算するってことはできないでしょうか?

普通に考えたら無理だと思います。
16bitの各データに対して * 2の演算をしたいわけですから
それぞれを独立して行わないとだめでしょう。
一つの数値として扱うと桁上がりとかの関係でだめでしょうし。
SSEとかを使って複数の変数を一度に計算するとかしないと多分無理なのでは。
それでどの程度早くなるのかは疑問ですけれど。

古いスレッドには追加発言できません。