1

dcmtk を使用して dicom ファイルを読み取り、画像を .tiff 形式に抽出します。いくつかの画像処理を行った後、ソース dicom ファイルに保存したい画像があります。これは、残りのデータ (uid、患者名など) を保持しながら、古い画像/ピクセル データを新しいもので上書きすることです。同じ。

次のコードを使用して dicom を読み取ります

OFCondition status = src_fileformat.loadFile(src_path);

    if (status.good())
    {
        Sint32 instanceNumber = 0;
        if (src_fileformat.getDataset()->findAndGetSint32(DCM_InstanceNumber, instanceNumber).good())
        {
            cout << "instance Number N: " << instanceNumber << endl;
            sprintf(instanceNum, "%d", instanceNumber);
            printf("%s\n", instanceNum);
        }

        else
            cerr << "Error: cannot access Instance Number!" << endl;
    }
    else
        cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;

    src_dcm = new DicomImage(src_path);
    if (src_dcm != NULL)
    {
        if (src_dcm->getStatus() == EIS_Normal)
        {
            if (src_dcm->isMonochrome())
            {
                src_dcm->setMinMaxWindow();
                Uint8 *pixelData = (Uint8 *)(src_dcm->getOutputData(16 /* bits */));
                if (pixelData != NULL)
                {
                    src_dcm->writeBMP("source.tiff", 24);  /* do something useful with the pixel data */
                }
            }
        }
        else
            cerr << "Error: cannot load DICOM image (" << DicomImage::getString(src_dcm->getStatus()) << ")" << endl;
    }

画像処理後、このソース dicom ファイルに上書きしたい画像があります。image2dcm を調べましたが、正しい構文/メソッドを取得できませんでした。誰でも私を助けて.. :)

編集-1

Image2Dcm i2d; 
I2DOutputPlug *outPlug = new I2DOutputPlugSC(); 
 I2DImgSource *inputPlug = new I2DJpegSource(); 
 E_TransferSyntax writeXfer; 
 inputPlug->setImageFile(jpgFile); 
DcmDataset *dataset = NULL; 
OFCondition result = i2d.convert(inputPlug, outPlug, dataset, writeXfer); 

   // Saving output DICOM image 
  if (result.good()) 
      { 
        dataset->putAndInsertString(DCM_PhotometricInterpretation,"RGB"); 

            DcmFileFormat dcmff(dataset); 
    result = dcmff.saveFile(dcmFile, writeXfer); 
       }

上記の構文を試しましたが、正確に理解できませんでした

加工画像です

これは処理された画像です(上)

元のディコム画像

これは、上書きしたい元の dicom イメージです。みんな、アイデアや助けは??

4

1 に答える 1

1

基本的なアプローチは次のとおりです。

  1. ファイルからDICOMデータセットをロードする
  2. データセット内のピクセル データを置き換えます
  3. 他のさまざまな要素の値を変更します (例: SOP インスタンス UID)
  4. 変更された DICOM データセットを新しいファイルに保存する

圧縮されていない画像の場合、2 番目のステップは 3 番目のステップと同じ方法で実行できます。つまり、データセットで putAndInsertXXX() メソッドを適切に呼び出すことによって実行できます。もちろん、Pixel Data 属性の要素値は正しい DICOM 形式である必要があります。詳細については、 DICOM 標準パート 3 および 5 を参照してください。

于 2016-02-29T17:12:50.507 に答える