convert-dicom-to-json
v1.0.0
Published
Este módulo Node.js converte arquivos DICOM de um diretório de estudos médicos para um arquivo JSON estruturado, compatível com o OHIF Viewer.
Maintainers
Readme
DICOM to JSON Converter
Este módulo Node.js converte arquivos DICOM de um diretório de estudos médicos para um arquivo JSON estruturado, compatível com o OHIF Viewer.
Nota: Esta biblioteca é baseada no script oficial disponibilizado pelo OHIF e foi empacotada para facilitar a publicação e uso via NPM.
📋 O que ele faz
O módulo percorre recursivamente uma pasta contendo arquivos DICOM, extrai os metadados de cada imagem médica e gera um arquivo JSON organizado por:
- Estudos (Studies)
- Séries (Series)
- Instâncias (Instances)
O JSON gerado pode ser usado para carregar estudos médicos no OHIF Viewer através de uma fonte de dados DICOM JSON estática.
🔧 Instalação
npm install📖 Uso
Importe a função convertDICOMToJSON no seu código:
import { convertDICOMToJSON } from './index.js';
await convertDICOMToJSON(studyDirectory, urlPrefix, outputPath, scheme);Parâmetros
- studyDirectory: Caminho para a pasta contendo os arquivos DICOM
- urlPrefix: Prefixo da URL onde os arquivos DICOM serão hospedados
- outputPath: Caminho para salvar o arquivo JSON de saída
- scheme (opcional): Esquema de protocolo (padrão:
dicomweb)
💡 Exemplos de Uso
Exemplo 1: Arquivos hospedados no S3
import { convertDICOMToJSON } from './index.js';
await convertDICOMToJSON(
'./dicom-study',
'https://meu-bucket.s3.amazonaws.com/estudos/',
'./output.json'
);Isso irá:
- Ler todos os arquivos DICOM em
./dicom-study - Gerar URLs como:
dicomweb:https://meu-bucket.s3.amazonaws.com/estudos/Series1/Instance1.dcm - Salvar o JSON em
./output.json
Exemplo 2: Servidor local
import { convertDICOMToJSON } from './index.js';
await convertDICOMToJSON(
'C:\\medical-images\\study-001',
'http://localhost:3000/dicom/',
'study-001.json'
);Exemplo 3: Com esquema customizado
import { convertDICOMToJSON } from './index.js';
await convertDICOMToJSON(
'./images',
'https://example.com/pacs/',
'output.json',
'custom-scheme'
);Exemplo 4: Uso em um script
import { convertDICOMToJSON } from './index.js';
async function processStudy() {
try {
await convertDICOMToJSON(
'./patient-studies/study-123',
'https://pacs.hospital.com/studies/',
'./exports/study-123.json'
);
console.log('Conversão concluída com sucesso!');
} catch (error) {
console.error('Erro na conversão:', error);
}
}
processStudy();📦 Estrutura do JSON Gerado
{
"studies": [
// first study metadata
{
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.298806137288633453246975630178",
"StudyDate": "20000101",
"StudyTime": "",
"PatientName": "",
"PatientID": "LIDC-IDRI-0001",
"AccessionNumber": "",
"PatientAge": "",
"PatientSex": "",
"series": [
// first series metadata
{
"SeriesInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.179049373636438705059720603192",
"SeriesNumber": 3000566,
"Modality": "CT",
"SliceThickness": 2.5,
"instances": [
// first instance metadata
{
"metadata": {
"Columns": 512,
"Rows": 512,
"InstanceNumber": 1,
"SOPClassUID": "1.2.840.10008.5.1.4.1.1.2",
"PhotometricInterpretation": "MONOCHROME2",
"BitsAllocated": 16,
"BitsStored": 16,
"PixelRepresentation": 1,
"SamplesPerPixel": 1,
"PixelSpacing": [0.703125, 0.703125],
"HighBit": 15,
"ImageOrientationPatient": [1, 0, 0, 0, 1, 0],
"ImagePositionPatient": [-166, -171.699997, -10],
"FrameOfReferenceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.229925374658226729607867499499",
"ImageType": ["ORIGINAL", "PRIMARY", "AXIAL"],
"Modality": "CT",
"SOPInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.262721256650280657946440242654",
"SeriesInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.179049373636438705059720603192",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.298806137288633453246975630178",
"WindowCenter": -600,
"WindowWidth": 1600,
"SeriesDate": "20000101"
},
"url": "dicomweb:https://ohif-dicom-json-example.s3.amazonaws.com/LIDC-IDRI-0001/01-01-2000-30178/3000566.000000-03192/1-001.dcm"
},
// second instance metadata
{
"metadata": {
"Columns": 512,
"Rows": 512,
"InstanceNumber": 2,
"SOPClassUID": "1.2.840.10008.5.1.4.1.1.2",
"PhotometricInterpretation": "MONOCHROME2",
"BitsAllocated": 16,
"BitsStored": 16,
"PixelRepresentation": 1,
"SamplesPerPixel": 1,
"PixelSpacing": [0.703125, 0.703125],
"HighBit": 15,
"ImageOrientationPatient": [1, 0, 0, 0, 1, 0],
"ImagePositionPatient": [-166, -171.699997, -12.5],
"FrameOfReferenceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.229925374658226729607867499499",
"ImageType": ["ORIGINAL", "PRIMARY", "AXIAL"],
"Modality": "CT",
"SOPInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.512235483218154065970649917292",
"SeriesInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.179049373636438705059720603192",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.298806137288633453246975630178",
"WindowCenter": -600,
"WindowWidth": 1600,
"SeriesDate": "20000101"
},
"url": "dicomweb:https://ohif-dicom-json-example.s3.amazonaws.com/LIDC-IDRI-0001/01-01-2000-30178/3000566.000000-03192/1-002.dcm"
}
// ..... other instances metadata
]
}
// ... other series metadata
],
"NumInstances": 133,
"Modalities": "CT"
}
// second study metadata
]
}🏥 Integração com OHIF Viewer
O JSON gerado é compatível com a fonte de dados DICOM JSON do OHIF. Para mais detalhes, consulte a documentação do OHIF.
📝 Requisitos
- Node.js
- dcmjs (instalado automaticamente via npm)
⚙️ Funcionalidades
- ✅ Suporte a múltiplos frames (imagens multi-frame)
- ✅ Extração completa de metadados DICOM
- ✅ Organização hierárquica (Study → Series → Instances)
- ✅ Geração automática de URLs para cada instância
- ✅ Suporte a diferentes modalidades (CT, MR, PET, etc.)
- ✅ Cálculo automático de número de instâncias e modalidades por estudo
📄 Licença
ISC
