Extended negotiation allows “options” to be negotiated between 2 Application Entities as part of Negotiation. In order for the option to be available for use, it must be both proposed by the initiator and agreed by the acceptor.
The uses for extended negotiation are currently:
Relational Queries Specification of storage level (how accurately the data is retained) for C-STORE In DicomObjects, these values are used as follows:
What’s the correct file extension for DICOM files? Many people are using “DCM” as extension for DICOM files, but in fact there should be NO extension for DICOM files, as required by the DICOM Standard (parts 10-12). Characters in files names must all be upper-case, numbers 0-9 can also be used in file names, and the maximum filename length is 8 characters.
Filtering on and Retrieving the "Modality" in a C-FIND
Many people wish to obtain a list of studies of a particular type (modality) - CR, MR etc. and try to filter/retrieve this in a standard STUDY level request by adding element 0008,0060 to a query (using DoRawQuery in DicomObjects, and are disappointed to discover that either the whole query is then rejected, or that this attribute is ignored. This is because modality is technically a SERIES level attribute in DICOM, as a DICOM study is allowed to contain multiple series, each with perhaps different modalities.
Frame Level Retrieval
Frame Level Retrieval (DICOM Supplement 119) was written by Dr. David Harvey (1962-2018), founder of Medical Connections, and is fully supported by DicomObjects.
Frame Selection Options There are 2 (actually 3, with the 3rd one using Content Time values to specify a Time Range) ways to ask for specific frames:
Simple Frame List Contains a list of frame numbers, each specifying a frame to be included in the returned object.
General Purpose Worklist
DICOM General Purpose Worklist (GPWL) is a means to allow reporting of other worklists to be shared between systems in a vendor neutral manner. it is of course supported by DicomObjects but industry uptake has been very low, as vendors like to “tie” their PACS and reporting stations together using proprietary protocols. It was retired from DICOM about 2010.
It is based closely on the Modality Worklist and Modality Performed Procedure Step services, and is summed up by this diagram:
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.
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.
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 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 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 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 implement C-Find with DicomObjects
There are 2 ways to send DICOM C-Find request in DicomObjects:
Use DicomQuery object Use DicomAssociation (.NET) or DicomConnection (COM) object DicomObjects.NET DicomQuery DicomQuery object is designed to be simple and easy to use as DicomObjects will handle all the Presentation Contexts in request as well as manage the open and close of the connection. DicomQuery q = new DicomQuery(); DicomDataSetCollection results; q.Node = "dicomserver.co.uk"; // the IP address of SCP q.