Re: Re: Joint Histogram
- To: mathgroup at smc.vnet.net
- Subject: [mg81205] Re: [mg81153] Re: Joint Histogram
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Sat, 15 Sep 2007 04:16:32 -0400 (EDT)
- References: <fcb3gv$fg5$1@smc.vnet.net> <32961489.1189760341534.JavaMail.root@m35>
- Reply-to: drmajorbob at bigfoot.com
Actually,
{ydim, xdim} = Dimensions[data];
fails, since Dimensions[data] is {120,128,3}, and we can't set a list of
length 2 equal to a list of length 3.
But this works:
<< Histograms`
beans = Import[
"http://www.ee.usm.maine.edu/courses/ele489/data/beans.tif"]
Histogram3D[Flatten[beans[[1, 1]] /. {r_, g_, b_} :> {r, g}, 1]]
or
Histogram3D@Flatten[beans[[1, 1, All, All, {1, 2}]], 1]
And this, I believe, is the array of counts:
h = SparseArray[
Rule @@@
Tally@Flatten[beans[[1, 1]] /. {r_, g_, b_} :> {r, g}, 1], {256,
256}];
Bobby
On Fri, 14 Sep 2007 02:34:25 -0500, Mariusz Jankowski
<mjankowski at usm.maine.edu> wrote:
> The first answer is to use function JointImageHistogram in the Digital
> Image
> Processing package.
>
> However, the following will work:
>
>
> In[1]:= beans =
> Import["http://www.ee.usm.maine.edu/courses/ele489/data/beans.tif"]
>
> In[2]:= data = beans[[1, 1]];
>
> In[3]:= {ydim, xdim} = Dimensions[data];
>
> In[4]:= h = Table[0, {256}, {256}];
>
> In[5]:= Do[ h[[data[[i, j, 1]] + 1, data[[i, j, 2]] + 1]] += 1, {i ,
> ydim},
> {j, xdim}]
>
>
> ... and display matrix h.
>
>
> Bye, Mariusz
>
>
>
>
>
>
>
>>>> On 9/13/2007 at 6:30 AM, in message <fcb3gv$fg5$1 at smc.vnet.net>,
> cimon<tamanna.arora at gmail.com> wrote:
>> Hello
>>
>> I am completely new to Mathematica
>> and trying to work with images in it.
>>
>> I am trying to create a joint histogram out of an image taking its red
>> and green channel.
>> I get this error
>>
>> Table::iterb: Iterator (i,1,ydim), does not have appropriate bounds.
>> Table::iterb: Iterator (i,1,ydim), does not have appropriate bounds.
>>
>> (see in code below)
>>
>> When I have just written the first five lines and i try to execute. i
>> dont get this error.
>> But when I have written the for loop and than i try to execute than I
>> get this error.
>>
>>
>> I am just not able to fix this out.
>> can somebody plese guide me with this.
>> -------------------------------------------------------------------------
>> penny = Import["c:\penny.ppm"];
>> Shallow[penny];
>> data = penny[[1, 1]];
>>
>> ydim = Dimensions[data][[1]];
>> xdim = Dimensions[data][[2]];
>>
>> Table::iterb: Iterator (i,1,ydim), does not have appropriate bounds.
>> Table::iterb: Iterator (i,1,ydim), does not have appropriate bounds.
>>
>> (* Create a Joint table
>> Go to each (i, j)th Location in red and green Channel
>> Get Pixel value from (i, j)th location from each red and green
>> channel
>> Use that as an index into
>> Joint Table and incerment the value at that index by 1
>> *)
>>
>> Joint = Table[0, {ti, 1, 256}, {tb, 1, 256}];
>> Dimensions[Joint];
>>
>>
>> For[fi = 0, fi =E2=89=A4 xdim, fi++
>> For[fj = 0, fj =E2=89=A4 ydim, fj++
>> Joint[redChannel[[fi, fj]], greenChannel[[fi, fj]]] + >> 1]];
>>
>> Show[Graphics[Raster[Joint], AspectRatio -> 1, Axes -> True]]
>>
>>
>>
> --------------------------------------------------------------------------- >
>> ------------------------------------
>
>
--
DrMajorBob at bigfoot.com