Link

DICOM Tutorials

Contents

  1. Background
  2. Overview Tutorials on DICOM (and related topics)
  3. DICOM Programming Tutorials using Java
  4. DICOM Programming Tutorials using .NET
  5. Other Topics on DICOM
  6. Additonal Considerations
  7. Links to Resources
    1. DICOM Toolkits
    2. DICOM Viewers and PACS Applications
    3. Other DICOM and Related Links
  8. Disclaimer

Background

This is a series of articles on the topic of DICOM® that I have been working on slowly. DICOM is vast and complex healthcare standard which relates to many diagnostic medicine-related workflows such as modality imaging, image transfer, image storage, procedures, printing, and interpretation. The more I read and understand the history and evolution of this standard, I am blown away by wisdom and the foresight of the committee that designed the original standard and continues to improve it to this day. The standard provides a specification to enable information connectivity among a variety of vendors' products from the past, present and the future.

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. I have taken some liberties at simplifying some technical details for the newcomer. This is especially the case when I explain DICOM encoding as this is a difficult area to explain. Several DICOM files that I use throughout my examples may be more than eight characters long. The standard stipulates the file identifiers (names) to be at most 8 characters long (either uppercase alphabetic characters and numbers only) However, I deviate from this at the beginning of my tutorials intentionally to keep these details from distracting the learner. I hope you will forgive me for these small liberties in light of my main intention here which is to explain details regarding the standard by relating it to things that the readers are already comfortable with. 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.

“Whatever you do will be insignificant, but it is very important that you do it.” ~ Mahatma Gandhi

  1. Introduction to the DICOM Standard

  2. Overview of IHE (Integrating the Healthcare Enteprise)

  3. Basics of FHIR (Fast Healthcare Interoperability Resources)

  4. A Very Short Introduction to the HL7 2.x Standard

  5. HL7 V3 Standard - A High Level Overview

  6. Use of Coded Vocabularies and Nomenclatures in DICOM and HL7

DICOM Programming Tutorials using Java

  1. DICOM Basics using Java - Making Sense of the DICOM File

  2. DICOM Basics using Java - Creating a DICOM File

  3. DICOM Basics using Java - Extracting Image Data

  4. DICOM Basics using Java - Viewing DICOM Images

  5. DICOM Basics using Java - Understanding DICOM Directory

  6. DICOM Basics using Java - Understanding DICOM Verification (C-ECHO)

  7. DICOM Basics using Java - Understanding Association/Negotiations

  8. DICOM Basics using Java - Handling Transient Errors during Communications

  9. DICOM Basics using Java - Orthanc DICOM Server

  10. DICOM Basics using Java - Query and Retrieve Operations (C-FIND)

  11. DICOM Basics using Java - Query and Retrieve Operations (C-MOVE)

  12. DICOM Basics using Java - Query and Retrieve Operations (C-GET)

  13. DICOM Basics using Java - Store Service (C-STORE)

  14. DICOM Basics using Java - Storage Commitment Service (using N-ACTION and N-EVENT-REPORT)

  15. DICOM Basics using Java - Understanding Worklists and MPPS

  16. DICOM Basics using Java - Understanding DICOM Structured Reports

  17. DICOM Basics using Java - Understanding Print Operations

  18. DICOM Basics using Java - Understanding DICOM for the Web (QIDO-RS,WADO-RS,WADO-URI,STOW-RS and UPS-RS)

DICOM Programming Tutorials using .NET

  1. DICOM Basics using .NET and C# - Making Sense of the DICOM File

  2. DICOM Basics using .NET and C# - Creating a DICOM File

  3. DICOM Basics using .NET and C# - Extracting Image Data

  4. DICOM Basics using .NET and C# - Viewing DICOM Images

  5. DICOM Basics using .NET and C# - Reading DICOM Directories

  6. DICOM Basics using .NET and C# - Writing DICOM Directories

  7. DICOM Basics using .NET and C# - Understanding DICOM Verification (C-ECHO)

  8. DICOM Basics using .NET and C# - Understanding Association/Negotiations

  9. DICOM Basics using .NET and C# - Handling Transient Errors during Communications

  10. DICOM Basics using .NET and C# - Orthanc DICOM Server

  11. DICOM Basics using .NET and C# - Query and Retrieve Operations (C-FIND)

  12. DICOM Basics using .NET and C# - Query and Retrieve Operations (C-MOVE)

  13. DICOM Basics using .NET and C# - Query and Retrieve Operations (C-GET)

  14. DICOM Basics using .NET and C# - Store Service (C-STORE)

  15. DICOM Basics using .NET and C# - Storage Commitment Service (using N-ACTION and N-EVENT-REPORT)

  16. DICOM Basics using .NET and C# - Understanding Worklists and MPPS

  17. DICOM Basics using .NET and C# - Understanding DICOM Structured Reports

  18. DICOM Basics using .NET and C# - Understanding Print Operations

  19. DICOM Basics using .NET and C# - Understanding DICOM for the Web (QIDO-RS,WADO-RS,WADO-URI,STOW-RS and UPS-RS)

Other Topics on DICOM

  1. DICOM Basics - How do HL7, DICOM and IHE come together

  2. DICOM Basics - FHIR and DICOM

  3. DICOM Basics - Understanding DICOM Conformance Statements

  4. DICOM Basics - General Troubleshooting Tips and Techniques

Additonal 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.

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

DICOM Viewers and PACS Applications

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.