2

実際には CT スキャンのスライスである JPG 画像のセットがあり、これを DICOM 画像ファイルに再構築して PACS にインポートしたいと考えています。

私は ClearCanvas を使用しており、必要なタグをすべて設定しました (また、独自のアプリケーションを使用して JPG ファイルの 1 つを DICOM に変換し、それらが同じであることを確認して確認しました)。JPG ファイルを PixelData タグに入れるためにどのように処理すればよいかわかりません。

現在、ClearCanvas フォーラムからのアドバイスに従って、バイト配列に変換していますが、画像は DICOM ビューアで文字化けしています。画像データを読み取り可能な形式にするには、どのように処理すればよいですか?

    public DicomFile CreateFileFromImage(Image image)
    {
        int height = image.Height;
        int width = image.Width;
        short bitsPerPixel = (short)Image.GetPixelFormatSize(image.PixelFormat);

        byte[] imageBuffer = ImageToByteArray(image);
        DicomFile dicomFile = new DicomFile();
        dicomFile.DataSet[DicomTags.Columns].SetInt32(0, width);
        dicomFile.DataSet[DicomTags.Rows].SetInt32(0, height);
        dicomFile.DataSet[DicomTags.BitsStored].SetInt16(0, bitsPerPixel);
        dicomFile.DataSet[DicomTags.BitsAllocated].SetInt16(0, bitsPerPixel);
        dicomFile.DataSet[DicomTags.HighBit].SetInt16(0, 7);
        //other tags not shown
        dicomFile.DataSet[DicomTags.PixelData].Values = imageBuffer;
        return dicomFile;
    }
    public static byte[] ImageToByteArray(Image imageIn)
    {
        MemoryStream ms = new MemoryStream();

        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        return ms.ToArray();
    }
4

3 に答える 3

0

ビットマップを手動で処理し、プラグインのいくつかのコードに従って、画像の赤チャンネルから配列を作成することになりました。

            int size = rows * columns;
            byte[] pData = new byte[size]; 
            int i = 0;

            for (int row = 0; row < rows; ++row)
            {
                for (int column = 0; column < columns; column++)
                {
                    pData[i++] = image.GetPixel(column, row).R;
                }
            }

動作しますが、非常に遅く、肥大化した DICOM ファイルが作成されます。組み込みの DicomCompressedPixelData クラスを機能させたいと思っています。

さらに提案があれば大歓迎です。

于 2014-09-02T04:20:02.603 に答える