Re: mutual information of red and green channel
- To: mathgroup at smc.vnet.net
- Subject: [mg81327] Re: mutual information of red and green channel
- From: dh <dh at metrohm.ch>
- Date: Wed, 19 Sep 2007 05:32:24 -0400 (EDT)
- References: <fcnljv$sc3$1@smc.vnet.net>
Hy, to prevent zero divide errors, you can e.g. preload every bin with a small number. hope this helps, Daniel vickyisai at gmail.com wrote: > Hello > > I am using the following code to calculate mutual information of red > and green channel of an image. > > I am calculating Ixy= Sum(i)Sum(j) P(REDi,GREENj) Log[P(REDi,GREENj)/ > P(REDi)/P(GREENj) ] > > (that is this formula > http://upload.wikimedia.org/math/c/b/b/cbb518be041b820958181a932a5cd4ff.png > ) > > I am getting an error of "Indeterminate expression 0(-=E2=88=9E) encountered. > " > > I believe I am getting this because I am taking Probability of Redi > from a histogram that I have computed (value of REDi divided by total > no of pixels ....as my probability of REDi. ame for GREENj > But that histogram has 0 at some places which is leading to divide by > zero. > > (i plotted that histogram to check that) > > How should I calculated mutual information of red and green channel of > an image. > > ( I use Mathematica 5.2 and dont have image processing package) > Thank You > > Code is below: > -------------------------------------------------------------------------- > image=Import["c:/fish.ppm"]; > (* Show[image]; *) > > > > part=image[[1,1]]; > > red=part[[All,All,1]]; > > histRed=Table[0,{256}]; > > For[i=1,i<Dimensions[red][[1]],++i, > For[j=1,j<Dimensions[red][[2]],++j, > indxr=Floor[red[[i,j]]]+1; > histRed[[indxr]]=histRed[[indxr]]+1; > ] > ] > (* histR=ListPlot[histRed,PlotJoined=EF=94=A2True]; *) > > green=part[[All,All,2]]; > histGreen=Table[0,{256}]; > > For[i=1,i<Dimensions[green][[1]],++i, > For[j=1,j<Dimensions[green][[2]],++j, > indxg=Floor[green[[i,j]]]+1; > histGreen[[indxg]]=histGreen[[indxg]]+1; > ] > ] > (* histG=ListPlot[histGreen,PlotJoined=EF=94=A2True]; *) > > > (* Joint Prob. Matrix *) > joinRG=Table[0,{256},{256}]; > > For[i=1,i<Dimensions[red][[1]],++i, > For[j=1,j<Dimensions[green][[2]], ++j, > idx1=Floor[red[[i,j]]]+1; > idx2=Floor[green[[i,j]]]+1; > joinRG[[idx1,idx2]]=joinRG[[idx1,idx2]]+1; > ] > ] > > (* Ixy= Sum(i)Sum(j) P(xi,yj) Log[P(xi,yj)/P(xi)/P(yj) *) > > For[i=1,i<Dimensions[histRed][[1]],++i, > For[j=1,j<Dimensions[histGreen][[1]],++j, > Ixy = Ixy + joinRG[[i,j]] / 65536 * Log[2 , ,joinRG[[i,j]] / > histRed[[i]] / histGreen[[j]] ] > ] > ] > >