현대 의료 응용 프로그램은 의료 이미지 데이터를 시청하고 관리하기위한 웹 기반 인터페이스에 점점 더 의존합니다.DICOM 파일을 JSON으로 변환하면 JavaScript 프레임 워크, REST APIs 및 클라우드 플랫폼과 무조건 통합 할 수 있습니다.이 가이드는 Aspose.Medical for .NET을 사용하여 C#로 DICO를 JSO로 전환하는 방법을 보여줍니다.

왜 DICOM을 JSON으로 변환합니까?

DICOM (Digital Imaging and Communications in Medicine)는 의료 이미지를위한 표준 형식이지만, 이중 구조는 웹 응용 프로그램에서 작업하는 데 어려움을 겪습니다.

  • JavaScript 호환성: JSON은 React, Vue 및 Angular과 같은 웹 브라우저 및 프론트 엔드 프레임에 태어납니다.
  • REST API 통합: JSON은 현대 웹 API의 실제 표준입니다.
  • 데이터베이스 스토리지: MongoDB와 같은 NoSQL 데이터베스가 JSON 문서를 원래 저장합니다.
  • 인간 읽기 가능성: JSON은 바이너리 DICOM과 비교하여 검사 및 분해하기 쉽습니다.

DICOM PS3.18 표준은 JSON 데이터를 정의하여 건강 관리 시스템 간의 상호 작용을 보장합니다.

당신의 .NET 프로젝트를 설정

먼저 .NET을 위한 Aspose.Medical을 설치하고 측정된 라이센스를 설정하십시오.

using Aspose.Medical;
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

// Activate metered license
Metered metered = new Metered();
metered.SetMeteredKey("your-public-key", "your-private-key");

기본 DICOM에서 JSON 변환

DICOM 파일을 JSON으로 변환하는 가장 간단한 방법 :

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

public class DicomJsonConverter
{
    public string ConvertToJson(string dicomFilePath)
    {
        // Load the DICOM file
        DicomFile dicomFile = DicomFile.Open(dicomFilePath);
        
        // Serialize dataset to JSON string
        string json = DicomJsonSerializer.Serialize(dicomFile.Dataset);
        
        return json;
    }
}

프레티 프린트 JSON Debugging

개발 중, 형식화 된 JSON은 더 쉽게 읽고 분해됩니다 :

public string ConvertToFormattedJson(string dicomFilePath)
{
    DicomFile dicomFile = DicomFile.Open(dicomFilePath);
    
    // Configure serialization options
    var options = new DicomJsonSerializerOptions
    {
        WriteIndented = true  // Enable pretty-print
    };
    
    string json = DicomJsonSerializer.Serialize(dicomFile.Dataset, options);
    
    return json;
}

Hex 코드 대신 태그 키워드를 사용하십시오.

기본적으로 DICOM JSON은 hexadecimal 태그 코드를 사용합니다.더 읽을 수 있는 출력은 키워드 이름을 사용하십시오.

public string ConvertWithKeywords(string dicomFilePath)
{
    DicomFile dicomFile = DicomFile.Open(dicomFilePath);
    
    var options = new DicomJsonSerializerOptions
    {
        WriteIndented = true,
        UseKeywordsAsJsonKeys = true,  // Use "PatientName" instead of "00100010"
        WriteKeyword = true,           // Include keyword in output
        WriteName = true               // Include human-readable name
    };
    
    string json = DicomJsonSerializer.Serialize(dicomFile.Dataset, options);
    
    return json;
}

REST API 엔드포인트 구축

다음은 업로드 된 DICOM 파일을 JSON으로 변환하는 ASP.NET 코어 엔드 포인트를 만드는 방법입니다.

using Microsoft.AspNetCore.Mvc;
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

[ApiController]
[Route("api/[controller]")]
public class DicomController : ControllerBase
{
    [HttpPost("to-json")]
    public async Task<IActionResult> ConvertToJson(IFormFile file)
    {
        if (file == null || file.Length == 0)
        {
            return BadRequest("No DICOM file provided");
        }

        try
        {
            // Save uploaded file temporarily
            var tempPath = Path.GetTempFileName();
            using (var stream = new FileStream(tempPath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }

            // Convert to JSON
            DicomFile dicomFile = DicomFile.Open(tempPath);
            
            var options = new DicomJsonSerializerOptions
            {
                WriteIndented = true,
                UseKeywordsAsJsonKeys = true
            };
            
            string json = DicomJsonSerializer.Serialize(dicomFile.Dataset, options);

            // Clean up temp file
            System.IO.File.Delete(tempPath);

            return Content(json, "application/json");
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"Conversion failed: {ex.Message}");
        }
    }
    
