Använda standard-API:er för C# och DICOMweb
Den här artikeln visar hur du arbetar med DICOMweb-tjänsten med C# och exempel .dcm DICOM-filer®.
Använd följande exempelfiler:
- blue-circle.dcm
- dicom-metadata.csv
- green-square.dcm
- red-triangle.dcm
Filnamn, studyUID, seriesUID och instanceUID för DICOM-exempelfilerna är:
Fil | 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 |
Kommentar
Var och en av dessa filer representerar en enda instans och ingår i samma studie. Dessutom är den gröna kvadraten och den röda triangeln en del av samma serie, medan den blå cirkeln är i en separat serie.
Förutsättningar
Om du vill använda DICOMweb Standard API:er behöver du en instans av DICOM-tjänsten distribuerad. Mer information finns i Distribuera DICOM-tjänsten med hjälp av Azure Portal.
När du har distribuerat en instans av DICOM-tjänsten hämtar du URL:en för din apptjänst:
- Logga in på Azure-portalen.
- Sök efter senaste resurser och välj din DICOM-tjänstinstans.
- Kopiera tjänst-URL:en för dicom-tjänsten. Se till att ange versionen som en del av URL:en när du gör begäranden. Mer information finns i API-versionshantering för DICOM-tjänsten.
Installera följande NuGet-paket i ditt program:
Skapa en DicomWebClient
När du har distribuerat DICOM-tjänsten skapar du en DicomWebClient. Kör kodfragmentet för att skapa DicomWebClient, som du använder för resten av den här självstudien. Kontrollera att du har båda NuGet-paketen installerade. Mer information finns i Hämta åtkomsttoken för DICOM-tjänsten med hjälp av Azure CLI.
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}”);
Med DicomWebClient kan vi nu utföra åtgärderna Store, Hämta, Sök och Ta bort.
Lagra DICOM-instanser (STOW)
Med DicomWebClient kan vi nu lagra DICOM-filer.
Lagra en enskild instans
Lagra en enskild instans visar hur du laddar upp en enda DICOM-fil.
Detaljer:
- POST /studies
DicomFile dicomFile = await DicomFile.OpenAsync(@"{Path To blue-circle.dcm}");
DicomWebResponse response = await client.StoreAsync(new[] { dicomFile });
Lagra instanser för en specifik studie
Lagra instanser för en specifik studie visar hur du laddar upp en DICOM-fil till en angiven studie.
Detaljer:
- 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");
Innan du går vidare till nästa del av självstudien laddar du upp green-square.dcm
filen med någon av ovanstående metoder.
Hämta DICOM-instans (WADO)
Kodfragmenten visar hur du utför var och en av hämtningsfrågorna med hjälp av DicomWebClient som skapades tidigare.
Variablerna används i resten av exemplen.
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
Hämta alla instanser i en studie
Detaljer:
- GET /studies/{study}
DicomWebResponse response = await client.RetrieveStudyAsync(studyInstanceUid);
Alla tre dcm-filerna som du laddade upp tidigare ingår i samma studie, så svaret bör returnera alla tre instanserna. Kontrollera att svaret har statuskoden OK och att alla tre instanserna returneras.
Använda de hämtade instanserna
Följande kodfragment visar hur du kommer åt de instanser som hämtas. Den visar också hur du kommer åt några av fälten i instanserna och hur du sparar den som en dcm-fil.
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");
}
Hämta metadata för alla instanser i studien
Det här svaret hämtar metadata för alla instanser i en enda studie.
Detaljer:
- GET /studies/{study}/metadata
DicomWebResponse response = await client.RetrieveStudyMetadataAsync(studyInstanceUid);
Alla tre dcm-filerna som vi laddade upp tidigare ingår i samma studie, så svaret bör returnera metadata för alla tre instanserna. Kontrollera att svaret har statuskoden OK och att alla metadata returneras.
Hämta alla instanser i en serie
Det här svaret hämtar alla instanser i en enda serie.
Detaljer:
- GET /studies/{study}/series/{series}
DicomWebResponse response = await client.RetrieveSeriesAsync(studyInstanceUid, seriesInstanceUid);
Den här serien har två instanser (grön-kvadrat och röd-triangel), så svaret bör returnera båda instanserna. Kontrollera att svaret har statuskoden OK och att båda instanserna returneras.
Hämta metadata för alla instanser i en serie
Det här svaret hämtar metadata för alla instanser i en enda studie.
Detaljer:
- GET /studies/{study}/series/{series}/metadata
DicomWebResponse response = await client.RetrieveSeriesMetadataAsync(studyInstanceUid, seriesInstanceUid);
Serien har två instanser (grön-kvadrat och röd-triangel), så svaret bör returnera metadata för båda instanserna. Kontrollera att svaret har statuskoden OK och att båda instanserna av metadata returneras.
Hämta en enskild instans i en serie av en studie
Den här begäran hämtar en enda instans.
Detaljer:
- GET /studies/{study}/series{series}/instances/{instance}
DicomWebResponse response = await client.RetrieveInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid);
Svaret bör endast returnera den röda instanstriangeln. Kontrollera att svaret har statuskoden OK och att instansen returneras.
Hämta metadata för en enskild instans i en serie av en studie
Den här begäran hämtar metadata för en enskild instans i en enda studie och serie.
Detaljer:
- GET /studies/{study}/series/{series}/instances/{instance}/metadata
DicomWebResponse response = await client.RetrieveInstanceMetadataAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid);
Svaret bör endast returnera metadata för den röda instanstriangeln. Kontrollera att svaret har statuskoden OK och att metadata returneras.
Hämta en eller flera bildrutor från en enda instans
Den här begäran hämtar en eller flera bildrutor från en enda instans.
Detaljer:
- GET /studies/{study}/series/{series}/instances/{instance}/frames/{frames}
DicomWebResponse response = await client.RetrieveFramesAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid, frames: new[] { 1 });
Svaret ska returnera den enda ramen från den röda triangeln. Kontrollera att svaret har statuskoden OK och att ramen returneras.
Fråga DICOM (QIDO)
Sök efter studier
Den här begäran söker efter en eller flera studier med DICOM-attribut.
Detaljer:
- GET /studies? StudyInstanceUID={study}
string query = $"/studies?StudyInstanceUID={studyInstanceUid}";
DicomWebResponse response = await client.QueryStudyAsync(query);
Kontrollera att svaret innehåller en studie och att svarskoden är OK.
Sök efter serier
Den här begäran söker efter en eller flera serier efter DICOM-attribut.
Detaljer:
- GET /series? SeriesInstanceUID={series}
string query = $"/series?SeriesInstanceUID={seriesInstanceUid}";
DicomWebResponse response = await client.QuerySeriesAsync(query);
Kontrollera att svaret innehåller en serie och att svarskoden är OK.
Söka efter serier i en studie
Den här begäran söker efter en eller flera serier i en enda studie med DICOM-attribut.
Detaljer:
- GET /studies/{study}/series? SeriesInstanceUID={series}
string query = $"/studies/{studyInstanceUid}/series?SeriesInstanceUID={seriesInstanceUid}";
DicomWebResponse response = await client.QueryStudySeriesAsync(studyInstanceUid, query);
Kontrollera att svaret innehåller en serie och att svarskoden är OK.
Sök efter instanser
Den här begäran söker efter en eller flera instanser efter DICOM-attribut.
Detaljer:
- GET/instances? SOPInstanceUID={instance}
string query = $"/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryInstancesAsync(query);
Kontrollera att svaret innehåller en instans och att svarskoden är OK.
Sök efter instanser i en studie
Den här begäran söker efter en eller flera instanser i en enda studie med DICOM-attribut.
Detaljer:
- GET /studies/{study}/instances? SOPInstanceUID={instance}
string query = $"/studies/{studyInstanceUid}/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryStudyInstanceAsync(studyInstanceUid, query);
Kontrollera att svaret innehåller en instans och att svarskoden är OK.
Sök efter instanser i en studie och serie
Den här begäran söker efter en eller flera instanser i en enda studie och en enda serie med DICOM-attribut.
Detaljer:
- 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);
Kontrollera att svaret innehåller en instans och att svarskoden är OK.
Ta bort DICOM
Kommentar
Borttagning är inte en del av DICOM-standarden, men har lagts till för enkelhetens skull.
Ta bort en specifik instans i en studie och serie
Den här begäran tar bort en enskild instans i en enda studie och en enda serie.
Detaljer:
- 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);
Det här svaret tar bort den röda triangelinstansen från servern. Om det lyckas innehåller svarsstatuskoden inget innehåll.
Ta bort en specifik serie i en studie
Den här begäran tar bort en enskild serie (och alla underordnade instanser) i en enda studie.
Detaljer:
- DELETE /studies/{study}/series/{series}
DicomWebResponse response = await client.DeleteSeriesAsync(studyInstanceUid, seriesInstanceUid);
Svaret tar bort den grön-kvadratiska instansen från servern (det är det enda elementet kvar i serien). Om det lyckas innehåller svarsstatuskoden inget innehåll.
Ta bort en specifik studie
Den här begäran tar bort en enskild studie (och alla underordnade serier och instanser).
Detaljer:
- DELETE /studies/{study}
DicomWebResponse response = await client.DeleteStudyAsync(studyInstanceUid);
Svaret tar bort den blå cirkelinstansen från servern (det är det enda elementet kvar i serien). Om det lyckas innehåller svarsstatuskoden inget innehåll.
Kommentar
DICOM® är ett registrerat varumärke som tillhör National Electrical Manufacturers Association för dess standarder publikationer som rör digital kommunikation av medicinsk information.