Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

LBP calcHist() Wrong

Hi everyone, I've written my own LBP method however it does not work. The outputted histogram of codes is 1 column that is identical for every inputted image. However the LBP map looks correct, so I think there is an error with one of the inputs to calcHist(). Are there any obvious errors? Thanks.

    Mat gray, lbpMap, hist;
    lbpMap.create(in.rows-2, in.cols-2, CV_8UC1);
    cvtColor(in, gray, CV_BGRA2GRAY);

    for (int i = 1; i < in.rows-1; i++)
      for (int j = 1; j < in.cols-1; j++){
        uchar thisPixel = gray.at<uchar>(i,j);
        uchar thisCode = 0;
        if (thisPixel > gray.at<uchar>(i-1,j-1))
          thisCode |= 1 << 7;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 6;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 5;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 4;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 3;
        if (thisPixel > gray.at<uchar>(i-1,j+1))
          thisCode |= 1 << 2;
        if (thisPixel > gray.at<uchar>(i,j+1))
          thisCode |= 1 << 1;
        if (thisPixel > gray.at<uchar>(i+1,j+1))
          thisCode += 1;

        //Add this string to histogram
        lbpMap.at<uchar>(i-1,j-1) = thisCode;
      }

    //After map built, get hist
    const int channelNo[] = { 0 };
    float range[] = { 0, 255 };
    const float *ranges[] = { range };
    int bins = 256;
    calcHist(&lbpMap, 1, channelNo, Mat(), hist, 1, &bins, ranges);

LBP calcHist() Wrong

Hi everyone, I've written my own LBP method however it does not work. The outputted histogram of codes is 1 column that is identical for every inputted image. However the LBP map looks correct, so I think there is an error with one of the inputs to calcHist(). Are there any obvious errors? Thanks.

    Mat gray, lbpMap, hist;
    lbpMap.create(in.rows-2, in.cols-2, CV_8UC1);
    cvtColor(in, gray, CV_BGRA2GRAY);

    for (int i = 1; i < in.rows-1; i++)
      for (int j = 1; j < in.cols-1; j++){
        uchar thisPixel = gray.at<uchar>(i,j);
        uchar thisCode = 0;
        if (thisPixel > gray.at<uchar>(i-1,j-1))
          thisCode |= 1 << 7;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 6;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 5;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 4;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 3;
        if (thisPixel > gray.at<uchar>(i-1,j+1))
          thisCode |= 1 << 2;
        if (thisPixel > gray.at<uchar>(i,j+1))
          thisCode |= 1 << 1;
        if (thisPixel > gray.at<uchar>(i+1,j+1))
          thisCode += 1;

        //Add this string to histogram
        lbpMap.at<uchar>(i-1,j-1) = thisCode;
      }

    //After map built, get hist
    const int channelNo[] = { 0 };
    float range[] = { 0, 255 };
    const float *ranges[] = { range };
    int bins = 256;
    calcHist(&lbpMap, 1, channelNo, Mat(), noArray(), hist, 1, &bins, ranges);

Here is the LBP map and hist after this code is run. Hist LBP

LBP calcHist() Wrong

Hi everyone, I've written my own LBP method however it does not work. The outputted histogram of codes is 1 column that is identical for every inputted image. However the LBP map looks correct, so I think there is an error with one of the inputs to calcHist(). Are there any obvious errors? Thanks.

    Mat gray, lbpMap, hist;
    lbpMap.create(in.rows-2, in.cols-2, CV_8UC1);
    cvtColor(in, gray, CV_BGRA2GRAY);

    for (int i = 1; i < in.rows-1; i++)
      for (int j = 1; j < in.cols-1; j++){
        uchar thisPixel = gray.at<uchar>(i,j);
        uchar thisCode = 0;
        if (thisPixel > gray.at<uchar>(i-1,j-1))
          thisCode |= 1 << 7;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 6;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 5;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 4;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 3;
        if (thisPixel > gray.at<uchar>(i-1,j+1))
          thisCode |= 1 << 2;
        if (thisPixel > gray.at<uchar>(i,j+1))
          thisCode |= 1 << 1;
        if (thisPixel > gray.at<uchar>(i+1,j+1))
          thisCode += 1;

        //Add this string to histogram
        lbpMap.at<uchar>(i-1,j-1) = thisCode;
      }

    //After map built, get hist
    const int channelNo[] = { 0 };
    float range[] = { 0, 255 };
    const float *ranges[] = { range };
    int bins = 256;
    calcHist(&lbpMap, 1, channelNo, noArray(), hist, 1, &bins, ranges);

Here is the LBP map and hist after this code is run. Hist LBP

LBP contains values between 0 and 255 as expected, and hist contains just zeroes.

LBP calcHist() Wrong

Hi everyone, I've written my own LBP method however it does not work. The outputted histogram of codes is 1 column that is identical for every inputted image. However the LBP map looks correct, so I think there is an error with one of the inputs to calcHist(). Are there any obvious errors? Thanks.

    Mat gray, lbpMap, hist;
    lbpMap.create(in.rows-2, in.cols-2, CV_8UC1);
    cvtColor(in, gray, CV_BGRA2GRAY);

    for (int i = 1; i < in.rows-1; i++)
      for (int j = 1; j < in.cols-1; j++){
        uchar thisPixel = gray.at<uchar>(i,j);
        uchar thisCode = 0;
        if (thisPixel > gray.at<uchar>(i-1,j-1))
          thisCode |= 1 << 7;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 6;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 5;
        if (thisPixel > gray.at<uchar>(i,j-1))
          thisCode |= 1 << 4;
        if (thisPixel > gray.at<uchar>(i+1,j-1))
          thisCode |= 1 << 3;
        if (thisPixel > gray.at<uchar>(i-1,j+1))
          thisCode |= 1 << 2;
        if (thisPixel > gray.at<uchar>(i,j+1))
          thisCode |= 1 << 1;
        if (thisPixel > gray.at<uchar>(i+1,j+1))
          thisCode += 1;

        //Add this string to histogram
        lbpMap.at<uchar>(i-1,j-1) = thisCode;
      }

    //After map built, get hist
    const int channelNo[] = { 0 };
    float range[] = { 0, 255 };
    const float *ranges[] = { range };
    int bins = 256;
    calcHist(&lbpMap, 1, channelNo, noArray(), hist, 1, &bins, ranges);

Here is the LBP map and hist after this code is run. Hist LBP

LBP contains values between 0 and 255 as expected, and hist contains just zeroes.