Re: [Gimp-developer] Updated dicom writing plugin



After having read up on gegl I realize that that the "proper" thing to do
with the Dicom plugin, is to port it to gegl. Is that correct?

I further wonder if it is ok to add additional readers and writers for any
format to gegl? Here is a list of file formats that I have been using for
matrix (image) data over the years:

   - npy (numerical python)
   - FITS
   - HDF5 (http://www.hdfgroup.org/HDF5/)
   - Dicom
   - Bruker files (http://imaging.mrc-cbu.cam.ac.uk/imaging/FormatBruker)

Should I just add them, or should more rare formats be kept out of gegl
tree?

Another question, which I encountered with Dicom (but is relevant to the
current gimp FITS plugin as well). I chose to support only a subset of the
standard, in order to reduce external dependencies. A much more full
coverage would e.g. rely on the external library dcmtk (
http://dicom.offis.de/dcmtk.php.en). So what is the current policy? Minimal
dependencies, or rely on external libraries.

Regards,
Dov



On Wed, May 22, 2013 at 11:13 PM, Michael Natterer <mitch gimp org> wrote:

On Tue, 2013-05-21 at 14:58 +0300, Dov Grobgeld wrote:
Thanks Mitch,

I'll do my best to honor that role. Perhaps it will even trigger me of
getting into some gimp development. The prospect of a FLOAT,16- and
32-bit,etc version of gimp is indeed intriguing, and I realize looking at
the wiki that there is still a lot of work to get there.

You are most welcome to do whatever improvements on master :) We
seriously lack manpower.

Besides running autogen.sh and see what fails, is there a list of
prerequisites needed to compile and run HEAD from the git repo?

Just have git master of babl, gegl, gimp.

A
​nother question about gegl-gimp is about the display of a float images.
Is
the max intensity value always mapped to display=255 (assuming a display
of
8bit?).​

Yes, in the end everything is converted to the cairo-ARGB32 babl format
and goes thorugh an 8 bit cairo surface.

​Or is the mapping a configurable property? Let's say a user has a pair
of
float images showing an energy field where the max energy in one image is
0.5 and in the second image 1.0​
.
​ The user would like to look and compare the images one next. How can
she
set the display transfer function to get a fixed image-intensity to
display
gray level for the two images?

There is no nondestructive display transfer function unless you count
the "Color" tools in preview mode, you could certainly do the task like
that. The display filters are unfortunately still working on the cairo
surface used for rendering, so in 8 bit.

Regards,
--Mitch

On Tue, May 21, 2013 at 1:06 AM, Michael Natterer <mitch gimp org>
wrote:

On Mon, 2013-05-20 at 19:56 +0300, Dov Grobgeld wrote:
Since nobody objected, I interpreted that as a silent ok, and I
commited
both to master and to the gimp-2-8 branch. Please let me know if you
think
I was out of line and feel free to revert the commits, and let me
know
the
proper procedure.

The proper procedure is that since you now touched the plugin,
thou shalt henceforth maintain it for all eternity.

Thanks for the patches,
--mitch

On Mon, May 20, 2013 at 12:00 AM, Dov Grobgeld <
dov grobgeld gmail com
wrote:

Based on a user bug report, I updated the dicom file plugin. The
patch
is
included below.

I haven't done any contribution to gimp for ages, so I wonder if I
can
just commit it on my own? If not, should I just attach the patch
file
to a
bug report?

Is it ok if I create a version to the gimp-2-8 branch as well, so
that
it
will reach the user quicker?

Regards,
Dov

diff --git a/plug-ins/common/file-dicom.c
b/plug-ins/common/file-dicom.c
index de11b9c..d30cd34 100644
--- a/plug-ins/common/file-dicom.c
+++ b/plug-ins/common/file-dicom.c
@@ -18,7 +18,7 @@

 /*
  * The dicom reading and writing code was written from scratch
- * by Dov Grobgeld.  (dov imagic weizman ac il).
+ * by Dov Grobgeld.  (dov grobgeld gmail com).
  */

 #include "config.h"
@@ -1218,12 +1218,17 @@ dicom_ensure_required_elements_present
(GSList
*elements,
     /* 0002, 0001 - File Meta Information Version */
     { 0x0002, 0x0001, "OB", 2, (guint8 *) "\0\1" },
     /* 0002, 0010 - Transfer syntax uid */
-    { 0x0002, 0x0001, "UI",
+    { 0x0002, 0x0010, "UI",
       strlen ("1.2.840.10008.1.2.1"), (guint8 *)
"1.2.840.10008.1.2.1"},
     /* 0002, 0013 - Implementation version name */
     { 0x0002, 0x0013, "SH",
       strlen ("GIMP Dicom Plugin 1.0"), (guint8 *) "GIMP Dicom
Plugin
1.0" },
     /* Identifying group */
+    /* ImageType */
+    { 0x0008, 0x0008, "CS",
+      strlen ("ORIGINAL\\PRIMARY"), (guint8 *)
"ORIGINAL\\PRIMARY" },
+    { 0x0008, 0x0016, "UI",
+      strlen ("1.2.840.10008.5.1.4.1.1.7"), (guint8 *)
"1.2.840.10008.5.1.4.1.1.7" },
     /* Study date */
     { 0x0008, 0x0020, "DA",
       strlen (today_string), (guint8 *) today_string },
@@ -1236,14 +1241,23 @@ dicom_ensure_required_elements_present
(GSList
*elements,
     /* Content Date */
     { 0x0008, 0x0023, "DA",
       strlen (today_string), (guint8 *) today_string},
-    /* Modality - I have to add something.. */
+    /* Content Time */
+    { 0x0008, 0x0030, "TM",
+      strlen ("000000.000000"), (guint8 *) "000000.000000"},
+    /* AccessionNumber */
+    { 0x0008, 0x0050, "SH", strlen (""), (guint8 *) "" },
+    /* Modality */
     { 0x0008, 0x0060, "CS", strlen ("MR"), (guint8 *) "MR" },
+    /* ConversionType */
+    { 0x0008, 0x0064, "CS", strlen ("WSD"), (guint8 *) "WSD" },
+    /* ReferringPhysiciansName */
+    { 0x0008, 0x0090, "PN", strlen (""), (guint8 *) "" },
     /* Patient group */
     /* Patient name */
     { 0x0010,  0x0010, "PN",
       strlen ("DOE^WILBER"), (guint8 *) "DOE^WILBER" },
     /* Patient ID */
-    { 0x0010,  0x0020, "CS",
+    { 0x0010,  0x0020, "LO",
       strlen ("314159265"), (guint8 *) "314159265" },
     /* Patient Birth date */
     { 0x0010,  0x0030, "DA",
@@ -1251,6 +1265,12 @@ dicom_ensure_required_elements_present
(GSList
*elements,
     /* Patient sex */
     { 0x0010,  0x0040, "CS", strlen (""), (guint8 *) "" /*
unknown */
},
     /* Relationship group */
+    /* StudyId */
+    { 0x0020, 0x0010, "IS", strlen ("1"), (guint8 *) "1" },
+    /* SeriesNumber */
+    { 0x0020, 0x0011, "IS", strlen ("1"), (guint8 *) "1" },
+    /* AcquisitionNumber */
+    { 0x0020, 0x0012, "IS", strlen ("1"), (guint8 *) "1" },
     /* Instance number */
     { 0x0020, 0x0013, "IS", strlen ("1"), (guint8 *) "1" },

@@ -1576,7 +1596,7 @@ add_tag_pointer (GByteArray   *group_stream,
         */
       if (strstr ("UI|OB", value_rep) != NULL)
         {
-          g_byte_array_append (group_stream, (guint8 *) 0x0000,
1);
+          g_byte_array_append (group_stream, (guint8 *) "\0", 1);
         }
       else
         {


_______________________________________________
gimp-developer-list mailing list
gimp-developer-list gnome org
https://mail.gnome.org/mailman/listinfo/gimp-developer-list



_______________________________________________
gimp-developer-list mailing list
gimp-developer-list gnome org
https://mail.gnome.org/mailman/listinfo/gimp-developer-list





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]