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:
- Meld u aan bij het Azure-portaal.
- Zoek recente resources en selecteer uw DICOM-service-exemplaar.
- 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
Store-exemplaren 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);
De reeks heeft twee exemplaren (groen-vierkant en rode driehoek), dus het antwoord moet metagegevens retourneren voor beide exemplaren. 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);
Het antwoord moet 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);
Het antwoord retourneert alleen de metagegevens voor het rode driehoekje van het exemplaar. 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 });
Het antwoord moet het enige frame van de rode driehoek retourneren. 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.QueryStudyAsync(query);
Controleer of 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.QuerySeriesAsync(query);
Controleer 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.QueryStudySeriesAsync(studyInstanceUid, query);
Controleer 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.QueryInstancesAsync(query);
Controleer of 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.QueryStudyInstanceAsync(studyInstanceUid, query);
Controleer of 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.QueryStudySeriesInstanceAsync(studyInstanceUid, seriesInstanceUid, query);
Controleer of 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);
Met dit antwoord wordt het exemplaar van de rode driehoek van de server verwijderd. 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);
Het antwoord verwijdert het green-square-exemplaar van de server (dit is het enige element in de reeks). 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);
Het antwoord verwijdert het blauwcirkelexemplaren van de server (dit is het enige element in de reeks). 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.