⚠️ Este é um site de tradução não oficial, sem relação com o DCMTK / OFFIS. Para informações oficiais, consulte a página original (https://support.dcmtk.org/docs/dcm2json.html).

dcm2json: converte um arquivo e um conjunto de dados DICOM para JSON

SINOPSE

dcm2json [options] dcmfile-in [jsonfile-out]

DESCRIÇÃO

O aplicativo dcm2json converte o conteúdo de um arquivo DICOM (formato de arquivo ou conjunto de dados bruto) para JSON (JavaScript Object Notation). A saída se refere ao "DICOM JSON Model", descrito em DICOM Part 18 Section F.

Quando o dcm2json lê um conjunto de dados bruto (dados DICOM sem meta-header de formato de arquivo), ele tenta adivinhar a sintaxe de transferência examinando os primeiros bytes do arquivo. Nem sempre é possível adivinhar corretamente a sintaxe de transferência, e é preferível converter um conjunto de dados para um formato de arquivo sempre que possível (usando o aplicativo dcmconv). Também é possível usar as opções -f e -t[ieb] para forçar o dcm2json a ler um conjunto de dados com uma sintaxe de transferência específica.

PARÂMETROS

dcmfile-in   DICOM input filename to be converted ("-" for stdin)

jsonfile-out JSON output filename (default: stdout)

OPÇÕES

opções gerais

-h --help
exibe este texto de ajuda e sai
--version
exibe as informações de versão e sai
--arguments
exibe os argumentos de linha de comando expandidos
-q --quiet
modo silencioso, não exibe avisos nem erros
-v --verbose
modo detalhado, exibe os detalhes do processamento
-d --debug
modo de depuração, exibe informações de depuração
-ll --log-level [l]evel: string constant
(fatal, error, warn, info, debug, trace) usa o nível l para o logger
-lc --log-config [f]ilename: string
usa o arquivo de configuração f para o logger

opções de entrada

+f --read-file
lê o formato de arquivo ou o conjunto de dados (padrão)
+fo --read-file-only
lê somente o formato de arquivo
-f --read-dataset
lê o conjunto de dados sem as informações meta do arquivo. sintaxe de transferência de entrada:
-t= --read-xfer-auto
usa o reconhecimento de TS (padrão)
-td --read-xfer-detect
ignora a TS especificada no cabeçalho meta do arquivo
-te --read-xfer-little
lê com a TS explicit VR little endian
-tb --read-xfer-big
lê com a TS explicit VR big endian
-ti --read-xfer-implicit
lê com a TS implicit VR little endian

opções de processamento

-es --encode-strict
reporta um erro para 'inf' e 'nan' (padrão)
-ee --encode-extended
permite 'inf' e 'nan' nos números JSON. Codificação dos elementos IS e DS (cadeia de caracteres inteira/decimal):
-ia --is-ds-auto
codifica como número se válido, como cadeia de caracteres caso contrário (padrão)
-in --is-ds-num
sempre codifica como número, falha se inválido
-is --is-ds-string
sempre codifica como cadeia de caracteres. Opções das URIs de dados volumosos:
-b --bulk-disabled
grava tudo como binário embutido (padrão)
+b --bulk-enabled
grava atributos grandes como dados volumosos
+bz --bulk-size [s]ize: integer (default: 1)
usa dados volumosos para atributos com tamanho igual ou superior a s kBytes
+bp --bulk-uri-prefix [u]ri prefix: string
usa o prefixo u ao gerar URIs de dados volumosos (padrão: URI de arquivo)
+bd --bulk-dir [d]irectory: string
grava os arquivos de dados volumosos em d (padrão: '.')
+bs --bulk-subdir
cria um subdiretório para cada instância SOP (padrão: sem subdiretório)

opções de saída

+fc --formatted-code
ativa a formatação com espaços em branco (padrão) # imprime espaços e quebras de linha adicionais para aumentar a legibilidade
-fc --compact-code
exibe somente os caracteres necessários
+m --write-meta
grava o conjunto de dados com as metainformações (aviso: não está em conformidade com o padrão DICOM)

Formato JSON

A estrutura básica da saída JSON gerada a partir de um arquivo DICOM tem a seguinte aparência (consulte DICOM Part 18 Section F para mais detalhes):

{
    "00080005": {
        "vr": "CS",
        "Value": [
            "ISO_IR 192"
        ]
    },
    "00080020": {
        "vr": "DT",
        "Value": [
            "20130409"
        ]
    },
    "00080030": {
        "vr": "TM",
        "Value": [
            "131600.0000"
        ]
    },
    "00080050": {
        "vr": "SH",
        "Value": [
            "11235813"
        ]
    },
    "00080056": {
        "vr": "CS",
        "Value": [
            "ONLINE"
        ]
    },
    "00080061": {
        "vr": "CS",
        "Value": [
            "CT",
            "PET"
        ]
    },
    "00080090": {
        "vr": "PN",
        "Value": [
          {
            "Alphabetic": "^Bob^^Dr."
          }
        ]
    },
    "00081190": {
        "vr": "UR",
        "Value": [
            "http://wado.nema.org/studies/
            1.2.392.200036.9116.2.2.2.1762893313.1029997326.945873"
        ]
    },
    "00090010": {
        "vr": "LO",
        "Value": [
            "Vendor A"
        ]
    },
    "00091002": {
        "vr": "UN",
        "InlineBinary": "z0x9c8v7"
    },
    "00100010": {
        "vr": "PN",
        "Value": [
          {
            "Alphabetic": "Wang^XiaoDong"
          }
        ]
    },
    "00100020": {
        "vr": "LO",
        "Value": [
            "12345"
        ]
    },
    "00100021": {
        "vr": "LO",
        "Value": [
            "Hospital A"
        ]
    },
    "00100030": {
        "vr": "DA",
        "Value": [
            "19670701"
        ]
    },
    "00100040": {
        "vr": "CS",
        "Value": [
            "M"
        ]
    },
    "00101002": {
        "vr": "SQ",
        "Value": [
            {
                "00100020": {
                    "vr": "LO",
                    "Value": [
                        "54321"
                    ]
                },
                "00100021": {
                    "vr": "LO",
                    "Value": [
                        "Hospital B"
                    ]
                }
            },
            {
                "00100020": {
                    "vr": "LO",
                    "Value": [
                        "24680"
                    ]
                },
                "00100021": {
                    "vr": "LO",
                    "Value": [
                        "Hospital C"
                    ]
                }
            }
        ]
    },
    "0020000D": {
        "vr": "UI",
        "Value": [
            "1.2.392.200036.9116.2.2.2.1762893313.1029997326.945873"
        ]
    },
    "00200010": {
        "vr": "SH",
        "Value": [
            "11235813"
        ]
    },
    "00201206": {
        "vr": "IS",
        "Value": [
            4
        ]
    },
    "00201208": {
        "vr": "IS",
        "Value": [
            942
        ]
    }
}

Dados Volumosos

Por padrão, os dados binários, ou seja, os valores de elementos DICOM com representação de valor (VR) OB, OD, OF, OL, OV, OW e UN, são gravados como "InlineBinary" (codificação base64) na saída JSON. A opção –bulk-enabled faz com que os dados binários, assim como DS, FD, FL, IS, SV e UV, sejam substituídos por valores "BulkDataURI" se o valor do elemento for maior que o limite de corte (padrão: 1 kByte). O limite de corte pode ser especificado com a opção –bulk-size. Os próprios valores dos elementos são gravados como arquivos no diretório indicado pela opção –bulk-dir (padrão: diretório atual). O nome do arquivo é baseado em uma soma de verificação SHA-256 do valor do elemento. Por padrão, são geradas URIs de arquivo que apontam para o diretório de dados volumosos. Para uso em produção, deve-se especificar, com a opção –bulk-uri-prefix, um prefixo de URI para um serviço WADO-RS por meio do qual os valores dos elementos possam ser recuperados. Isso pode ser implementado configurando um servidor web que tenha acesso de leitura ao diretório de dados volumosos do dcm2json. Por fim, a opção –bulk-subdir fará com que um subdiretório separado seja criado (e usado na URI de dados volumosos) para cada instância SOP distinta.

Observe que a sintaxe JSON para a representação de dados de pixel encapsulados na forma "InlineBinary" não é especificada no DICOM, assim como a representação JSON de dados de pixel encapsulados de múltiplos quadros. Esses arquivos DICOM não podem ser convertidos para JSON usando o dcm2json.

A extensão do nome de arquivo dos arquivos de dados volumosos gerados pode ser usada para determinar o tipo MIME que deve ser retornado pelo servidor WADO-RS:

  Extension     MIME Type

  .bin          application/octet-stream
  .jpeg         image/jpeg
  .dicom-rle    image/dicom-rle
  .jls          image/jls
  .jp2          image/jp2
  .jpx          image/jpx
  .jphc         image/jphc
  .jxl          image/jxl
  .mpeg         video/mpeg
  .mp4          video/mp4
  .H265         video/H265

Por fim, cabe observar que os dados volumosos serão gravados "como estão", ou seja, o dcm2json não tentará validar nem modificar o valor do elemento de forma alguma. Por exemplo, o dcm2json não adicionará um cabeçalho JFIF no caso de imagens comprimidas em JPEG baseline, que alguns visualizadores JPEG podem esperar.

NOTAS

Números como Cadeias de Caracteres

O padrão DICOM permite que certas representações de valor DICOM numéricas, DS, IS, SV e UV, sejam convertidas em um número JSON ou em uma cadeia de caracteres JSON. O dcm2json converte os valores DS e IS em números JSON se forem cadeias decimais ou cadeias inteiras válidas, e em cadeias de caracteres se contiverem algum caractere inválido. O dcm2json converte os valores SV e UV em números se não forem maiores que 9007199254740991ll nem menores que -9007199254740991ll, e em cadeias de caracteres caso contrário. Embora a especificação JSON permita números maiores, esses são os maiores inteiros que o JavaScript consegue tratar. Por isso, muitos analisadores JSON não conseguem processar números maiores.

Codificação de caracteres

Conforme exigido pela codificação JSON do DICOM, o dcm2json sempre gera a saída na codificação Unicode UTF-8 e converte os conjuntos de dados DICOM de acordo. Se isso não for possível, por exemplo porque o DCMTK foi compilado sem suporte à conversão de conjunto de caracteres, um erro é retornado.

REGISTRO DE LOG

O nível de detalhamento do log das diversas ferramentas de linha de comando e das bibliotecas subjacentes pode ser especificado pelo usuário. Por padrão, apenas erros e avisos são gravados no fluxo de erro padrão. Ao usar a opção –verbose, mensagens informativas, como detalhes do processamento, também são relatadas. A opção –debug pode ser usada para obter mais detalhes sobre a atividade interna, por exemplo, para fins de depuração. Outros níveis de log podem ser selecionados com a opção –log-level. No modo –quiet, apenas erros fatais são relatados. Nesses casos de erro muito graves, o aplicativo normalmente é encerrado. Para mais detalhes sobre os diferentes níveis de log, consulte a documentação do módulo "oflog".

Caso a saída do log deva ser gravada em arquivo (opcionalmente com rotação de arquivo de log), no syslog (Unix) ou no log de eventos (Windows), pode-se usar a opção –log-config. Esse arquivo de configuração também permite direcionar apenas determinadas mensagens para um fluxo de saída específico e filtrar certas mensagens com base no módulo ou aplicativo em que são geradas. Um arquivo de configuração de exemplo é fornecido em < etcdir>/logger.cfg.

LINHA DE COMANDO

Todas as ferramentas de linha de comando usam a seguinte notação para os parâmetros: colchetes delimitam valores opcionais (0-1), reticências no final indicam que múltiplos valores são permitidos (1-n), e a combinação dos dois significa de 0 a n valores.

As opções de linha de comando se distinguem dos parâmetros por um sinal '+' ou '-' à frente. Normalmente, a ordem e a posição das opções de linha de comando são arbitrárias (ou seja, podem aparecer em qualquer lugar). No entanto, se as opções forem mutuamente exclusivas, é usada a ocorrência mais à direita. Esse comportamento está em conformidade com as regras de avaliação padrão dos shells Unix comuns.

Além disso, um ou mais arquivos de comando podem ser especificados usando um sinal '@' como prefixo do nome do arquivo (por exemplo, @command.txt). Esse argumento de comando é substituído pelo conteúdo do arquivo de texto correspondente (múltiplos espaços em branco são tratados como um único separador, a menos que apareçam entre duas aspas) antes de qualquer avaliação posterior. Observe que um arquivo de comando não pode conter outro arquivo de comando. Essa abordagem simples, mas eficaz, permite agrupar combinações comuns de opções/parâmetros e evita linhas de comando longas e confusas (um exemplo é fornecido no arquivo < datadir>/dumppat.txt).

CÓDIGOS DE SAÍDA

O utilitário dcm2json usa os seguintes códigos de saída ao ser encerrado. Isso permite ao usuário verificar o motivo pelo qual o aplicativo foi encerrado.

geral

EXITCODE_NO_ERROR                         0
EXITCODE_COMMANDLINE_SYNTAX_ERROR         1

erros de arquivo de entrada

EXITCODE_CANNOT_READ_INPUT_FILE          20
EXITCODE_NO_INPUT_FILES                  21

erros de arquivo de saída

EXITCODE_CANNOT_WRITE_OUTPUT_FILE        40

erros de processamento

EXITCODE_CANNOT_CONVERT_TO_UNICODE       80
EXITCODE_CANNOT_WRITE_VALID_JSON         81

AMBIENTE

O aplicativo dcm2json tenta carregar os dicionários de dados DICOM especificados na variável de ambiente DCMDICTPATH. Por padrão, ou seja, se a variável de ambiente DCMDICTPATH não estiver definida, o arquivo < datadir>/dicom.dic será carregado, a menos que o dicionário esteja embutido no aplicativo (padrão no Windows).

É preferível manter o comportamento padrão e usar a variável de ambiente DCMDICTPATH apenas quando dicionários de dados alternativos forem necessários. A variável de ambiente DCMDICTPATH tem o mesmo formato da variável PATH dos shells Unix, em que dois-pontos (":") separam as entradas. Em sistemas Windows, um ponto e vírgula (";") é usado como separador. O código do dicionário de dados tenta carregar cada arquivo especificado na variável de ambiente DCMDICTPATH. Ocorre um erro se nenhum dicionário de dados puder ser carregado.

O aplicativo dcm2json tenta carregar tabelas de mapeamento de conjunto de caracteres. Isso ocorre quando o DCMTK foi compilado com a biblioteca oficonv (que é o padrão) e as tabelas de mapeamento não estão embutidas na biblioteca (padrão quando o DCMTK usa bibliotecas compartilhadas).

Os arquivos de tabela de mapeamento são esperados em < datadir> do DCMTK. A variável de ambiente DCMICONVPATH pode ser usada para especificar um local diferente. Se um local diferente for especificado, essas tabelas de mapeamento também substituem quaisquer tabelas integradas.

Copyright (C) 2016-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.