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:

Recommended Answers

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 …

Jump to Post

Does this happen at runtime or compile time?

Jump to Post

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 …

Jump to Post

All 12 Replies

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
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++)
            {
                [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 developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.