C# en DICOMweb Standard-API's gebruiken

In dit artikel wordt beschreven hoe u met de DICOMweb-service kunt werken met C# en voorbeeld-DCM DICOM-bestanden®.

Gebruik deze voorbeeldbestanden:

  • blue-circle.dcm
  • dicom-metadata.csv
  • green-square.dcm
  • red-triangle.dcm

De bestandsnaam, studyUID, seriesUID en instanceUID van de DICOM-voorbeeldbestanden zijn:

Bestand StudyUID SeriesUID InstanceUID
green-square.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652 1.2.826.0.1.3680043.8.498.12714725698140337137334606354172323212
red-triangle.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652 1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395
blue-circle.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.77033797676425927098669402985243398207 1.2.826.0.1.3680043.8.498.13273713909719068980354078852867170114

Notitie

Elk van deze bestanden vertegenwoordigt één exemplaar en maakt deel uit van dezelfde studie. Bovendien maken de groene vierkant en rode driehoek deel uit van dezelfde reeks, terwijl de blauwe cirkel zich in een aparte reeks bevindt.

Vereisten

Als u de DICOMweb Standard-API's wilt gebruiken, hebt u een exemplaar nodig van de DICOM-service die is geïmplementeerd. Zie DICOM-service implementeren met behulp van Azure Portal voor meer informatie.

Nadat u een exemplaar van de DICOM-service hebt geïmplementeerd, haalt u de URL voor uw app-service op:

  1. Meld u aan bij de Azure-portal.
  2. Zoek recente resources en selecteer uw DICOM-service-exemplaar.
  3. Kopieer de service-URL van uw DICOM-service. Zorg ervoor dat u de versie opgeeft als onderdeel van de URL bij het indienen van aanvragen. Zie API-versiebeheer voor de DICOM-service voor meer informatie.

Installeer in uw toepassing de volgende NuGet-pakketten:

Een DicomWebClient maken

Nadat u de DICOM-service hebt geïmplementeerd, maakt u een DicomWebClient. Voer het codefragment uit om DicomWebClient te maken, die u voor de rest van deze zelfstudie gebruikt. Zorg ervoor dat beide NuGet-pakketten zijn geïnstalleerd. Zie Toegangstoken ophalen voor de DICOM-service met behulp van Azure CLI voor meer informatie.

string webServerUrl ="{Your DicomWeb Server URL}"
var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(webServerUrl);
IDicomWebClient client = new DicomWebClient(httpClient);
client.HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", “{Your token value}”); 

Met de DicomWebClient kunnen we nu de bewerkingen Store, Ophalen, Zoeken en Verwijderen uitvoeren.

DICOM-exemplaren opslaan (STOW)

Met de DicomWebClient kunnen we nu DICOM-bestanden opslaan.

Eén exemplaar opslaan

Eén exemplaar opslaan laat zien hoe u één DICOM-bestand uploadt.

Details:

  • POST /studies
DicomFile dicomFile = await DicomFile.OpenAsync(@"{Path To blue-circle.dcm}");
DicomWebResponse response = await client.StoreAsync(new[] { dicomFile });

Exemplaren opslaan voor een specifieke studie

Bewaarexemplaren voor een specifieke studie laten zien hoe u een DICOM-bestand uploadt naar een opgegeven studie.

Details:

  • POST /studies/{study}
DicomFile dicomFile = await DicomFile.OpenAsync(@"{Path To red-triangle.dcm}");
DicomWebResponse response = await client.StoreAsync(new[] { dicomFile }, "1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420");

Voordat u verdergaat met het volgende deel van de zelfstudie, uploadt u het green-square.dcm bestand met een van de voorgaande methoden.

DICOM-exemplaar (WADO) ophalen

De codefragmenten laten zien hoe u elk van de query's ophaalt met behulp van de DicomWebClient die u eerder hebt gemaakt.

De variabelen worden in de rest van de voorbeelden gebruikt:

string studyInstanceUid = "1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"; //StudyInstanceUID for all 3 examples
string seriesInstanceUid = "1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"; //SeriesInstanceUID for green-square and red-triangle
string sopInstanceUid = "1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"; //SOPInstanceUID for red-triangle

Alle exemplaren in een studie ophalen

Details:

  • GET /studies/{study}
