Смещение 16 байт при экспорте видео MPEG-4 из файла DICOM.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Смещение 16 байт при экспорте видео MPEG-4 из файла DICOM.

Сообщение Anonymous »

Краткая версия. Откуда берется 16-байтовое смещение при экспорте видеопотока MPEG-4 из файла DICOM с помощью Pydicom с помощью следующего кода? (И дополнительный вопрос: всегда ли это смещение в 16 байт?)

Код: Выделить всё

from pathlib import Path
import pydicom

in_dcm_filename: str = ...
out_mp4_filename: str = ...

ds = pydicom.dcmread(in_dcm_filename)
Path(out_mp4_filename).write_bytes(ds.PixelData[16:])  # 16-byte offset necessary
Для воспроизводимости можно использовать, например. этот файл DICOM, который я нашел в старом обсуждении в группах Google (предупреждение о содержании: видео показывает открытый мозг во время нейрохирургического вмешательства).
Полная версия
У меня есть несколько файлов DICOM, содержащих хирургические видеопотоки MPEG-4 (синтаксис передачи UID 1.2.840.10008.1.2.4.102 – MPEG-4 AVC/H.264 High Profile/Level 4.1< /эм>). Я хотел экспортировать видеопотоки из файлов DICOM для облегчения обработки последующих задач.
После небольшого поиска в Google я нашел следующее обсуждение, предлагающее использование dcmdump из DCMTK следующим образом (который мне удалось воспроизвести):
  • Запустите dcmdump +P 7fe0,0010 +W .
  • Из полученных двух файлов в : mpeg4.dcm.0.raw и mpeg4.dcm.1.raw , отбросьте первый файл размером 0 байт и сохраните второй (возможно, изменив его суффикс на .mp4), который представляет собой обычный воспроизводимый видеофайл.
Из того, что я увидел в команде dcmdump, я пришел к выводу, что это просто необработанный дамп тега 7fe0,0010 (который является < em>Атрибут Pixel Data)¹, поэтому я подумал, что смогу воспроизвести это с помощью Pydicom. Моя первая попытка заключалась в использовании Path(out_mp4_filename).write_bytes(ds.PixelData) (полную информацию см. в примере кода выше); однако в итоге у меня получился файл, который невозможно было воспроизвести. Затем я сравнил шестнадцатеричный дамп результата dcmdump и результата Pydicom:

Код: Выделить всё

$ hd ./dcmdump.mp4 | head
00000000  00 00 00 20 66 74 79 70  69 73 6f 6d 00 00 02 00  |... ftypisom....|
00000010  69 73 6f 6d 69 73 6f 32  61 76 63 31 6d 70 34 31  |isomiso2avc1mp41|
00000020  00 00 00 08 66 72 65 65  00 ce 97 1d 6d 64 61 74  |....free....mdat|
...
$ hd ./pydicom.mp4 | head
00000000  fe ff 00 e0 00 00 00 00  fe ff 00 e0 3e bc ce 00  |............>...|
00000010  00 00 00 20 66 74 79 70  69 73 6f 6d 00 00 02 00  |... ftypisom....|
00000020  69 73 6f 6d 69 73 6f 32  61 76 63 31 6d 70 34 31  |isomiso2avc1mp41|
...
Благодаря этому я заметил, что мой экспорт Pydicom содержал 16 предшествующих дополнительных байтов. Как только я удалил их через Path(out_mp4_filename).write_bytes(ds.PixelData[16:]), я получил тот же экспорт воспроизводимого видео, что и при использовании dcmdump.
Итак, еще раз мой вопрос: откуда берутся эти 16 дополнительных байтов, каково их значение и можно ли их просто удалить?
¹) < strong>Обновление: Оглядываясь назад, я должен был заподозрить подозрения из-за двух файлов, созданных dcmdump.

Подробнее здесь: https://stackoverflow.com/questions/788 ... dicom-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»