私は自分のイメージエンコーダとデコーダを持っています。私が欲しいのは、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が発生することです。そのタグを手動で削除してグループの長さを修正すると、通常のタグを読み取ることができます。この現象を回避する可能性はありますか?
ファイルを保存しました? imebra :: CodecFactory :: save(* loadedDataSet、 "test.dcm"、imebra :: codecType_d :: dicom)。画像Rawデータを変更すると、DataSet –
@ Paolo Brandoliの転送構文を含め、正しく解釈されるために他のタグが変更される必要があることに注意してください。私はそれを追加し、今PixelDataを変更することができます。 –