DicomWebResponse response = await client.RetrieveStudyAsync(studyInstanceUid);

Alle drie de dcm-bestanden die u eerder hebt geüpload, maken deel uit van dezelfde studie, dus het antwoord moet alle drie de exemplaren retourneren. Controleer of het antwoord de statuscode OK heeft en of alle drie de exemplaren worden geretourneerd.

De opgehaalde exemplaren gebruiken

In het volgende codefragment ziet u hoe u toegang hebt tot de exemplaren die worden opgehaald. Het laat ook zien hoe u toegang hebt tot een aantal velden van de exemplaren en hoe u deze opslaat als een dcm-bestand.

DicomWebAsyncEnumerableResponse<DicomFile> response = await client.RetrieveStudyAsync(studyInstanceUid);
await foreach (DicomFile file in response)
{
    string patientName = file.Dataset.GetString(DicomTag.PatientName);
    string studyId = file.Dataset.GetString(DicomTag.StudyID);
    string seriesNumber = file.Dataset.GetString(DicomTag.SeriesNumber);
    string instanceNumber = file.Dataset.GetString(DicomTag.InstanceNumber);

    file.Save($"<path_to_save>\\{patientName}{studyId}{seriesNumber}{instanceNumber}.dcm");
}

Metagegevens van alle instanties in onderzoek ophalen

Met dit antwoord worden de metagegevens opgehaald voor alle exemplaren binnen één studie.

Details:

  • GET /studies/{study}/metadata
DicomWebResponse response = await client.RetrieveStudyMetadataAsync(studyInstanceUid);

Alle drie de dcm-bestanden die we eerder hebben geüpload, maken deel uit van dezelfde studie, dus het antwoord moet de metagegevens retourneren voor alle drie de exemplaren. Controleer of het antwoord een statuscode van OK heeft en of alle metagegevens worden geretourneerd.

Alle exemplaren in een reeks ophalen

Met dit antwoord worden alle exemplaren binnen één reeks opgehaald.

Details:

  • GET /studies/{study}/series/{series}
DicomWebResponse response = await client.RetrieveSeriesAsync(studyInstanceUid, seriesInstanceUid);

Deze reeks heeft twee exemplaren (groen-vierkant en rode driehoek), dus het antwoord moet beide exemplaren retourneren. Controleer of het antwoord een statuscode van OK heeft en of beide exemplaren worden geretourneerd.

Metagegevens van alle exemplaren in een reeks ophalen

Met dit antwoord worden de metagegevens opgehaald voor alle exemplaren binnen één studie.

Details:

  • GET /studies/{study}/series/{series}/metadata
DicomWebResponse response = await client.RetrieveSeriesMetadataAsync(studyInstanceUid, seriesInstanceUid);

Deze reeks heeft twee exemplaren (groen-vierkant en rode driehoek), zodat het antwoord metagegevens voor beide exemplaren moet retourneren. Controleer of het antwoord de statuscode OK heeft en of beide exemplaren van de metagegevens worden geretourneerd.

Eén exemplaar binnen een reeks van een studie ophalen

Met deze aanvraag wordt één exemplaar opgehaald.

Details:

  • GET /studies/{study}/series{series}/instances/{instance}
DicomWebResponse response = await client.RetrieveInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid);

Dit antwoord mag alleen het rode driehoekje van het exemplaar retourneren. Controleer of het antwoord een statuscode van OK heeft en of het exemplaar wordt geretourneerd.

Metagegevens van één exemplaar ophalen binnen een reeks van een studie

Met deze aanvraag worden de metagegevens opgehaald voor één exemplaar binnen één studie en reeks.

Details:

  • GET /studies/{study}/series/{series}/instances/{instance}/metadata
DicomWebResponse response = await client.RetrieveInstanceMetadataAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid);

Met dit antwoord worden alleen de metagegevens voor het exemplaar met een rode driehoek geretourneerd. Controleer of het antwoord een statuscode van OK heeft en of de metagegevens worden geretourneerd.

Een of meer frames ophalen uit één exemplaar

Met deze aanvraag worden een of meer frames opgehaald uit één exemplaar.

Details:

  • GET /studies/{study}/series/{series}/instances/{instance}/frames/{frames}
DicomWebResponse response = await client.RetrieveFramesAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid, frames: new[] { 1 });

