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:

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.

hi
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++)
{
[B]Color c=a.GetPixel(i,j);[/B]
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();

}
``````

Does this happen at runtime or compile time?

its happen when runtime " a break"

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++)
{
[INDENT]for(j=0;j<=a.Width;j++)
{
[INDENT]Color c=a.GetPixel(i,j);[/INDENT]
}[/INDENT]
}``````

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.

thanks
the error is at the last pixel of the image!!!

Okay so you can handle that error now?

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

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

when posting code.

ok
if we suggest that the result is an integer; Is the code above "the message box" have the ability to display it?

It has the ability obviously. But how can you convince that NAN is a number? It is not a number.

i dont know if you solved this but, the pixels in the images are like an array so it starts and 0 and ends and the length-1 (-1 becuase its starts at 0, and lenth is the count)

for(i=0;i<=a.Height-1;i++)
{
for(j=0;j<=a.Width-1;j++)
{

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.18 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.