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

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 meeting, networking, learning, and sharing knowledge.