DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C# (http://www.daniweb.com/forums/forum61.html)
-   -   image manipulation (http://www.daniweb.com/forums/thread42370.html)

manar Mar 31st, 2006 2:06 pm
image manipulation
 
hi
i want to find the correlation coefficient between two images, so i have to apply mathmatical equations on them.
i want to ask how can i convert the image to a form that can deal with maths' operator like -, /, XOR after reading it from a file.

i try to convert it to byte or a string to make calculations but that does not work! :cry:

WolfPack Apr 1st, 2006 7:20 am
Re: image manipulation
 
You will have to read the image into a two dimensional structure, maybe a two dimensional array, and then apply the operations to corresponding elements at position x and y.
ResultantImage[x][y] = Image1[x][y] - Image2[x][y]

You could do this even with a single dimensional array, but that is rather unintuitive in my opinion.

manar Apr 1st, 2006 12:45 pm
Re: image manipulation
 
hi
thanks for your reply;
i deal with two black and white images(binary images); and want to make correlation method calculations on them to find correlation coefficient.
so the pixel value is (0,0,0) for black or (1,1,1) for white.
that i use the GetPixel then test if its black or white and set an integer to 0 if black or 1 if white.
and then deal with these integer instead of converting the images to array int as you suggest.
this is the code below; its behind the correlation coeff button; I have error when debugging at the bold font:
note: im sure that both images have the same size.
any suggestions...




int q=0;
int w=0;
Bitmap a = (Bitmap)Image.FromFile("C:\\standard\\test1.bmp");
Bitmap b = (Bitmap)Image.FromFile("C:\\standard\\test2.bmp");

int x=0;
int y=0;
int i=0;
int j=0;

for(i=0;i<=a.Height;i++)
{
for(j=0;j<=a.Width;j++)
{
Color c=a.GetPixel(i,j);
Color r=b.GetPixel(i,j);

if (c.R == 0 && c.G == 0 && c.B == 0)
q = 0;
if (c.R == 1 && c.G == 01 && c.B == 1)
q = 1;



if (r.R == 0 && r.G == 0 && r.B == 0)
w = 0;
if (r.R == 1 && r.G == 1 && r.B == 1)
w = 1;

x+=q;
y+=w;
}
}
int s=0;
int ss=0;
int sss=0;


for(i=0;i<=a.Height;i++)
{
for(j=0;j<=a.Width;j++)
{
Color c=a.GetPixel(i,j);
Color r=b.GetPixel(i,j);


if (c.R == 0 && c.G == 0 && c.B == 0)
q = 0;
if (c.R == 1 && c.G == 01 && c.B == 1)
q = 1;



if (r.R == 0 && r.G == 0 && r.B == 0)
w = 0;
if (r.R == 1 && r.G == 1 && r.B == 1)
w = 1;



s+=(q-x)*(q-x);
ss+=(w-y)*(w-y);
}
}

for(i=0;i<=a.Height;i++)
{
for(j=0;j<=a.Width;j++)
{
Color c=a.GetPixel(i,j);
Color r=b.GetPixel(i,j);
if (c.R == 0 && c.G == 0 && c.B == 0)
q = 0;
if (c.R == 1 && c.G == 01 && c.B == 1)
q = 1;



if (r.R == 0 && r.G == 0 && r.B == 0)
w = 0;
if (r.R == 1 && r.G == 1 && r.B == 1)
w = 1;

sss+=(q-x)*(w-y);

}
}
double corr;

corr = sss/(System.Math.Sqrt(((s*s)+(ss*ss))));

label1.Text = corr.ToString();

}

WolfPack Apr 1st, 2006 2:06 pm
Re: image manipulation
 
Does this happen at runtime or compile time?

manar Apr 1st, 2006 2:16 pm
Re: image manipulation
 
its happen when runtime " a break"

WolfPack Apr 1st, 2006 2:25 pm
Re: image manipulation
 
Comment out all the other irrelevant code in the loop and other irrelevent code after the loop so that only this remains.
for(i=0;i<=a.Height;i++)
{
for(j=0;j<=a.Width;j++)
{
Color c=a.GetPixel(i,j);
}
}
See if the error comes up again. If not, keep on adding lines until you get the error, and try to see what are the values of i and j this happens.

manar Apr 1st, 2006 3:05 pm
Re: image manipulation
 
thanks
the error is at the last pixel of the image!!!

WolfPack Apr 1st, 2006 3:07 pm
Re: image manipulation
 
Okay so you can handle that error now?

manar Apr 1st, 2006 3:31 pm
Re: image manipulation
 
hi
at last i have an int result and i want to display it in the form
the label deal with charachter only so i want to use MsgBox like this:

corr = sss/(System.Math.Sqrt(((s*s)+(ss*ss))));
string corrv = corr.ToString();
MessageBox.Show(corrv, "correlation coeficiant");

But the box give a charachter result like this "NAN"
how can i display the integer value
thankx

WolfPack Apr 1st, 2006 3:40 pm
Re: image manipulation
 
NAN is short for "Not A Number". You get this for values like infinity. Check the values of sss and (s*s)+(ss*ss). Most probably either both of them are 0 or the (s*s)+(ss*ss)value is zero. You should know already that 0 divided by 0 is undefined and any number defined by 0 is also undefined. You should check for these conditions before dividing.

Also use [code][/code] when posting code.


All times are GMT -4. The time now is 9:32 am.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC