imread.m fails reading/writing 16bit images correctly
Tatsuro MATSUOKA
tmacchant at yahoo.co.jp
Wed Jul 1 18:44:46 CDT 2009
Hello
I have tested in my cygwin build using octave-3.2.1-rc1 on cygwin-1.5.25-15.
Graphicsmagick is configured with
CC=gcc-4 CXX=g++-4 F77=gfortran-4 CFLAGS='-O3 -fomit-frame-pointer' CXXFLAGS='-O3
-fomit-frame-pointer' FFLAGS='-O3 -fomit-frame-pointer' ./configure --enable-shared --enable-static
--disable-openmp --with-quantum-depth=16 --without-threads --with-windows-font-dir=C:/WINDOWS/Fonts
octave:4> imwrite(uint16(12345),"test.tiff");
octave:5> img=imread("test.tiff")
img = 48
octave:6> class(img)
ans = uint8
octave:7> imfinfo("test.tiff")
ans =
{
Filename = /cygdrive/d/usr/Tatsu/program/Octave/test2/test.tiff
FileSize = 261
Height = 1
Width = 1
BitDepth = 16
Format = TIFF
LongFormat = Tagged Image File Format
XResolution = 0
YResolution = 0
TotalColors = 1
TileName =
AnimationDelay = 0
AnimationIterations = 0
ByteOrder = undefined
Gamma = 0
Matte = 0
ModulusDepth = 13
Quality = 75
QuantizeColors = 256
ResolutionUnits = undefined
ColorType = grayscale
View =
FileModDate = 2-Jul-2009 08:33:32
}
The behaviors are the same as your reports.
I will check your changeset from now.
Regards
Tatsuro
--- Benjamin Lindner wrote:
> Hello,
>
> using current development sources on mingw32, together with
> graphicsmagick-1.3.5 configured with --quantum-depth=16, imread does not
> correctly read 16bit images.
>
> octave.exe:2:C:\> imwrite(uint16(12345),"test.tiff");
> octave.exe:3:C:\> img=imread("test.tiff")
> img = 48
> octave.exe:4:C:\> class(img)
> ans = uint8
> octave.exe:5:C:\> imfinfo("test.tiff")
> ans =
> {
> Filename = C:\test.tiff
> FileSize = 261
> Height = 1
> Width = 1
> BitDepth = 16
> Format = TIFF
> LongFormat = Tagged Image File Format
> XResolution = 0
> YResolution = 0
> TotalColors = 1
> TileName =
> AnimationDelay = 0
> AnimationIterations = 0
> ByteOrder = undefined
> Gamma = 0
> Matte = 0
> ModulusDepth = 13
> Quality = 75
> QuantizeColors = 256
> ResolutionUnits = undefined
> ColorType = grayscale
> View =
> FileModDate = 29-Jun-2009 11:40:51
> }
>
> The reason (I believe) is that __magick_read__.cc (staring at line 418)
> determines from ModulusDepth the number of bits required to store image data
> into incorrectly.
> With the above Modulusdepth=13, the calculated bitdepth is 8, when it should
> be 16.
>
> The attached changeset fixes this, but it still does not work correctly.
>
> octave.exe:5:C:\> imwrite(uint16([12345,12346,12347]), "test2.tiff");
> octave.exe:6:C:\> img=imread("test2.tiff")
> img =
>
> 12344 12345 12346
>
> the values read are off-by-1.
>
> And apparently they are already written off-by-1
>
> c:\> tiffinfo -d test2.tiff
> TIFF Directory at offset 0xe (14)
> Image Width: 3 Image Length: 1
> Bits/Sample: 16
> Sample Format: unsigned integer
> Compression Scheme: None
> Photometric Interpretation: min-is-black
> Samples/Pixel: 1
> Rows/Strip: 1365
> Planar Configuration: single image plane
> Page Number: 0-1
> DocumentName: test2.tiff
> Software: GraphicsMagick 1.3.5 2009-01-26 Q16 http://www.GraphicsMagick.org/
> Strip 0:
> 38 30 39 30 3a 30
>
> and 0x3038 equals 12344 decimal, so something's wrong at creating the image file
> I couldn't yet figure out why this is so.
> Can someone confirm this behavoiur?
>
> benjamin
> --
> GRATIS f将舐 alle GMX-Mitglieder: Die maxdome Movie-FLAT!
> Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
> > # HG changeset patch
> # User Benjamin Lindner <lindnerb at users.sourceforge.net>
> # Date 1246274961 -7200
> # Node ID c39f66e65f188f1f405f6ed74bb8c3b757e2a203
> # Parent 34c8e1d9c9c273e10ad7f6cc9fdd8ddd5db6ed77
> determine correct image bitwidth in __magick_read__.cc
>
> diff -r 34c8e1d9c9c2 -r c39f66e65f18 src/ChangeLog
> --- a/src/ChangeLog Thu Jun 25 09:44:06 2009 +0200
> +++ b/src/ChangeLog Mon Jun 29 13:29:21 2009 +0200
> @@ -1,3 +1,8 @@
> +2009-06-29 Benjamin Lindner <lindnerb at users.sourceforge.net>
> +
> + * DLD-FUNCTIONS/__magick_read__.cc (F__magick_read__): Determine correct number
> + of bits required when reading images.
> +
> 2009-06-14 Jaroslav Hajek <highegg at gmail.com>
>
> * DLD-FUNCTIONS/lookup.cc (Flookup): Support character array lookup.
> diff -r 34c8e1d9c9c2 -r c39f66e65f18 src/DLD-FUNCTIONS/__magick_read__.cc
> --- a/src/DLD-FUNCTIONS/__magick_read__.cc Thu Jun 25 09:44:06 2009 +0200
> +++ b/src/DLD-FUNCTIONS/__magick_read__.cc Mon Jun 29 13:29:21 2009 +0200
> @@ -416,11 +416,15 @@
> else
> {
> unsigned int depth = imvec[0].modulusDepth ();
> - int i = 0;
> - while (depth >>= 1)
> - i++;
> - depth = 1 << i;
> -
> + if (depth > 1)
> + {
> + --depth;
> + int i = 1;
> + while (depth >>= 1)
> + i++;
> + depth = 1 << i;
> + }
> +
> switch (depth)
> {
> case 1:
> > _______________________________________________
> Bug-octave mailing list
> Bug-octave at octave.org
> https://www-old.cae.wisc.edu/mailman/listinfo/bug-octave
>
--------------------------------------
Power up the Internet with Yahoo! Toolbar.
http://pr.mail.yahoo.co.jp/toolbar/
More information about the Bug-octave
mailing list