1

c# ClearCanvas ライブラリを使用して画像ビューアーを作成しています。保存されたウィンドウの中心とウィンドウの幅の値を画像に適用して画像を表示しようとしています。これを行うには、ウィンドウの中心、ウィンドウの幅、およびバイト配列に変換する Dicom ファイルから生のピクセル データを読み取り、次のコードを使用してウィンドウの設定を適用します。

 int lower_bound = window_center - window_width / 2;
 int upper_bound = window_center + window_width / 2;



            //copy matrix and do window caluclations
            float[] wlpixels = new float[pixels.Length];
            for (int i = 0; i < w * h; i++)
            {

                if (pixels[i] <= lower_bound)
                    wlpixels[i] = 0;
                else if (pixels[i] > upper_bound)
                    wlpixels[i] = 255;
                else
                {
                    wlpixels[i] = ((pixels[i] - lower_bound) / window_width) * 255;


                }
            }

これは、一部の画像では魅力的に機能しますが、他の画像、特にウィンドウの中心値が低いか負の値の場合、正しく表示されません。それらは、白であってはならない大量の白いピクセルで表示されます。

ウィンドウ/レベルの計算を正しく行っていますか? そうでない場合、どうすれば正しく行うことができますか? もしそうなら、これをすべてのシナリオで機能させるには、他に何をする必要がありますか?

4

1 に答える 1

2

そのため、Clear Canvas の drawToBitmap() 関数を使用して画像を表示することになりました (以前は使用していましたが、ウィンドウ設定が適用されていなかったため傷がつきました)。結局のところ、ウィンドウ設定を考慮に入れるには、次の行を含める必要があります

using ClearCanvas.ImageViewer.Tools.Standard;

次に、 drawToBitmap() を使用して画像を表示するには、次のようなコードを使用します。

DicomFile dcm = new DicomFile();
dcm.Load("filename");
LocalSopDataSource lsds = new LocalSopDataSource(dcm);
ImageSop sop = new ImageSop(lsds);
Frame frame = sop.Frames[1];
IPresentationImage pres = PresentationImageFactory.Create(frame);
bitmap = pres.DrawToBitmap(frame.Columns, frame.Rows);

生のピクセル データを含まない Dicom 画像でこれをテストしましたが、同様に機能します (理由はわかりません)。

このビットマップから別のマトリックスにピクセルをコピーして、スライダーなどを介してウィンドウの中心/幅を変更することになりましたが、画像を取得するには、これを使用する必要があります。

于 2014-07-11T16:07:37.173 に答える