My DICOM Tutorials
Background
This is a series of articles on the DICOM® standard which plays a crucial role in nearly all diagnostic medicine-related workflows such as modality imaging, image transfer, image storage, procedures, printing, and interpretation. I hope this series of articles is useful to programmers and other information technology personnel who are new to this field by providing a quick and yet broad understanding necessary of the fundamentals before they attempt to build DICOM applications or participate in any DICOM-related initiatives. Also, a quick disclaimer that I do not serve on the DICOM standards committee. So, you should to refer to the standard itself and its latest recommendations before starting any project involving this standard.
Although the world is full of suffering, it is also full of the overcoming of it. ~ Helen Keller
Overview Tutorials on DICOM (and related topics)
- Introduction to the DICOM Standard
- A Very Short Introduction to the HL7 2.x Standard
- Understanding DICOM Structured Reports
- HL7 V3 Standard - A High-Level Overview
- Overview of IHE (Integrating the Healthcare Enterprise)
- Use of Coded Vocabularies and Nomenclatures in DICOM and HL7
- Basics of FHIR (Fast Healthcare Interoperability Resources)
- HIPAA and Regulatory Compliance for Healthcare
- SOC Reports and their role in Healthcare
- GDPR - An Overview for Software Developers
DICOM Programming Tutorials using Java
- DICOM Basics using Java - Making Sense of the DICOM File
- DICOM Basics using Java - Creating a DICOM File
- DICOM Basics using Java - Extracting Image Data
- DICOM Basics using Java - Viewing DICOM Images
- DICOM Basics using Java - Understanding DICOM Directory
- DICOM Basics using Java - Understanding DICOM Verification (C-ECHO)
- DICOM Basics using Java - Understanding Association/Negotiations
- DICOM Basics using Java - Handling Transient Errors during Communications
- DICOM Basics using Java - Orthanc DICOM Server
- DICOM Basics using Java - Query and Retrieve Operations (C-FIND)
- DICOM Basics using Java - Query and Retrieve Operations (C-MOVE)
- DICOM Basics using Java - Query and Retrieve Operations (C-GET)
- DICOM Basics using Java - Store Service (C-STORE)
DICOM Programming Tutorials using .NET
- DICOM Basics using .NET and C# - Making Sense of the DICOM File
- DICOM Basics using .NET and C# - Reading DICOM Directories
- DICOM Basics using .NET and C# - Writing DICOM Directories
- DICOM Basics using .NET and C# - Understanding DICOM Verification (C-ECHO)
- DICOM Basics using .NET and C# - Understanding Association/Negotiations
- DICOM Basics using .NET and C# - Handling Transient Errors during Communications
- DICOM Basics using .NET and C# - Orthanc DICOM Server
- DICOM Basics using .NET and C# - Query and Retrieve Operations (C-FIND)
- DICOM Basics using .NET and C# - Store Service (C-STORE)
Challenges (new)
Take an Interactive QuizAdditonal Considerations
For the Java tutorials in the DICOM programming series, I use the freely available and easy to use PixelMed Java DICOM Library. For the .NET tutorials in the DICOM programming series, I use another freely available and open source toolkit called Fellow Oak (fo-dicom) DICOM Library. Although I like these implementations, you should be aware that there are a number of other toolkits (such as dcm4che, DicomObjects and DCMTK which are as good if not better in some respects) on the market. You should be able to follow along easily with any other toolkit (open source or otherwise) if you wish to do so as many of the DICOM-related concepts I explain in my tutorials are implemented by all these toolkits in some form or the other.
Links to Resources
I want to mention that that my use of these toolkits in this tutorial series does not in anyway imply my official endorsement of them for implementing DICOM-related functionality in your production applications. Every situation is unique, and only you are in the best position to decide what is best for you and your end users. Another thing to keep in mind is that my series of articles on DICOM programming is also not meant to be a tutorial on the PixelMed toolkit or the Fellow Oak (fo-dicom) DICOM toolkit. My sole focus is simply to build a basic understanding of DICOM concepts for programmers using small and focused code examples. So, if your goal is to learn how to use these particular toolkits in depth, then I would recommend that you contact the authors of these toolkits or any online help pages of these toolkits for more information. Here are some useful sites (no means exhaustive):
DICOM Toolkits
- PixelMed Open Source DICOM Toolkit
- Fellow Oak (fo-dicom) Open Source DICOM Toolkit
- Dcm4che Open Source DICOM Toolkit
- Dcmtk Open Source DICOM Toolkit
- Cornerstore.js Web-based Image Viewer SDK (includes DICOM Support)
DICOM Viewers and Applications
- Orthanc Open Source PACS Viewer and Server
- ClearCanvas Open Source PACS Viewer and Server
- Free Imaging Research tools from RSNA
Other DICOM Related Links
- DICOM Home Page
- HL7 Main Site
- IHE Home Page
- Fellow Oak (fo-dicom) Open Source DICOM Toolkit - Support Page
- List of DICOM Tags
- List of DICOM Transfer Syntaxes
- List of DICOM SOP classes
Disclaimer
I want to make a disclaimer about these articles. I do not serve on the DICOM standards committee. Therefore, I must caution you to take the information provided here with a grain of salt, and ultimately refer to the standard itself and its latest recommendations before starting any project involving the standard. For more information about the standard, you can visit its main site here.
If you have any questions or comments regarding these articles/tutorials, please feel free to send me an email. Please note that I may not get back to you right away due to work and other commitments.
DICOM® is the registered trademark of the National Electrical Manufacturers Association for its standards publications relating to digital communications of medical information. HL7, Health Level Seven, and FHIR are registered trademarks of Health Level Seven International.