This is a series of articles on the topic of DICOM that I am currently (very slowly) working on. About 8 articles have been completed thus far. DICOM is vast and complex because it deals with several areas of the information technology that enables diagnostic medicine such as 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.
“Whatever you do will be insignificant, but it is very important that you do it.” ~ Mahatma Gandhi
I am writing this series primarily for two reasons. The first reason is that I wanted to give back some of the learning that I have gained through the years from other people (mostly through the Internet). Finding information regarding this standard from a software programmer perspective always was (and continues to be) hard to come by. Keeping this in mind, I have attempted to write this series with as many code examples as I could tying the theory to the implementation where I can. The second reason I am writing this series is that it provides me with an opportunity to brush up on my own knowledge of DICOM (especially on some topics which I have had only minimal exposure to; WADO is one example). Very rarely do DICOM application developers work on all aspects of this standard (except someone like David Clunie). For instance, someone who works on implementing a DICOM viewer or deals with image manipulation rarely ever works on the communications/networking side of the standard as well. So, I really feel that I have benefited from writing these articles by exploring nearly all areas of the standard.
Here are the articles in this series:
★ DICOM Basics - Storage Commitment Service
★ DICOM Basics - Understanding MWL
★ DICOM Basics - Understanding MPPS
★ DICOM Basics - Using GPWL (General Purpose Work List)
★ DICOM Basics - Understanding DICOM Structured Reports
★ DICOM Basics - Understanding Print Operations
★ DICOM Basics - Understanding WADO
★ DICOM Basics - FHIR
★ DICOM Basics - Conformance Testing
★ HL7, DICOM and IHE
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 a 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.
Also, I use a freely available and powerful DICOM toolkit called PixelMed Java DICOM Library to illustrate several DICOM-related concepts that I cover in my tutorials. Although I like this implementation, you should be aware that there are a number of other toolkits (such as dcm4che and Fellow Oak which are as good if not better in some respects) in 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 these toolkits in some form or the other. I chose this toolkit because it is a standalone toolkit and is therefore easy to install and illustrate many concepts through succinct code examples. But please note that the use of the PixelMed DICOM toolkit in this tutorial series does not in anyway imply my official endorsement of it for implementing DICOM-related functionality in your production application. Every situation is unique, and only you are in the best position to decide what is best for you and your end users. This is also not meant to be a tutorial on the PixelMed toolkit as my focus is simply to tie DICOM concepts to things any programmer should be able to relate to. So, if your goal is to learn how to use the PixelMed library, I would encourage you to visit the PixelMed website or check out its discussion forum page for details.
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.