Get Patient Info from DICOM Print
Is it possible to get patient information from DICOM Print? Some developers, faced by systems with DICOM Print and no DICOM C-STORE have wondered whether that “DICOM output” could be used to capture images to store in a PACS.
Unfortunately, the answer is no - Patient Information cannot be retrieved from Printing Data as DICOM Printing only contains layout and pixel data, there is no patient information at all, not even a PatientID etc, let alone Modality or study Information.
The GetUsingMove method is designed to allow C-MOVE to be used as easily and synchronously as C-GET from the COM version of DicomObjects, as many commonly available servers refuse to support C-GET, forcing use of C-MOVE. While MoveImages has been available in DicomObjects for some time, it is difficult to use, requiring close co-ordination between a listening object (DicomViewer or DicomServer) and a DicomQuery object. GetUsingMove handles all the necessary co-ordination internally, opening a port, receiving the images, and presenting them, just like GetImages.
Grayscale Transformation Sequence
The Greyscale Transformation Sequence defines the conversion of a stored image (raw pixel data) into a displayed image. The following diagram (DICOM Standard Part 4, Figure N.2-1) shows the entire sequence of transformation.
The first row of transformations does the actual greyscale transformation, which transforms the raw pixel data to the right value to be displayed. The second row of transformations are the post image processing, applying changes other than greyscale transformations.
Hanging protocols are a means of defining how images should initially be displayed to a user. They are otherwise known as “user display profiles” or “default display profiles”, and have existed as proprietary systems for many years, but a vendor-neutral DICOM method for creating, storing, and retrieving them was finally agreed. Unfortunately, uptake in the real world has been very limited.
What they use Hanging protocols are actually quite complicated, as there are so many variables to consider:
Hierarchical SOP Instance
While DicomObjects can not create a Dicom Hierarchical SOP Instance dataset collection directly, however it can do much of the work for you. A Hierarchical SOP Instance Dataset collection are similar in structure to a DicomDir which DicomObjects can create automatically. Hierarchical SOP Instances are primarily used in the creation of Key Note Objects. The Structure of the Hierarchical SOP Instance is Study - Series - Instance (NO PATIENT)
To create a DICOM Image Histogram Module, users of DicomObjects can use the DicomImage.Histogram method, which returns an array containing the distribution of the raw pixel values.
Host .NET Viewer on Web Page
Microsoft has defined that you cannot use the overloaded syntax for the tag to load .NET user controls into Microsoft Internet Explorer from the file system because of security concerns. Therefore if you want to host the .NET version of DicomViewer object, you have to register it into the GAC (Global Assembly Cache) before you can use it, in the same way that you use the COM version Viewer object.
Hounsfield Units (HU) are used in CT images it is a measure of radio-density, calibrated to distilled water and free air.
HUs can be calculated from the pixel data with a Dicom Image via two methods.
The first (and harder) method involves using the Slope and Intercept value from the Dicom image and applying it to a target pixel.
HU=m*P+b where: m is the Dicom attribute (0028,1053) “Rescale slope” b is the Dicom attribute (0028,1052) “Rescale intercept” P is the value of that particular pixel in the pixels array.
How DicomObjects handles Width and Level values
The Width and Level properties of an image are unusual, in that they are both stored as a part of the image, and are also transient DicomImage properties, regularly adjusted by users. This page explains the relationship between the persistent and transient values.
How to Implement Shutters in DicomObjects
Shutters are a means to “black out” areas of an image outside the area of interest, and are defined in DICOM and in presentation states.
Contents Implementing Shutters in the .NET Version of DicomObjects
Circular Shutter Rectangular Shutter Implementing Shutters in the COM Version of DicomObjects
Circular Shutter Rectangular Shutter DicomObjects.NET In .NET version of DicomObjects, Shutters can be represented by DicomLabel objects, so users don’t have to search the DICOM Standard for the corresponding attributes for Shutter.
How to Import PDF to DICOMPDF
Import general PDF files and turn them into DICOM PDF format is not much different to import other file formats, i.e. windows Bitmap and Jpeg images.
Based on the DICOM supplement 104, we made two small programs (VB6 using COM version and CSharp using .NET version) which demonstrate what attributes are needed for making a valid DICOM PDF file.
How to Improve the Quality of Labels when Printing
Some users find that they get poor quality text, lines etc. when printing images to DICOM printers, especially when printing intrinsically small images, such as 256x256 MRIs or PET images.
This happens because DICOM only allows such annotations to be “burnt-in” to the pixel data, and the annotations cannot be sent directly to the printer as text (this is a DICOM rule, and is not unique to DicomObjects). Therefore, DicomObjects puts labels onto the image using the “Pixel grid” of the image itself, and the printer then scales that to match the space available.
How to Invert a DicomImage
By “invert”, most people mean change black to white and visa versa, and this can be done by a simple line of code.
How to Specify the Cine Display Rate
There are multiple ways of specifying Cine Rate (Multi-Frame Display Speed) in DICOM, in two categories:
The actual acquisition times of the frames There are two ways of specifying this, equally spaced or arbitrary, and the choice is defined by attribute Frame Increment Pointer (0028,0009), which will point at one or other of the following attributes:
Frame Time (0018,1063) –> this will give the time in ms for every frame (so Rate = 1000/Frame Time) Frame Time Vector (0018,1065) –> this is the frame time for each frame individually (so frame times do NOT need to be the same) Recommended Display Frame Rate (0008, 2144) This is specified in frames per second (unlike the acquisition times) and does NOT necessarily have to be the same as that calculated from the above, though there is no reason why it should be different.
How to choose which IP Address you connect from
When a PC has multiple IP Addresses, sometimes people would like to specify one of them to be used for connecting out to other DICOM AEs. This can be easily achieved in the .NET version of DicomObjects. The following CSharp sample code shows how this could be done: