[Gdcm-hackers] gdcm-git:Grassroots DICOM branch release updated. b60c1421068a9e5013f9e05f870b0e0d9f
Cross-platform DICOM implementation
Brought to you by:
malat
|
From: Mathieu M. <ma...@us...> - 2020-03-13 15:53:17
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Grassroots DICOM".
The branch, release has been updated
via b60c1421068a9e5013f9e05f870b0e0d9f495849 (commit)
via d981ef23efbbe70bfe6afa44c9cd0c2eefae7ffd (commit)
via a7931d784ba56a1c8fbcfac8a13ac1abfde85662 (commit)
via 87f64c0f26afca2f4fb12ad03acfb16e8ec40fe6 (commit)
from 0fc90d88a36968761531fe2f8145d478b7e19187 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceforge.net/p/gdcm/gdcm/ci/b60c1421068a9e5013f9e05f870b0e0d9f495849/
commit b60c1421068a9e5013f9e05f870b0e0d9f495849
Author: Mathieu Malaterre <mat...@gm...>
Date: Fri Mar 13 11:29:00 2020 +0100
Add better support for EnhancedMRColorImageStorage
diff --git a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
index 38178aa88..d2481a166 100644
--- a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
+++ b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
@@ -449,6 +449,7 @@ std::vector<double> ImageHelper::GetOriginValue(File const & f)
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::OphthalmicTomographyImageStorage
|| ms == MediaStorage::MultiframeSingleBitSecondaryCaptureImageStorage
@@ -582,6 +583,7 @@ std::vector<double> ImageHelper::GetDirectionCosinesValue(File const & f)
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::MultiframeSingleBitSecondaryCaptureImageStorage
|| ms == MediaStorage::MultiframeGrayscaleByteSecondaryCaptureImageStorage
@@ -917,6 +919,7 @@ void ImageHelper::SetDimensionsValue(File& f, const Pixmap & img)
// cleanup pass:
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::MultiframeSingleBitSecondaryCaptureImageStorage
|| ms == MediaStorage::MultiframeGrayscaleByteSecondaryCaptureImageStorage
@@ -955,6 +958,7 @@ std::vector<double> ImageHelper::GetRescaleInterceptSlopeValue(File const & f)
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ /*|| ms == MediaStorage::EnhancedMRColorImageStorage*/
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::XRay3DAngiographicImageStorage
|| ms == MediaStorage::XRay3DCraniofacialImageStorage
@@ -1304,6 +1308,7 @@ std::vector<double> ImageHelper::GetSpacingValue(File const & f)
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::OphthalmicTomographyImageStorage
|| ms == MediaStorage::MultiframeSingleBitSecondaryCaptureImageStorage
@@ -1609,6 +1614,7 @@ void ImageHelper::SetSpacingValue(DataSet & ds, const std::vector<double> & spac
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::MultiframeSingleBitSecondaryCaptureImageStorage
|| ms == MediaStorage::MultiframeGrayscaleByteSecondaryCaptureImageStorage
@@ -1892,6 +1898,7 @@ void ImageHelper::SetOriginValue(DataSet & ds, const Image & image)
&& ms != MediaStorage::XRay3DAngiographicImageStorage
&& ms != MediaStorage::XRay3DCraniofacialImageStorage
&& ms != MediaStorage::EnhancedMRImageStorage
+ && ms != MediaStorage::EnhancedMRColorImageStorage
&& ms != MediaStorage::EnhancedPETImageStorage
&& ms != MediaStorage::EnhancedCTImageStorage
&& ms != MediaStorage::IVOCTForPresentation
@@ -1909,6 +1916,7 @@ void ImageHelper::SetOriginValue(DataSet & ds, const Image & image)
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::XRay3DAngiographicImageStorage
|| ms == MediaStorage::XRay3DCraniofacialImageStorage
@@ -2040,6 +2048,7 @@ void ImageHelper::SetDirectionCosinesValue(DataSet & ds, const std::vector<doubl
&& ms != MediaStorage::XRay3DAngiographicImageStorage
&& ms != MediaStorage::XRay3DCraniofacialImageStorage
&& ms != MediaStorage::EnhancedMRImageStorage
+ && ms != MediaStorage::EnhancedMRColorImageStorage
&& ms != MediaStorage::EnhancedPETImageStorage
&& ms != MediaStorage::EnhancedCTImageStorage
&& ms != MediaStorage::IVOCTForPresentation
@@ -2076,6 +2085,7 @@ void ImageHelper::SetDirectionCosinesValue(DataSet & ds, const std::vector<doubl
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ || ms == MediaStorage::EnhancedMRColorImageStorage
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::MultiframeSingleBitSecondaryCaptureImageStorage
|| ms == MediaStorage::MultiframeGrayscaleByteSecondaryCaptureImageStorage
@@ -2175,6 +2185,7 @@ void ImageHelper::SetRescaleInterceptSlopeValue(File & f, const Image & img)
&& ms != MediaStorage::MultiframeGrayscaleWordSecondaryCaptureImageStorage
&& ms != MediaStorage::MultiframeTrueColorSecondaryCaptureImageStorage
&& ms != MediaStorage::EnhancedMRImageStorage
+ /*&& ms != MediaStorage::EnhancedMRColorImageStorage*/
&& ms != MediaStorage::EnhancedCTImageStorage
&& ms != MediaStorage::EnhancedPETImageStorage
&& ms != MediaStorage::XRay3DAngiographicImageStorage
@@ -2199,6 +2210,7 @@ void ImageHelper::SetRescaleInterceptSlopeValue(File & f, const Image & img)
if( ms == MediaStorage::SegmentationStorage ) return; // seg storage cannot have rescale slope
if( ms == MediaStorage::EnhancedCTImageStorage
|| ms == MediaStorage::EnhancedMRImageStorage
+ /*|| ms == MediaStorage::EnhancedMRColorImageStorage*/
|| ms == MediaStorage::EnhancedPETImageStorage
|| ms == MediaStorage::XRay3DAngiographicImageStorage
|| ms == MediaStorage::XRay3DCraniofacialImageStorage
https://sourceforge.net/p/gdcm/gdcm/ci/d981ef23efbbe70bfe6afa44c9cd0c2eefae7ffd/
commit d981ef23efbbe70bfe6afa44c9cd0c2eefae7ffd
Author: Mathieu Malaterre <mat...@gm...>
Date: Fri Mar 13 11:08:04 2020 +0100
Better handling for single slice
diff --git a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
index 80b042e81..38178aa88 100644
--- a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
+++ b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
@@ -282,17 +282,18 @@ static bool ComputeZSpacingFromIPP(const DataSet &ds, double &zspacing)
}
}
} else {
- // single slice
+ // single slice, this is not an error to not find the zspacing in this case.
+ zspacing = 1.0;
const Tag tfgs0(0x5200,0x9229);
- if( !ds.FindDataElement( tfgs0 ) ) return false;
+ if( !ds.FindDataElement( tfgs0 ) ) return true;
SmartPointer<SequenceOfItems> sqi0 = ds.GetDataElement( tfgs0 ).GetValueAsSQ();
- if( !(sqi0 && sqi0->GetNumberOfItems() > 0) ) return false;
+ if( !(sqi0 && sqi0->GetNumberOfItems() > 0) ) return true;
// Get first item:
const Item &item = sqi0->GetItem(1);
const DataSet & subds = item.GetNestedDataSet();
// <entry group="0028" element="9110" vr="SQ" vm="1" name="Pixel Measures Sequence"/>
const Tag tpms(0x0028,0x9110);
- if( !subds.FindDataElement(tpms) ) return false;
+ if( !subds.FindDataElement(tpms) ) return true;
//const SequenceOfItems * sqi2 = subds.GetDataElement( tpms ).GetSequenceOfItems();
SmartPointer<SequenceOfItems> sqi2 = subds.GetDataElement( tpms ).GetValueAsSQ();
assert( sqi2 );
@@ -300,7 +301,7 @@ static bool ComputeZSpacingFromIPP(const DataSet &ds, double &zspacing)
const DataSet & subds2 = item2.GetNestedDataSet();
// <entry group="0028" element="0030" vr="DS" vm="2" name="Pixel Spacing"/>
const Tag tps(0x0018,0x0088);
- if( !subds2.FindDataElement(tps) ) return false;
+ if( !subds2.FindDataElement(tps) ) return true;
const DataElement &de = subds2.GetDataElement( tps );
Attribute<0x0018,0x0088> at;
at.SetFromDataElement( de );
https://sourceforge.net/p/gdcm/gdcm/ci/a7931d784ba56a1c8fbcfac8a13ac1abfde85662/
commit a7931d784ba56a1c8fbcfac8a13ac1abfde85662
Author: Mathieu Malaterre <mat...@gm...>
Date: Fri Mar 13 11:05:07 2020 +0100
Better support for HardcopyColorImageStorage
diff --git a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
index ac4f67f97..80b042e81 100644
--- a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
+++ b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
@@ -1184,7 +1184,8 @@ Tag ImageHelper::GetSpacingTagFromMediaStorage(MediaStorage const &ms)
t = Tag(0x0018,0x2010);
break;
case MediaStorage::HardcopyGrayscaleImageStorage:
- t = Tag(0xffff,0xffff);
+ case MediaStorage::HardcopyColorImageStorage:
+ t = Tag(0x0018,0x2010); // Nominal Scanned Pixel Spacing
break;
case MediaStorage::GEPrivate3DModelStorage: // FIXME FIXME !!!
case MediaStorage::Philips3D:
https://sourceforge.net/p/gdcm/gdcm/ci/87f64c0f26afca2f4fb12ad03acfb16e8ec40fe6/
commit 87f64c0f26afca2f4fb12ad03acfb16e8ec40fe6
Author: Mathieu Malaterre <mat...@gm...>
Date: Thu Mar 12 17:05:09 2020 +0100
Add missing bits for Fuji Mammo
diff --git a/Source/DataDictionary/gdcmSOPClassUIDToIOD.cxx b/Source/DataDictionary/gdcmSOPClassUIDToIOD.cxx
index d217f3ece..b0d33b95d 100644
--- a/Source/DataDictionary/gdcmSOPClassUIDToIOD.cxx
+++ b/Source/DataDictionary/gdcmSOPClassUIDToIOD.cxx
@@ -127,6 +127,7 @@ namespace gdcm
// private:
{ "1.3.12.2.1107.5.9.1" , "Siemens Non-image IOD Modules"}, // CSA Non-Image Storage
{ "1.2.392.200036.9125.1.1.2" , "Fuji Private CR Image IOD Modules"}, //
+{ "1.2.392.200036.9125.1.1.4" , "Fuji Private Mammo CR Image IOD Modules"}, //
{ nullptr, nullptr }
};
diff --git a/Source/DataDictionary/gdcmUIDs.cxx b/Source/DataDictionary/gdcmUIDs.cxx
index 8e0eb20fa..27b02d3ec 100644
--- a/Source/DataDictionary/gdcmUIDs.cxx
+++ b/Source/DataDictionary/gdcmUIDs.cxx
@@ -490,6 +490,7 @@ namespace gdcm
{"1.2.840.113619.5.2","Implicit VR Big Endian DLX (G.E Private)"},
// DICOM_Conformance_Statement_GEMINI_R3.5_R3.6.pdf
{"1.3.46.670589.33.1.4.1","CT-private-ELE"},
+{"1.2.392.200036.9125.1.1.4","Fuji Private Mammo CR Image Storage"},
//
//
//
diff --git a/Source/InformationObjectDefinition/Part3.xml b/Source/InformationObjectDefinition/Part3.xml
index 27bec75cb..ad0c3e5b7 100644
--- a/Source/InformationObjectDefinition/Part3.xml
+++ b/Source/InformationObjectDefinition/Part3.xml
@@ -2135,6 +2135,43 @@ Totally made up, do not copy:
<entry ie="Image" name="VOI LUT" ref="C.11.2" usage="U"/>
<entry ie="Image" name="SOP Common" ref="C.12.1" usage="M"/>
</iod>
+ <iod table="FUJI.2" name="Fuji Private Mammo CR Image IOD Modules">
+ <entry ie="Patient" name="Patient" ref="C.7.1.1" usage="M"/>
+ <entry ie="Patient" name="Specimen Identification" ref="C.7.1.2" usage="U"/>
+ <entry ie="Patient" name="Clinical Trial Subject" ref="C.7.1.3" usage="U"/>
+ <entry ie="Study" name="General Study" ref="C.7.2.1" usage="M"/>
+ <entry ie="Study" name="Patient Study" ref="C.7.2.2" usage="U"/>
+ <entry ie="Study" name="Clinical Trial Study" ref="C.7.2.3" usage="U"/>
+ <entry ie="Series" name="General Series" ref="C.7.3.1" usage="M"/>
+ <entry ie="Series" name="Clinical Trial Series" ref="C.7.3.2" usage="U"/>
+ <entry ie="Series" name="DX Series" ref="C.8.11.1" usage="M"/>
+ <entry ie="Series" name="Mammography Series" ref="C.8.11.6" usage="M"/>
+ <entry ie="Frame of Reference" name="Frame of Reference" ref="C.7.4.1" usage="C - Required if multiple images are obtained without releasing breast compression"/>
+ <entry ie="Equipment" name="General Equipment" ref="C.7.5.1" usage="M"/>
+ <entry ie="Image" name="General Image" ref="C.7.6.1" usage="M"/>
+ <entry ie="Image" name="Image Pixel" ref="C.7.6.3" usage="M"/>
+ <entry ie="Image" name="Contrast/Bolus" ref="C.7.6.4" usage="U"/>
+ <entry ie="Image" name="Display Shutter" ref="C.7.6.11" usage="U"/>
+ <entry ie="Image" name="Device" ref="C.7.6.12" usage="U"/>
+ <entry ie="Image" name="Intervention" ref="C.7.6.13" usage="U"/>
+ <entry ie="Image" name="DX Anatomy Imaged" ref="C.8.11.2" usage="M"/>
+ <entry ie="Image" name="DX Image" ref="C.8.11.3" usage="M"/>
+ <entry ie="Image" name="DX Detector" ref="C.8.11.4" usage="M"/>
+ <entry ie="Image" name="X-Ray Collimator" ref="C.8.7.3" usage="U"/>
+ <entry ie="Image" name="DX Positioning" ref="C.8.11.5" usage="U"/>
+ <entry ie="Image" name="X-Ray Tomo Acquisition" ref="C.8.7.7" usage="U"/>
+ <entry ie="Image" name="X-Ray Acquisition Dose" ref="C.8.7.8" usage="U"/>
+ <entry ie="Image" name="X-Ray Generation" ref="C.8.7.9" usage="U"/>
+ <entry ie="Image" name="X-Ray Filtration" ref="C.8.7.10" usage="U"/>
+ <entry ie="Image" name="X-Ray Grid" ref="C.8.7.11" usage="U"/>
+ <entry ie="Image" name="Mammography Image" ref="C.8.11.7" usage="M"/>
+ <entry ie="Image" name="Overlay Plane" ref="C.9.2" usage="C - Required if graphic annotation is present - See A.27.3"/>
+ <entry ie="Image" name="VOI LUT" ref="C.11.2" usage="C - Required if Presentation Intent Type (0008,0068) is FOR PRESENTATION. Shall not be present otherwise."/>
+ <entry ie="Image" name="Image Histogram" ref="C.11.5" usage="U"/>
+ <entry ie="Image" name="Acquisition Context" ref="C.7.6.14" usage="M"/>
+ <entry ie="Image" name="SOP Common" ref="C.12.1" usage="M"/>
+ </iod>
+
<module ref="C.2.1" table="C.2-1" name="Patient Relationship Module Attributes">
<entry group="0008" element="1110" name="Referenced Study Sequence">
<description>Uniquely identifies the Study SOP Instances associated with the Patient SOP Instance. One or more Items may be included in this Sequence.</description>
diff --git a/Source/InformationObjectDefinition/gdcmDefs.cxx b/Source/InformationObjectDefinition/gdcmDefs.cxx
index 3254643e9..0945dd732 100644
--- a/Source/InformationObjectDefinition/gdcmDefs.cxx
+++ b/Source/InformationObjectDefinition/gdcmDefs.cxx
@@ -232,6 +232,9 @@ const char *Defs::GetIODNameFromMediaStorage(MediaStorage const &ms)
case MediaStorage::FujiPrivateCRImageStorage:
iodname = "Fuji Private CR Image IOD Modules";
break;
+ case MediaStorage::FujiPrivateMammoCRImageStorage:
+ iodname = "Fuji Private Mammo CR Image IOD Modules";
+ break;
case MediaStorage::CSANonImageStorage:
iodname = "Siemens Non-image IOD Modules";
break;
diff --git a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
index 656284bc3..ac4f67f97 100644
--- a/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
+++ b/Source/MediaStorageAndFileFormat/gdcmImageHelper.cxx
@@ -1167,6 +1167,7 @@ Tag ImageHelper::GetSpacingTagFromMediaStorage(MediaStorage const &ms)
case MediaStorage::XRayAngiographicImageStorage:
case MediaStorage::XRayRadiofluoroscopingImageStorage:
case MediaStorage::XRayAngiographicBiPlaneImageStorageRetired:
+ case MediaStorage::FujiPrivateMammoCRImageStorage:
// (0018,1164) DS [0.5\0.5] # 8, 2 ImagerPixelSpacing
t = Tag(0x0018,0x1164);
break;
-----------------------------------------------------------------------
Summary of changes:
Source/DataDictionary/gdcmSOPClassUIDToIOD.cxx | 1 +
Source/DataDictionary/gdcmUIDs.cxx | 1 +
Source/InformationObjectDefinition/Part3.xml | 37 ++++++++++++++++++++++
Source/InformationObjectDefinition/gdcmDefs.cxx | 3 ++
.../MediaStorageAndFileFormat/gdcmImageHelper.cxx | 27 ++++++++++++----
5 files changed, 63 insertions(+), 6 deletions(-)
hooks/post-receive
--
Grassroots DICOM
|