www.pudn.com > GPUVision_5-13-05-2.zip > FirstTest.cpp
#include "stdafx.h" #include "gpuvision.h" #include "MultiplyFilter.h" #include "ConvolutionFilter.h" #include "ConvolutionFilter2Pack.h" #include "Unpack2ChannelsFilter.h" #include "GaborFilter.h" #include "RGB2GreyFilter.h" #include "RGB2PackedUVFilter.h" #include "Pack2Filter.h" #include "AddFilter.h" #include "ThresholdFilter.h" #include "HarrisFilter.h" #include "NonMaxSupressionFilter.h" #include "LocalMaximumFilter.h" #include "Canny.h" #include "Sharpen.h" #include "LapGaus.h" #include "Laplacian.h" #include "DxDyFilter.h" #include "GausPyramid.h" #include "HarrisCorner.h" #include#include using namespace std; using namespace corona; #define GABOR_WIDTH 100 ///////////////////////////////////////////////////////////////////////// // Test Driver ///////////////////////////////////////////////////////////////////////// GausPyramid *gausPyramid; LocalMaximumFilter *localMaximumFilter; GPUVision *gpuVis, *gpuVis2, *gpuVis3, *gpuVis4, *gpuVis5, *gpuVis6, *gpuVis7, *gpuVis8, *rightGPUvis, *leftGPUvis, *gaborGPUvis; Canny *canny; Sharpen *sharpen; Laplacian *laplacian; LapGaus *lapGaus; DxDyFilter *dxdy; static float harrisThreshold = .01; static int gaborNum = 0; static int gausPyrIndex = 0; static int gaborFilterWidthEven = 6; static long startTime; static int lapMode = 0; static float cannyThreshold = .1; static int sharpFilterNum = 2; static float sharpSharpness = 4; static bool doHarris = true, doCannyEdge = true, cannyShouldBlur = true, doLapGaus = true, cannShouldPack = true; static float hkernel2_1[4] = {1, 1, -1,-1}; static float vkernel2_1[4] = {1, -1, 1,-1}; static float hkernel2_2[4] = {-1, -1, 1,1}; static float vkernel2_2[4] = {-1, 1, -1,1}; static float gkernel3_1[9] = {.2, .1, .1, .1, .0, .1, .1, .1, .2}; static float gkernel3_2[9] = {.1, .1, .1, .1, .2, .1, .1, .1, .1}; static float gkernel3_3[9] = {.0625, .125, .0625, .125, .25, .125, .0625, .125, .0625}; static float lkernel3_3[9] = {.1, .4, .1, .4, -1, .4, .1, .4, .1}; static float gkernel5_1[25] = {.04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04, .04}; static float lkernel5_1[25] = {.00, .03, .2, .03, .00, .03, .3, -.1, .3, .03, .2, -.1, -.9, -.1, .2, .03, .3, -.1, .3, .03, .00, .03, .2, .03, .00}; static float gkernel10_1[100] = {.01, .01, .01, .01, .01,.01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01, .01}; static float _gauss5x5Kernel[25] = { .005600, .013150, .037500, .013150, .005600, .013150, .030600, .087500, .030600, .013150, .037500, .087500, .250100, .087500, .037500, .013150, .030600, .087500, .030600, .013100, .005600, .013150, .037500, .013150, .005600}; static float h_gkernel9_1[9] = {.015, .035, .05, .15, .5, .15, .05, .035, .015}; static float h_gkernel5_1[5] = {.1,.15,.5,.15,.1}; static float h_gkernel3_1[5] = {.2,.6,.2}; static float *gaborData = new float[gaborFilterWidthEven*gaborFilterWidthEven]; static float gaborData0[81]; static float gaborData30[81]; static float gaborData60[81]; static float gaborData90[81]; static float gaborData120[81]; static float gaborData150[81]; static float gaborData180[81]; static float gaborData210[81]; static float gaborData240[81]; static float gaborData270[81]; static float gaborData300[81]; static float gaborData330[81]; static HarrisFilter* harrisFilter; static HarrisCorner* harrisCorner; static MultiplyFilter* multFilter; static ConvolutionFilter *gaus3x3Filter, *convolutionFilter, *convolutionFilter2, *h_convolutionFilter, *v_convolutionFilter, *h5_convolutionFilter, *v5_convolutionFilter, *h100_convolutionFilter, *v100_convolutionFilter, *h3_convolutionFilter, *v3_convolutionFilter; static ConvolutionFilter *lap5x5Filter; static ConvolutionFilter2Pack *gaus3x3FilterPacked; static ConvolutionFilter *gaborFilter1, *gaborFilter0, *gaborFilter30, *gaborFilter60, *gaborFilter90, *gaborFilter120, *gaborFilter150, *gaborFilter180, *gaborFilter210, *gaborFilter240, *gaborFilter270, *gaborFilter300, *gaborFilter330; static RGB2GreyFilter *rgb2greyFilter1; static RGB2PackedUVFilter *rgb2packedUVFilter; static Pack2Filter *pack2Filter; static AddFilter *addFilter1; static ThresholdFilter *thresholdFilter ; static NonMaxSupressionFilter *nonMaxSupression ; static Unpack2ChannelsFilter *unpack2ChannelsFilter; static int selection = 0; static GPUVision *curGPUvis; static float multNum = -.25; static float threshold = .3; static bool showGabor = false; static bool showCos = false; static float sigma = 3.7; static float cosGabor[1000000]; static float sinGabor[1000000]; #define RADIUS 36 static void DoExit() { delete gausPyramid; delete localMaximumFilter; delete gpuVis; delete gpuVis2; delete gpuVis3; delete gpuVis4; delete gpuVis5; delete gpuVis6; delete gpuVis7; delete gpuVis8; delete rightGPUvis; delete leftGPUvis; delete gaborGPUvis; delete canny; delete sharpen; delete laplacian; delete lapGaus; delete dxdy; delete gaborData; delete harrisFilter; delete harrisCorner; delete multFilter; delete gaus3x3Filter; delete convolutionFilter; delete convolutionFilter2; delete h_convolutionFilter; delete v_convolutionFilter; delete h5_convolutionFilter; delete v5_convolutionFilter; delete h100_convolutionFilter; delete v100_convolutionFilter; delete h3_convolutionFilter; delete v3_convolutionFilter; delete lap5x5Filter; delete gaus3x3FilterPacked; delete gaborFilter1; delete gaborFilter0; delete gaborFilter30; delete gaborFilter60; delete gaborFilter90; delete gaborFilter120; delete gaborFilter150; delete gaborFilter180; delete gaborFilter210; delete gaborFilter240; delete gaborFilter270; delete gaborFilter300; delete gaborFilter330; delete rgb2greyFilter1; delete rgb2packedUVFilter; delete pack2Filter; delete addFilter1; delete thresholdFilter ; delete nonMaxSupression ; delete unpack2ChannelsFilter; } char *float2string (const float n, const char* efg, const unsigned int after_digits) { // Usage: // double_to_string(number, format, x) if you want x decimals after the dot. // format means one of the format flags printf knows: e, f, g double absN = fabs(n); int before_digits = 1; char sign[2]; static char format[128]; static char text[128]; // Do we use printf format '%f'? if (strncmp(efg, "f", 1) == 0) { // Determine the number of digits before comma (absN > 0) ? before_digits = int(float(log10(absN))) + 1 : before_digits = 1; } // Display a zero if n is negative, but don't show a plus if positive. // Therefore we can't use "%+s" in sprintf. if (n < 0) strncpy (sign, "-", 2); else strncpy (sign, " ", 2); sprintf (format, "%s%%%d.%d%s", sign, before_digits, after_digits, efg); // Size of text in Bytes: // 1 : sign, // before_digits: # digits before comma // 1 : comma // after_digits : # digits after comma // 5 : eħ300 sprintf (text, format, absN); return text; } void printTiming (const double start, const double end, const char* label) { double total = (end-start) / CLOCKS_PER_SEC; std::string s = label; s.append(": "); s.append(float2string(total,"f",5)); s.append(" seconds."); cout << s << endl; } static void Display() { canny->setShouldBlur(cannyShouldBlur); canny->setPack(cannShouldPack); // gpuVis->Reset(); // gpuVis2->Reset(); // gpuVis3->Reset(); curGPUvis = gpuVis; static int curTime = 0; int i = 0; int viewportY = 0; //selection = (curTime%9000)/1000; static float theta = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if(showGabor) { theta = (curTime%(360*1))/1; GaborFilter::Gabor4(sigma,theta,GABOR_WIDTH,showCos,sinGabor); if(showCos) { gaborGPUvis->SetData(sinGabor); } else { gaborGPUvis->SetData(sinGabor); } addFilter1->SetAddNum(.5); gaborGPUvis->Begin(); addFilter1->applyFilter(gaborGPUvis); gaborGPUvis->End(); gaborGPUvis->PassThrough(gaborGPUvis->GetRenderedTextureID()); gaborGPUvis->Reset(); } else { switch(selection) { case 0: gpuVis->Reset(); if(gaborNum == 1) { gaus3x3Filter->applyFilter(gpuVis); } if(gaborNum == 2) { lap5x5Filter->applyFilter(gpuVis); } if(gaborNum == 3) { convolutionFilter2->applyFilter(gpuVis); } // gpuVis->PassThrough(gpuVis->GetTextureID()); break; case 1: gpuVis->Reset(); gpuVis->Begin(); if(doCannyEdge) { rgb2packedUVFilter->applyFilter(gpuVis); // pack2Filter ->applyFilter(gpuVis); if(doLapGaus) { gaus3x3FilterPacked->applyFilter(gpuVis); gaus3x3FilterPacked->applyFilter(gpuVis); gaus3x3FilterPacked->applyFilter(gpuVis); gaus3x3FilterPacked->applyFilter(gpuVis); } unpack2ChannelsFilter->applyFilter(gpuVis); } else { lap5x5Filter->applyFilter(gpuVis); lap5x5Filter->applyFilter(gpuVis); lap5x5Filter->applyFilter(gpuVis); lap5x5Filter->applyFilter(gpuVis); } gpuVis->End(); // multFilter->SetMultNum(abs(500-curTime%1000)/100.); // gpuVis->Reset(); // gpuVis->Begin(); // multFilter->applyFilter(gpuVis); /* multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis); multFilter->applyFilter(gpuVis);*/ // gpuVis->End(); // gpuVis->Begin(); // gpuVis->Convolude1D(2,vkernel2_1); // gpuVis->End(); //// gpuVis->Flip(); break; case 2: gpuVis->Reset(); gpuVis3->Reset(); if(doLapGaus) lapGaus->lapGausEdgeDetect(gpuVis); else laplacian->laplacian(gpuVis3,gpuVis); if(doCannyEdge) { canny->setThreshold(cannyThreshold); canny->cannyEdgeDetect(gpuVis); } // gpuVis->Begin(); // convolutionFilter->applyFilter(gpuVis); // gpuVis->End(); break; case 3: gpuVis2->Reset(); gpuVis2->Begin(); multFilter->SetMultNum(.1); multFilter->applyFilter(gpuVis2); gpuVis2->End(); gpuVis->Reset(); gpuVis->Begin(); rgb2greyFilter1->applyFilter(gpuVis); addFilter1->applyFilter(gpuVis); addFilter1->applyFilter(gpuVis,gpuVis2); gpuVis->End(); break; case 4: for(i = gausPyrIndex; i < gausPyramid->GetNumLevels(); i++) { curGPUvis = gausPyramid->GetLevel(i); curGPUvis->Reset(); curGPUvis->DisplayCurrent(); viewportY += gausPyramid->GetLevel(i)->GetHeight(); glViewport(0, viewportY, gpuVis->GetWidth(), gpuVis->GetHeight()); } glViewport(gausPyramid->GetLevel(gausPyrIndex)->GetWidth(), 0, gpuVis->GetWidth(), gpuVis->GetHeight()); viewportY = 0; for(i = gausPyrIndex; i < gausPyramid->GetNumLevels(); i++) { curGPUvis = gausPyramid->GetLevel(i); curGPUvis->Reset(); laplacian->laplacian(curGPUvis); // rgb2greyFilter1->applyFilter(curGPUvis); curGPUvis->DisplayCurrent(); viewportY += gausPyramid->GetLevel(i)->GetHeight(); glViewport(gausPyramid->GetLevel(gausPyrIndex)->GetWidth(), viewportY, gpuVis->GetWidth(), gpuVis->GetHeight()); } glViewport(0, 0, gpuVis->GetWidth(), gpuVis->GetHeight()); // gpuVis->Reset(); // gaus3x3Filter->applyFilter(gpuVis); /* gpuVis3->Reset(); gpuVis4->Reset(); gpuVis5->Reset(); gpuVis6->Reset(); gpuVis7->Reset(); gpuVis8->Reset(); rgb2greyFilter1->applyFilter(gpuVis); rgb2greyFilter1->applyFilter(gpuVis3); rgb2greyFilter1->applyFilter(gpuVis4); rgb2greyFilter1->applyFilter(gpuVis5); rgb2greyFilter1->applyFilter(gpuVis6); rgb2greyFilter1->applyFilter(gpuVis7); rgb2greyFilter1->applyFilter(gpuVis8); gaborFilter0->applyFilter(gpuVis); gaborFilter30->applyFilter(gpuVis3); gaborFilter60->applyFilter(gpuVis4); gaborFilter90->applyFilter(gpuVis5); gaborFilter120->applyFilter(gpuVis6); gaborFilter150->applyFilter(gpuVis7); gpuVis->Begin(); // if(curTime%30<15) { // cout <<"adding"< applyFilter(gpuVis,gpuVis3); addFilter1->applyFilter(gpuVis,gpuVis4); addFilter1->applyFilter(gpuVis,gpuVis5); addFilter1->applyFilter(gpuVis,gpuVis6); addFilter1->applyFilter(gpuVis,gpuVis7); // } gpuVis->End(); */ break; case 5: // startTime = clock(); curGPUvis = gausPyramid->GetLevel(gausPyrIndex); curGPUvis->Reset(); // gpuVis->Reset(); // gpuVis->Begin(); // v_convolutionFilter->applyFilter(gpuVis); // gpuVis->End(); if(doHarris) { // laplacian->laplacian(curGPUvis); harrisCorner->SetThreshold(harrisThreshold); harrisCorner->SetShouldThin(doCannyEdge); harrisCorner->HarrisCornerDetect(curGPUvis); // dxdy->applyFilter(curGPUvis); // harrisFilter->SetThreshold(harrisThreshold); // harrisFilter->applyFilter(curGPUvis); // if(doCannyEdge) { // localMaximumFilter->applyFilter(curGPUvis); // } } else { canny->setThreshold(cannyThreshold); canny->cannyEdgeDetect(curGPUvis); } // printTiming(startTime,clock(),"Canny"); break; case 6: gpuVis->Reset(); gpuVis3->Reset(); sharpen->setFilterNum(sharpFilterNum); sharpen->setSharpness(sharpSharpness); sharpen->sharpenImage(gpuVis3,gpuVis); // gpuVis->CopyRenderedToSource(); // gpuVis->Reset(); if(doCannyEdge) { canny->setThreshold(cannyThreshold); canny->cannyEdgeDetect(gpuVis); } // gpuVis4->Reset(); // sharpen->sharpenImage(gpuVis4,gpuVis); // gpuVis->Reset(); // gpuVis->Begin(); // h_convolutionFilter->applyFilter(gpuVis); // v_convolutionFilter->applyFilter(gpuVis); // gpuVis->End(); break; case 7: gpuVis->Reset(); gpuVis->Begin(); dxdy->applyFilter(gpuVis); // h5_convolutionFilter->applyFilter(gpuVis); // v5_convolutionFilter->applyFilter(gpuVis); gpuVis->End(); break; case 8: if(gaborNum == 0) { gpuVis3->Reset(); gpuVis3->Begin(); // multFilter->SetMultNum(2); // multFilter->applyFilter(gpuVis3); // thresholdFilter->applyFilter(gpuVis3); multFilter->SetMultNum(-1); multFilter->applyFilter(gpuVis3); gpuVis3->End(); gpuVis->Reset(); gpuVis->Begin(); h3_convolutionFilter->applyFilter(gpuVis); v3_convolutionFilter->applyFilter(gpuVis); // h100_convolutionFilter->applyFilter(gpuVis); // v100_convolutionFilter->applyFilter(gpuVis); addFilter1->applyFilter(gpuVis,gpuVis3); rgb2greyFilter1->applyFilter(gpuVis); // gaborFilter90->applyFilter(gpuVis); multFilter->SetMultNum(10); multFilter->applyFilter(gpuVis); // canny->cannyEdgeDetect(gpuVis); // nonMaxSupression->applyFilter(gpuVis); gpuVis->End(); } else { gpuVis->Reset(); gpuVis->Begin(); rgb2greyFilter1->applyFilter(gpuVis); if(gaborNum == 1) { gaborFilter0->applyFilter(gpuVis); } else if(gaborNum == 2) { gaborFilter30->applyFilter(gpuVis); } else if(gaborNum == 3) { gaborFilter60->applyFilter(gpuVis); } else if(gaborNum == 4) { gaborFilter90->applyFilter(gpuVis); } else if(gaborNum == 5) { gaborFilter120->applyFilter(gpuVis); } else if(gaborNum == 6) { gaborFilter150->applyFilter(gpuVis); } else if(gaborNum == 7) { gaborFilter180->applyFilter(gpuVis); } else if(gaborNum == 8) { gaborFilter210->applyFilter(gpuVis); } else if(gaborNum == 9) { gaborFilter240->applyFilter(gpuVis); } else if(gaborNum == 10) { gaborFilter270->applyFilter(gpuVis); } else if(gaborNum == 11) { gaborFilter300->applyFilter(gpuVis); } else if(gaborNum == 12) { gaborFilter330->applyFilter(gpuVis); } addFilter1->SetAddNum(.5); addFilter1->applyFilter(gpuVis); gpuVis->End(); } break; case 9: GaborFilter::Gabor(sigma,curTime%360,gaborFilterWidthEven,showCos,gaborData); gpuVis->Reset(); gpuVis->Begin(); rgb2greyFilter1->applyFilter(gpuVis); gaborFilter1->applyFilter(gpuVis); addFilter1->SetAddNum(.5); addFilter1->applyFilter(gpuVis); gpuVis->End(); break; } if(selection != 4) curGPUvis->DisplayCurrent(); } // Sleep(10); glutSwapBuffers(); glutPostRedisplay(); curTime ++; } static void Reshape(int w, int h) { if (h == 0) h = 1; if(gpuVis) { w = gpuVis->GetWidth(); h = gpuVis->GetHeight(); } glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,w,0,h,0,-1); } static void Keyboard(unsigned char key, int x, int y) { switch(key) { case 'q': case 'Q': case 27: DoExit(); exit(0); break; case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: selection = key-48; break; case '+': cannyThreshold+=.0001; break; case '-': cannyThreshold-=.0001; break; case ']': sharpSharpness +=.01; break; case '[': sharpSharpness -=.01; break; case 'g': gaborNum++; gaborNum %= selection==0?4:13; // 0 is don't show break; case 'G': showGabor = !showGabor; break; case 's': sigma += .1; cout << "sigma " << sigma << endl; break; case 'S': sigma -= .1; sigma = max(1,sigma); cout << "sigma " << sigma << endl; break; case 'h': harrisThreshold += .001; cout << "harrisThreshold " << harrisThreshold << endl; break; case 'H': harrisThreshold -= .001; cout << "harrisThreshold " << harrisThreshold << endl; break; case 'j': doHarris = !doHarris; break; case 'f': sharpFilterNum += 1; break; case 'F': sharpFilterNum -= 1; sharpFilterNum = max(1,sharpFilterNum); break; case 'c': showCos = !showCos; break; case 'C': doCannyEdge = !doCannyEdge; break; case 'b': cannyShouldBlur = !cannyShouldBlur; break; case 'l': doLapGaus = !doLapGaus; break; case 'u': startTime = clock(); gpuVis->SetData(gpuVis->GetDataFloats()); printTiming(startTime,clock(),"Uploading Main Image"); break; case 'U': startTime = clock(); gpuVis->DownloadTexture(); printTiming(startTime,clock(),"Downloading Main Image"); break; case 'm': lapMode = (lapMode+1)%4; lapGaus= new LapGaus(gaborFilter1->getContext(),lapMode); break; case 'p': gausPyrIndex = (gausPyrIndex+1)%gausPyramid->GetNumLevels(); break; case 'P': cannShouldPack = !cannShouldPack; } } static void NavMouseInput(int button, int state, int x, int y) { if (button==GLUT_LEFT_BUTTON) { if (state==GLUT_UP) { float SiteIDf[4]; int yy = (int)glutGet((GLenum)GLUT_WINDOW_HEIGHT)-1-y; gpuVis->Begin(); glReadPixels(x,(int)glutGet((GLenum)GLUT_WINDOW_HEIGHT)-1-y,1,1,GL_RGBA,GL_FLOAT,SiteIDf); gpuVis->End(); printf("(%d %d)\t%f\t%f\t%f\t%f\n", x,(int)glutGet((GLenum)GLUT_WINDOW_HEIGHT)-1-y, SiteIDf[0], SiteIDf[1],SiteIDf[2], SiteIDf[3]); fflush(stdout); } } } static void handleCgError() { fprintf(stderr, "Cg error: %s\n", cgGetErrorString(cgGetError())); exit(1); } static void ProcessMenu(int value) { selection = value; } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(512, 512); glutCreateWindow("GPUVision - Upenn - Ahn, Lehr, Turner"); glutReshapeFunc(Reshape); glutKeyboardFunc(Keyboard); glutDisplayFunc(Display); glutMouseFunc(NavMouseInput); int err = glewInit(); if (GLEW_OK != err) { // problem: glewInit failed, something is seriously wrong fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); exit(-1); } // Basic Cg setup; register a callback function for any errors // and create an initial context cgSetErrorCallback(handleCgError); glutCreateMenu(ProcessMenu); glutAddMenuEntry("Original",0); glutAddMenuEntry("Horizontal Edges 1",1); glutAddMenuEntry("Horizontal Edges 2",3); glutAddMenuEntry("Vertical Edges 1",2); glutAddMenuEntry("Vertical Edges 2",4); glutAddMenuEntry("Test",5); glutAddMenuEntry("Grey Scale",6); glutAddMenuEntry("All Edges (1 pass)",7); glutAddMenuEntry("5x5 Blur",8); glutAddMenuEntry("Comples edge detect",9); glutAttachMenu(GLUT_RIGHT_BUTTON); try { for(int i = 0; i < 100000; i++) { cosGabor[i] = 0; } // const char *testGPUVis = "images\\test2-small.jpg"; // const char *testGPUVis = "images\\handeater.jpg"; // const char *testGPUVis = "images\\face.jpg"; // const char *testGPUVis = "images\\bug.jpg"; // const char *testGPUVis = "images\\rockon.jpg"; // const char *testGPUVis = "images\\eurocup2.jpg"; // const char *testGPUVis = "images\\eurocup.jpg"; // const char *testGPUVis = "images\\halloween.jpg"; // const char *testGPUVis = "images\\halloween2.jpg"; // const char *testGPUVis = "images\\pose.jpg"; // const char *testGPUVis = "images\\gypsy.jpg"; // const char *testGPUVis = "images\\jianbo.jpg"; // const char *testGPUVis = "images\\GirlOnRock.jpg"; const char *testGPUVis = "images\\lena.jpg"; // const char *testGPUVis = "images\\1-15port.slide1.jpg"; // const char *testGPUVis = "images\\2-15port.slide5.jpg"; // const char *testGPUVis = "images\\3-blackdot.jpg"; // const char *testGPUVis = "images\\4-France_stone.jpg"; // const char *testGPUVis = "images\\5-philly.jpg"; // const char *testGPUVis = "images\\6-15shop.5.jpg"; // const char *testGPUVis = "images\\colleseum.jpg"; // const char *testGPUVis = "images\\test2D.jpg"; // const char *testGPUVis = "images\\test.jpg"; // const char *testGPUVis = "images\\test_blstripes.jpg"; // const char *testGPUVis = "images\\Org_Left.jpg"; const char *leftDispPic = "images\\Org_Left.jpg"; const char *rightDispPic = "images\\Org_Right.jpg"; // gpuVis = new GPUVision("images\\test_blstripes.jpg"); // gpuVis = new GPUVision("images\\e.jpg"); // gpuVis = new GPUVision("images\\test2-small.jpg"); // gpuVis = new GPUVision("images\\test.jpg"); gpuVis = new GPUVision(testGPUVis); gpuVis2 = new GPUVision("images\\test2D.jpg"); gpuVis2 = new GPUVision(testGPUVis); gpuVis3 = new GPUVision(gpuVis2->GetTextureID(),gpuVis->GetWidth(), gpuVis->GetHeight()); gpuVis4 = new GPUVision(gpuVis2->GetTextureID(),gpuVis->GetWidth(), gpuVis->GetHeight()); gpuVis5 = new GPUVision(gpuVis2->GetTextureID(),gpuVis->GetWidth(), gpuVis->GetHeight()); gpuVis6 = new GPUVision(gpuVis2->GetTextureID(),gpuVis->GetWidth(), gpuVis->GetHeight()); gpuVis7 = new GPUVision(gpuVis2->GetTextureID(),gpuVis->GetWidth(), gpuVis->GetHeight()); gpuVis8 = new GPUVision(gpuVis2->GetTextureID(),gpuVis->GetWidth(), gpuVis->GetHeight()); rightGPUvis = new GPUVision(rightDispPic); leftGPUvis = new GPUVision(leftDispPic); gaborGPUvis = new GPUVision(new float[GABOR_WIDTH*GABOR_WIDTH*4],GABOR_WIDTH,GABOR_WIDTH); multFilter = new MultiplyFilter(2, gpuVis->GetContext()); int numChannels = 4; convolutionFilter = new ConvolutionFilter(gkernel5_1,5,5,numChannels); convolutionFilter2 = new ConvolutionFilter(gkernel10_1,10,10,numChannels); h_convolutionFilter = new ConvolutionFilter(h_gkernel9_1,9,1,numChannels); v_convolutionFilter = new ConvolutionFilter(h_gkernel9_1,1,9,numChannels); h5_convolutionFilter = new ConvolutionFilter(h_gkernel5_1,5,1,numChannels); v5_convolutionFilter = new ConvolutionFilter(h_gkernel5_1,1,5,numChannels); h3_convolutionFilter = new ConvolutionFilter(h_gkernel3_1,3,1,numChannels); v3_convolutionFilter = new ConvolutionFilter(h_gkernel3_1,1,3,numChannels); h100_convolutionFilter = new ConvolutionFilter(gkernel10_1,100,1,numChannels); v100_convolutionFilter = new ConvolutionFilter(gkernel10_1,1,100,numChannels); GaborFilter::Gabor(sigma ,0,gaborFilterWidthEven,true,gaborData); GaborFilter::Gabor(sigma ,0,gaborFilterWidthEven,true,gaborData0); GaborFilter::Gabor(sigma ,30,gaborFilterWidthEven,true,gaborData30); GaborFilter::Gabor(sigma ,60,gaborFilterWidthEven,true,gaborData60); GaborFilter::Gabor(sigma ,90,gaborFilterWidthEven,true,gaborData90); GaborFilter::Gabor(sigma ,120,gaborFilterWidthEven,true,gaborData120); GaborFilter::Gabor(sigma ,150,gaborFilterWidthEven,true,gaborData150); GaborFilter::Gabor(sigma ,180,gaborFilterWidthEven,true,gaborData180); GaborFilter::Gabor(sigma ,210,gaborFilterWidthEven,true,gaborData210); GaborFilter::Gabor(sigma ,240,gaborFilterWidthEven,true,gaborData240); GaborFilter::Gabor(sigma ,270,gaborFilterWidthEven,true,gaborData270); GaborFilter::Gabor(sigma ,300,gaborFilterWidthEven,true,gaborData300); GaborFilter::Gabor(sigma ,330,gaborFilterWidthEven,true,gaborData330); gaborFilter1 = new ConvolutionFilter(gaborData,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter0 = new ConvolutionFilter(gaborData0,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter30 = new ConvolutionFilter(gaborData30,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter60 = new ConvolutionFilter(gaborData60,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter90 = new ConvolutionFilter(gaborData90,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter120 = new ConvolutionFilter(gaborData120,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter150 = new ConvolutionFilter(gaborData150,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter180 = new ConvolutionFilter(gaborData180,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter210 = new ConvolutionFilter(gaborData210,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter240 = new ConvolutionFilter(gaborData240,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter270 = new ConvolutionFilter(gaborData270,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter300 = new ConvolutionFilter(gaborData300,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); gaborFilter330 = new ConvolutionFilter(gaborData330,gaborFilterWidthEven,gaborFilterWidthEven,numChannels); rgb2greyFilter1 = new RGB2GreyFilter(); rgb2packedUVFilter = new RGB2PackedUVFilter(); pack2Filter = new Pack2Filter(); unpack2ChannelsFilter = new Unpack2ChannelsFilter(); thresholdFilter = new ThresholdFilter(1); harrisFilter = new HarrisFilter(harrisThreshold,gaborFilter1->getContext()); nonMaxSupression = new NonMaxSupressionFilter(cannyThreshold); canny = new Canny(gaborFilter1->getContext(), cannyThreshold); sharpen = new Sharpen(gaborFilter1->getContext(), sharpFilterNum, sharpSharpness); laplacian = new Laplacian(gaborFilter1->getContext()); lapGaus= new LapGaus(gaborFilter1->getContext(),lapMode); addFilter1 = new AddFilter(.1); dxdy = new DxDyFilter(); gaus3x3Filter = new ConvolutionFilter(gkernel3_3,3,3,numChannels); gaus3x3FilterPacked = new ConvolutionFilter2Pack(_gauss5x5Kernel,5,5,4); lap5x5Filter = new ConvolutionFilter(_gauss5x5Kernel,5,5,4); localMaximumFilter = new LocalMaximumFilter(gaborFilter1->getContext()); harrisCorner = new HarrisCorner(gaborFilter1->getContext(),harrisThreshold); // gausPyramid2 = new GausPyramid(gaborFilter1->getContext(),gpuVis,50,2); startTime = clock(); gausPyramid = new GausPyramid(gaborFilter1->getContext(),gpuVis,9,2); printTiming(startTime,clock(),"Gaussian Pyramid"); cout << "GausPyramid has " << gausPyramid->GetNumLevels()<<" levels"< GetDataFloats(), gpuVis->GetWidth(), gpuVis->GetHeight(),true); printTiming(startTime,clock(),"Loading Mipmap"); delete tmpVis; /* startTime = clock(); for(int j = 0; j < 100; j++) { gausPyramid->GetLevel(0)->SetData(gpuVis->GetDataFloats()); gausPyramid->Level0Updated(); for(i = 0; i < gausPyramid->GetNumLevels(); i++) { gausPyramid->GetLevel(i)->DownloadTexture(); } } printTiming(startTime,clock(),"100 Upload Img, Regen GausPyramid and Download Img"); */ for(i = 0; i < gaborFilterWidthEven; i++) { for(int j = 0; j < gaborFilterWidthEven; j++) { cout << gaborData[i*gaborFilterWidthEven+j] << ","; } cout << endl; } // and all the rest happens in the display function... glutMainLoop(); } catch (string err) { cout << err << endl; } return 0; }