954,529 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

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:

manar
Newbie Poster
14 posts since Dec 2005
Reputation Points: 10
Solved Threads: 0
 

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.

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

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();

}

manar
Newbie Poster
14 posts since Dec 2005
Reputation Points: 10
Solved Threads: 0
 

Does this happen at runtime or compile time?

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

its happen when runtime " a break"

manar
Newbie Poster
14 posts since Dec 2005
Reputation Points: 10
Solved Threads: 0
 

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.

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

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

manar
Newbie Poster
14 posts since Dec 2005
Reputation Points: 10
Solved Threads: 0
 

Okay so you can handle that error now?

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

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

manar
Newbie Poster
14 posts since Dec 2005
Reputation Points: 10
Solved Threads: 0
 

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.

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

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

manar
Newbie Poster
14 posts since Dec 2005
Reputation Points: 10
Solved Threads: 0
 

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

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

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++)
{

plazmo
Posting Whiz in Training
207 posts since Aug 2005
Reputation Points: 23
Solved Threads: 16
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You