int main(void)
{

    try
    {


        glPixelStorei(GL_UNPACK_ALIGNMENT,1);
        glPixelStorei(GL_PACK_ALIGNMENT,1);

        GLWindow::Settings setts;

        setts.width = screenWidth;
        setts.height = screenHeight;

        setts.match_resolution_exactly=true;
        setts.is_fullscreen=false;

        setts.glversion_major= 2;
        setts.glversion_minor= 1.0;

        GLWindow win(setts);

        glewInit();

        LDRImage noiseImg = loadImage("noise.png",1);

        flipVertical(noiseImg);

        glPixelStorei(GL_UNPACK_ALIGNMENT,1);
        glPixelStorei(GL_PACK_ALIGNMENT,1);

        GLTexture inputTex(noiseImg);

        int width = noiseImg.getDimensions()[1];
        int height = noiseImg.getDimensions()[2];

        std::cout<<"W H "<<width<<" "<<height<<std::endl;

        glBindTexture(GL_TEXTURE_2D, inputTex.tex);

        writeImage(noiseImg, "noiseOut_test.png");

        GL::GLShader median2("median.vert", "medianfilter2.frag");
        median2.bind();
        median2.setTexture("tex", 0);
        median2.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height));

        GL::GLShader median3("median.vert", "medianfilter3.frag");
        median3.bind();
        median3.setTexture("tex", 0);
        median3.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height));

        GL::GLShader median4("median.vert", "medianfilter4.frag");
        median4.bind();
        median4.setTexture("tex", 0);
        median4.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height));

        GL::GLShader median5("median.vert", "medianfilter5.frag");
        median5.bind();
        median5.setTexture("tex", 0);
        median5.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height));

        median4.bind();


std::cout<<"BEGIN "<<std::endl;
        {

            while(win.isValid())
            {

      /*
#ifndef GL_ES_BUILD
                const GLenum buffers[]= {GL_COLOR_ATTACHMENT0, GL_BACK_LEFT};

                glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);

                glDrawBuffers(1, &buffers[1]);

#else*/


                glBindFramebuffer(GL_FRAMEBUFFER, 0);
//#endif




            glClearColor(1,0,0,1);
            glClear(GL_COLOR_BUFFER_BIT);

            screenQuad();

            //    checkFBOErrors();


                win.update();
                win.flush();
            }

        }//scope

    }
    catch(const std::exception& e)
    {

        std::cout<<e.what()<<std::endl;
    }
    catch(const std::string& str)
    {
        std::cout<<str<<std::endl;
    }
    return 0;






}
Beispiel #2
0
void medianFilter(int size, int width, RGB *image, int window, int start, int end, int rank){
  int thing = (window - 1)/2;
  int windowsq = window*window;
  int topleft, current;
  int pc, i, j, cpypx;

  // Storage for the R, G, and B values in the window
  int rvalues[windowsq];
  int gvalues[windowsq];
  int bvalues[windowsq];

  RGB *unmodified = (RGB*)malloc(size*sizeof(RGB));
  RGB *current_pixel;
  RGB *copydestpixel;
  RGB *copysrcpixel;
  RGB *pixel;


  // Deep copy unmodified <- img
  for (i=0; i < size; i++) {
    copydestpixel = unmodified + i;
    copysrcpixel = image + i;

    copydestpixel->r = copysrcpixel->r;
    copydestpixel->g = copysrcpixel->g;
    copydestpixel->b = copysrcpixel->b;
  }

  // For each pixel in this worker's quota
  for (pc = start; pc < end; pc ++) {
    // Current pixel of interest
    pixel = image + pc;

    // Pixel at top left of window
    topleft = pc - (thing * width) - thing;

    // Reset R, G, and B values to 0's
    memset(rvalues, 0, sizeof(int)*windowsq);
    memset(gvalues, 0, sizeof(int)*windowsq);
    memset(bvalues, 0, sizeof(int)*windowsq);

    int count = 1;

    // For each row in window
    for (i=0; i < window; i ++) {
      // For each column in window
      for (j=0; j < window; j ++) {
        // Determine the pixel we're looking at
        current = topleft + i * width - thing + j + 1;

        // If current pixel is outside range of window and image, skip it
        if (current < 0 || current > size -1 || (current % width) > (pc % width) + thing) {
          // Do nothing

        // If current pixel is in range of window and image
        } else {
          current_pixel = unmodified + current;
          rvalues[count - 1] = current_pixel->r;
          gvalues[count - 1] = current_pixel->g;
          bvalues[count - 1] = current_pixel->b;

          count = count + 1;
        }
      }
    }

    pixel->r = median2(count, rvalues);
    pixel->g = median2(count, gvalues);
    pixel->b = median2(count, bvalues);
  }
}