2017-04-25 14 views
1

私は自分のイメージエンコーダとデコーダを持っています。私が欲しいのは、DICOMイメージを読んで、圧縮されていないイメージピクセルを抽出し、それらをエンコーダで圧縮し、圧縮されたピクセルを非圧縮ピクセルの代わりにDICOMファイルに書き戻すことです。デコーダは逆の動作をします。これはImebraで可能ですか?私はタグとピクセルを読むことができますが、それらを圧縮した後、それらを戻す方法(現在はchar *バッファに入れています)、またはこれが可能であるかどうかはわかりません。私はImebraをC++で使っています。Imemphraライブラリを使用して、圧縮されたピクセル(自分のエンコーダで圧縮されたもの)をDICOMイメージファイルに保存する方法は?

また、全く新しいDICOMファイルを作成することはできますが、その場合は古いファイルからすべてのDICOMタグを簡単に転送する必要があります。

これはImebraでは不可能な場合、これを可能にする他のC++ライブラリがありますか?

編集: 答えをありがとう、Paolo。ただし、元のDICOMイメージは変更されません(2番目のオプションを使用)。私はここで明らかに何か間違っていると言うことができますか?

std::unique_ptr<imebra::DataSet> loadedDataSet(imebra::CodecFactory::load(imgNameM)); 
imebra::WritingDataHandlerNumeric* dataHandler = loadedDataSet->getWritingDataHandlerRaw(imebra::TagId(imebra::tagId_t::PixelData_7FE0_0010), 0); 
dataHandler->assign(buffer, size); 
delete dataHandler; 

loadedDataSetが空でない場合は、bufferExistsでチェックしました。

編集2: はい、保存しませんでした。今私はその行を追加し、私の元の問題を解決したPixelData要素を変更することができました。ありがとう。ただし、ファイルの他の部分も自動的に変更されるようになりました。ファイルの先頭に100個以上の空のバイトが追加されていますが、これはそれほど気にしません。私が気になるのは、(0008,0005)特定キャラクタセットタグが追加され、その値が設定されていない(空です)ため、その変更されたファイルのタグを読み込もうとしたときにCharsetConversionNoTableErrorが発生することです。そのタグを手動で削除してグループの長さを修正すると、通常のタグを読み取ることができます。この現象を回避する可能性はありますか?

+0

ファイルを保存しました? imebra :: CodecFactory :: save(* loadedDataSet、 "test.dcm"、imebra :: codecType_d :: dicom)。画像Rawデータを変更すると、DataSet –

+0

@ Paolo Brandoliの転送構文を含め、正しく解釈されるために他のタグが変更される必要があることに注意してください。私はそれを追加し、今PixelDataを変更することができます。 –

答えて

1

Imebraは、ロスレスJPEG、ベースライン、拡張jpeg、RLE用のエンコーダ/デコーダを既に提供しています。

Imebraに独自のコーデックを追加するにはいくつかの方法があります。

  • がimebraからクラスを派生::実装::コーデックを:: imageCodec
  • またはcharバッファに画像を符号化し、その後、追加しますそれは生のコンテンツとしてimebra::DataSet::getWritingDataHandlerRawを使用して、タグの生のコンテンツを書き込むことができます。 getWritingDataHandlerRawは、WritingDataHandlerNumericを返します。 WritingDataHandlerNumeric::assignを使用して、バイト・バッファーをデータ・ハンドラーに移動してから、データ・ハンドラーを削除して、その内容をデータ・セットにコミットさせます。
  • ソースデータセットからすべて同じタグで新しいデータセットを作成する方法を示したが(異なる画像圧縮を含む)異なる転送構文とライブラリが付属しています例changeTransferSyntax
+0

答えをありがとう。これは私の割り当ての一部なので、既存のコーダーを使用することは選択肢ではありません。編集した質問を確認できますか? –

+0

残念ながら、私は1つの投票だけを投げることができます。 "imebra :: implementation :: codecs :: imageCodecからクラスを派生させる"は、IMHOを優先する必要があります。 –

関連する問題