Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Scanning intensity value of pixel from binary image

labbylabby Posts: 10Member
Hi,

I want to scan intensity value of pixel for binary image. Here is the code that I build.

byte* p = (byte*)imgData.Scan0.ToPointer();
int i = 0;

for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
{

if (*p != 0)// white
{
i++;
}

else
{
i = 0;
}
}
++p;
}

p += srcOffset;

}

if (i >= 10)

resultScan = "PASS";

else
resultScan = "FAIL";


Here, I want to make it;
If there are any intensity values of pixel other than zero, and the total of that pixel is more or similar to 10, it will return PASS. Otherwise it will return FAIL. Means, it will return PASS if I put object in the field of view and returns FAIL if no object in the field of view.

However, it not gives right answer. It just give FAIL statement for both condition. Im sure this is not the mistake from type of image input but something wrong with the condition of if else. Could any body help me please to check where the mistakes are? Please ask me if my question is not clear. Thanks.

Comments

  • PruyquePruyque Posts: 149Member
    : Hi,
    :
    : I want to scan intensity value of pixel for binary image. Here is the code that I build.
    : [code]
    : byte* p = (byte*)imgData.Scan0.ToPointer();
    : int i = 0;
    :
    : for (int y = 0; y < height; y++)
    : {
    : for (int x = 0; x < width; x++)
    : {
    : {
    :
    : if (*p != 0)// white
    : {
    : i++;
    : }
    :
    : else
    : {
    [red]
    : i = 0;
    [/red]
    : }
    : }
    : ++p;
    : }
    :
    : p += srcOffset;
    :
    : }
    :
    : if (i >= 10)
    :
    : resultScan = "PASS";
    :
    : else
    : resultScan = "FAIL";
    :
    : [/code]
    : Here, I want to make it;
    : If there are any intensity values of pixel other than zero, and the total of that pixel is more or similar to 10, it will return PASS. Otherwise it will return FAIL. Means, it will return PASS if I put object in the field of view and returns FAIL if no object in the field of view.
    :
    : However, it not gives right answer. It just give FAIL statement for both condition. Im sure this is not the mistake from type of image input but something wrong with the condition of if else. Could any body help me please to check where the mistakes are? Please ask me if my question is not clear. Thanks.
    :
    :

    If (*p == 0) you reset 'i' to zero. If you want to count how many pixels are not 0, don't set 'i' to zero if it is (just do nothing)...

    For instance, if the last *p you check is zero, 'i' will be zero if you check it against 10, and this is not what you want...

    Hope this helps,

    Pruyque
  • labbylabby Posts: 10Member
    Hi,

    Sorry for that silly mistake. Actually I not put that code initially, but when I got stuck, I just put any code to see what happen than. This is my actual code.

    byte* p = (byte*)imgData.Scan0.ToPointer();
    int i = 0;


    for (int y = 0; y < height; y++)
    {
    for (int x = 0; x < width; x++)
    {
    if (*p != 0)// white
    {
    i++;
    }
    p++;
    }
    p += srcOffset;
    }

    if (i >= 10)

    resultScan = "PASS";

    else
    resultScan = "FAIL";


    Here --> if (*p != 0)// white
    when I change the value of 0 to 255, the answer are still same
    --> PASS. Im confuse where are the mistake.

  • PruyquePruyque Posts: 149Member
    : Hi,
    :
    : Sorry for that silly mistake. Actually I not put that code initially, but when I got stuck, I just put any code to see what happen than. This is my actual code.
    : [code]
    : byte* p = (byte*)imgData.Scan0.ToPointer();
    : int i = 0;
    :
    :
    : for (int y = 0; y < height; y++)
    : {
    : for (int x = 0; x < width; x++)
    : {
    : if (*p != 0)// white
    : {
    : i++;
    : }
    : p++;
    : }
    : p += srcOffset;
    : }
    :
    : if (i >= 10)
    :
    : resultScan = "PASS";
    :
    : else
    : resultScan = "FAIL";
    :
    : [/code]
    : Here --> if (*p != 0)// white
    : when I change the value of 0 to 255, the answer are still same
    : --> ?PASS?. I?m confuse where are the mistake.
    :
    :
    Hmmm, what is scrOffset? (I think it should be the stride of the image minus the width of the image.)

    You could just print the values that you examine, if the first few look good, but later on you get garbage, it might be you've miscalculated scrOffset... I can't think of anything else being wrong at the moment...

    Oh, and please use the [ code ] tags (without the spaces), it makes reading code much easier for us.
Sign In or Register to comment.