Dit antwoord retourneert het enige frame van de rode driehoek. Controleer of het antwoord een statuscode van OK heeft en of het frame wordt geretourneerd.

Query DICOM (QIDO)

Notitie

Raadpleeg de DICOM Conformance-instructie voor ondersteunde DICOM-kenmerken.

Zoeken naar studies

Met deze aanvraag wordt gezocht naar een of meer studies op basis van DICOM-kenmerken.

Details:

  • GET /studies? StudyInstanceUID={study}
string query = $"/studies?StudyInstanceUID={studyInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Valideert dat het antwoord één studie bevat en of de antwoordcode ok is.

Zoeken naar reeksen

Met deze aanvraag wordt gezocht naar een of meer reeksen door DICOM-kenmerken.

Details:

  • GET /series? SeriesInstanceUID={series}
string query = $"/series?SeriesInstanceUID={seriesInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Valideert of het antwoord één reeks bevat en of de antwoordcode ok is.

Zoeken naar reeksen binnen een studie

Met deze aanvraag wordt gezocht naar een of meer reeksen binnen één onderzoek door DICOM-kenmerken.

Details:

  • GET /studies/{study}/series? SeriesInstanceUID={series}
string query = $"/studies/{studyInstanceUid}/series?SeriesInstanceUID={seriesInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Valideert of het antwoord één reeks bevat en of de antwoordcode ok is.

Exemplaren zoeken

Met deze aanvraag wordt gezocht naar een of meer exemplaren op basis van DICOM-kenmerken.

Details:

  • GET /instances? SOPInstanceUID={instance}
string query = $"/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Valideert dat het antwoord één exemplaar bevat en of de antwoordcode OK is.

Zoeken naar instanties binnen een studie

Met deze aanvraag wordt gezocht naar een of meer exemplaren binnen één onderzoek door DICOM-kenmerken.

Details:

  • GET /studies/{study}/instances? SOPInstanceUID={instance}
string query = $"/studies/{studyInstanceUid}/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Valideert dat het antwoord één exemplaar bevat en of de antwoordcode OK is.

Zoeken naar instanties binnen een studie en reeks

Met deze aanvraag wordt gezocht naar een of meer exemplaren binnen één studie en één reeks door DICOM-kenmerken.

Details:

  • GET /studies/{study}/series/{series}instances? SOPInstanceUID={instance}
string query = $"/studies/{studyInstanceUid}/series/{seriesInstanceUid}/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Valideert dat het antwoord één exemplaar bevat en of de antwoordcode OK is.

DICOM verwijderen

Notitie

Verwijderen maakt geen deel uit van de DICOM-standaard, maar is voor het gemak toegevoegd.

Een specifiek exemplaar in een studie en reeks verwijderen

Met deze aanvraag wordt één exemplaar binnen één studie en één reeks verwijderd.

Details:

  • DELETE /studies/{study}/series/{series}/instances/{instance}
string sopInstanceUidRed = "1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395";
DicomWebResponse response = await client.DeleteInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUidRed);

Hiermee verwijdert u het exemplaar van de rode driehoek van de server. Als dit lukt, bevat de antwoordstatuscode geen inhoud.

Een specifieke reeks in een studie verwijderen

Met deze aanvraag wordt één reeks (en alle onderliggende exemplaren) in één studie verwijderd.

Details:

  • DELETE /studies/{study}/series/{series}
DicomWebResponse response = await client.DeleteSeriesAsync(studyInstanceUid, seriesInstanceUid);

Met dit antwoord wordt het green-square-exemplaar (het enige element in de reeks) van de server verwijderd. Als dit lukt, bevat de antwoordstatuscode geen inhoud.

Een specifiek onderzoek verwijderen

Met deze aanvraag wordt één studie verwijderd (en alle onderliggende reeksen en instanties).

Details:

  • DELETE /studies/{study}
DicomWebResponse response = await client.DeleteStudyAsync(studyInstanceUid);

Met dit antwoord wordt het blauwcirkelexemplaren (het enige element in de reeks) van de server verwijderd. Als dit lukt, bevat de antwoordstatuscode geen inhoud.

Notitie

DICOM® is het gedeponeerde handelsmerk van de National Electrical Manufacturers Association voor haar standaardenpublicaties met betrekking tot digitale communicatie van medische informatie.