Re: ListDensityPlot and GraphicsArray
- To: mathgroup at smc.vnet.net
- Subject: [mg65549] Re: ListDensityPlot and GraphicsArray
- From: "buttgereit at biomediclab.de" <buttgereit at biomediclab.de>
- Date: Fri, 7 Apr 2006 06:14:25 -0400 (EDT)
- References: <e0r06j$li$1@smc.vnet.net><e12tf1$jfs$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Jens, thanks for the response. Of course, Your code works on the picture (<g> who would have thought). What bothers me is that I don't see what's the problem with the array I feed into ListDensityPlot. Do You have an idea? In[3]:= ListDensityPlot[toobig , Mesh -> False] >From In[3]:= DensityGraphics::"gmat": " <<1>> is not a rectangular array larger than 2 x 2." Out[3]= - DensityGraphics - In[4]:=Dimensions[toobig] Out[4]={400, 300} In[5]:=Union[NumberQ /@ Flatten[toobig]] Out[5]={True} In[6]:=Union[Length /@ toobig] Out[6]={300} In[7]:=Union[Length /@ Transpose[toobig]] Out[7]={400} In[8]:={Max[#], Min[#]} &@Flatten[toobig] Out[8]={108.9, 0.0582891} In[9]:=Union[Head /@ Flatten[toobig]] Out[9]={Real} Thanks + Best Regards, Peter Jens-Peer Kuska schrieb: > 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 > >