MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: ListDensityPlot and GraphicsArray

  • To: mathgroup at smc.vnet.net
  • Subject: [mg65531] Re: ListDensityPlot and GraphicsArray
  • From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
  • Date: Thu, 6 Apr 2006 06:52:45 -0400 (EDT)
  • References: <e0r06j$li$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

I can't reproduce your problem and as long as I can't see
what your RGB to Lab conversion does I can tell you anything.
But

ftoxyz = Compile[{{rgb, _Real}}, 100*If[rgb > 0.04045, ((rgb +
       0.055)/1.055)^2.4, rgb/12.94]
       ];

RGBtoXYZ[rgb_List, max_:255] :=
   With[{m = {{0.4124,  0.3576,  0.1805},
{0.2126, 0.7152 , 0.0722},
{0.0193 , 0.1192, 0.9505}}},
     Module[{varRGB},
       varRGB = ftoxyz /@ (N[rgb/max]);
       m.varRGB
       ]
     ]

ftolab = Compile[{{xyz, _Real}},
       If[xyz > 0.008856, xyz^(1/3), (7.787*xyz) + (16/116)]];

Clear[XYZtoCIELab]
XYZtoCIELab[xyz_List] :=
   Module[{vx, vy, vz},
     {vx, vy, vz} = ftolab /@ (xyz/{95.047, 100.000, 108.883});
     {116*vy - 16, 500*(vx - vy), 200*(vy - vz)}
     ]

RGBToCIELab[rgb_List, max_:255] :=
   Round /@ XYZtoCIELab[RGBtoXYZ[rgb, max]]

img = Import["G:/images/leopard.jpg"];
labimg = img /.
     Raster[bm_, args___] :> Raster[Map[RGBToCIELab, bm, {2}], args];

ListDensityPlot[Map[#[[2]] &, labimg[[1, 1]], {2}], Mesh ->
     False, AspectRatio -> Automatic]

work fine.

Regards
   Jens

buttgereit at biomediclab.de wrote:
> Dear Group,
> 
> using Mathematica 5.0 on WinXP I have a strange problem with
> ListDensityPlot.
> 
> I have imported a picture (PNG) using
> 
> img=Import["mypic.png"];
> 
> I can show it, all fine so far.
> 
> I then extract the pixel data (rgb in this case) using
> 
> raster=img//First//First;
> 
> I extract the red channel using
> 
> rc=Map[First,raster,{2}];
> 
> and can display it with
> 
> ListDensityPlot[rc];
> 
> However, when I convert the raster to Lab color space and extract, say
> the illumination
> 
> ListDensityPlot[lc];
> 
> fails with
> 
> "DensityGraphics::gmat: ... is not a rectangular array larger than 2 x
> 2"
> 
> But the size is identical to rc according to
> 
> Dimension[rc] is equal to Dimension[lc] : {400,300}.
> 
> Just Reals instead of Integers -- and though, rounding/scaling does not
> make a difference.
> 
> I have checked the array using
> 
> Union[Length/@lc]
> 
> which evaluates to {400} in this case -- doesn't this say it _is_
> rectangular? Do I miss something?
> 
> I can show part of the array using Take and define a region of at most
> 200x200 pixels -- expanding it again pops the error. I can move that
> "window" over the image without errors.
> Just expanding it does not work.
> 
> Any idea what could cause the problem? ( yes, I did restart windows ;)
> 
> Best Regards,
> 
> Peter
> 


  • Prev by Date: Re: Integrate problem
  • Next by Date: Re: Lost Values after For[ ] loop
  • Previous by thread: ListDensityPlot and GraphicsArray
  • Next by thread: Re: ListDensityPlot and GraphicsArray