    [HttpGet("metadata/{fileName}")]
    public IActionResult GetMetadata(string fileName)
    {
        var filePath = Path.Combine("DicomFiles", fileName);
        
        if (!System.IO.File.Exists(filePath))
        {
            return NotFound("DICOM file not found");
        }

        DicomFile dicomFile = DicomFile.Open(filePath);
        
        // Extract specific metadata fields
        var metadata = new
        {
            PatientName = dicomFile.Dataset.GetString(DicomTag.PatientName),
            PatientID = dicomFile.Dataset.GetString(DicomTag.PatientID),
            StudyDate = dicomFile.Dataset.GetString(DicomTag.StudyDate),
            Modality = dicomFile.Dataset.GetString(DicomTag.Modality),
            StudyDescription = dicomFile.Dataset.GetString(DicomTag.StudyDescription)
        };

        return Ok(metadata);
    }
}

큰 파일을 위한 스트림 기반 시리화

큰 DICOM 파일의 경우, 메모리 사용을 줄이기 위해 스트림 기반 시리즈를 사용하십시오 :

public async Task ConvertToJsonStreamAsync(string dicomFilePath, string outputPath)
{
    DicomFile dicomFile = DicomFile.Open(dicomFilePath);
    
    var options = new DicomJsonSerializerOptions
    {
        WriteIndented = true
    };
    
    using (var fileStream = new FileStream(outputPath, FileMode.Create))
    {
        await DicomJsonSerializer.SerializeAsync(
            fileStream, 
            dicomFile.Dataset, 
            options);
    }
}

다중 파일을 위한 배치 변환

DICOM 파일의 전체 디렉토리를 처리합니다 :

public class BatchDicomConverter
{
    public async Task ConvertDirectoryAsync(string inputDir, string outputDir)
    {
        Directory.CreateDirectory(outputDir);
        
        var dicomFiles = Directory.GetFiles(inputDir, "*.dcm");
        
        var options = new DicomJsonSerializerOptions
        {
            WriteIndented = true,
            UseKeywordsAsJsonKeys = true
        };

        foreach (var filePath in dicomFiles)
        {
            try
            {
                DicomFile dicomFile = DicomFile.Open(filePath);
                
                string fileName = Path.GetFileNameWithoutExtension(filePath);
                string outputPath = Path.Combine(outputDir, $"{fileName}.json");
                
                using (var stream = new FileStream(outputPath, FileMode.Create))
                {
                    await DicomJsonSerializer.SerializeAsync(
                        stream, 
                        dicomFile.Dataset, 
                        options);
                }
                
                Console.WriteLine($"Converted: {fileName}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Failed to convert {filePath}: {ex.Message}");
            }
        }
    }
}

React Frontend와의 통합

API가 JSON을 반환하면 React에서 사용하면 간단합니다.

// React component to display DICOM metadata
import React, { useState } from 'react';

function DicomViewer() {
    const [metadata, setMetadata] = useState(null);
    
    const handleFileUpload = async (event) => {
        const file = event.target.files[0];
        const formData = new FormData();
        formData.append('file', file);
        
        const response = await fetch('/api/dicom/to-json', {
            method: 'POST',
            body: formData
        });
        
        const json = await response.json();
        setMetadata(json);
    };
    
    return (
        <div>
            <input type="file" onChange={handleFileUpload} accept=".dcm" />
            {metadata && (
                <pre>{JSON.stringify(metadata, null, 2)}</pre>
            )}
        </div>
    );
}

모범 사례

웹 애플리케이션을 위해 DICOM을 JSON으로 변환할 때, 이 팁을 기억하십시오 :

  • ** 변환 전에 익명화**: 항상 웹 APIs를 통해 DICOM 데이터를 노출하기 전에 환자 식별 가능한 정보를 제거합니다.
  • Async 방법을 사용하십시오: 웹 응용 프로그램에서는 끈을 차단하는 것을 피하기 위해 asynchronous 시리화를 사용합니다.
  • Cache 변환된 데이터: 동일한 DICOM 파일이 자주 요청되는 경우, JSON 출력의 Cache
  • 입력 파일을 확인하십시오: 업로드된 파일이 처리하기 전에 DICOM 유효한지 확인합니다.
  • 비너리 데이터를 조심스럽게 처리하십시오: 큰 픽셀 데이터는 JSON 응답에서 별도로 처리되거나 제외되어야합니다.

결론

DICOM 파일을 JSON으로 변환하면 현대 웹 개발을위한 의료 이미지 데이터가 열립니다. .NET에 대한 Aspose.Medical을 사용하면 쉽게 PS3.18-일치하는 Json에 DIKOM 데이터 세트를 시리즈화하고 REST APIs를 구축하고 JavaScript 프레임 워크와 통합 할 수 있습니다.이 가이드의 예제는 웹 기반 디코마 시청자, 환자 포털 및 건강 관리 데이터 플랫폼을 건설하는 기초를 제공합니다.

DICOM JSON 시리화 옵션에 대한 자세한 내용은 다음을 참조하십시오. ASPOSE. 의료 문서.

More in this category