void ImageAdd::_RunInt() { const size_t cszIters = static_cast< size_t >( TEST_RUN_COUNT ); printf("\n Running \"_RunInt()\" - Image-Size = %4d x %4d\n", ciImageWidth, ciImageHeight); HandlerList lstHandlers; AppendHandlerList( lstHandlers, ImageAddInt_GetScalarHandlers() ); AppendHandlerList( lstHandlers, ImageAddInt_GetSSEHandlers() ); AppendHandlerList( lstHandlers, ImageAddInt_GetAVXHandlers() ); CREATE_IMAGE( InputImageType1, spInputImage1 ); CREATE_IMAGE( InputImageType2, spInputImage2 ); CREATE_IMAGE( OutputImageType, spOutputImage ); ImageIO::LoadTestImage( *spInputImage1 ); ImageIO::LoadTestImage( *spInputImage2 ); for (auto itHandler : lstHandlers) { printf( "\n Launch handler \"%10s\" -> ", itHandler->GetName().c_str() ); double dTime = omp_get_wtime(); for (size_t szIter = static_cast<size_t>(0); szIter < cszIters; ++szIter) { _mm256_zeroall(); itHandler->Launch( spOutputImage, spInputImage1, spInputImage2 ); } dTime = omp_get_wtime() - dTime; dTime = (dTime * 1000.) / static_cast< double >( cszIters ); printf( "%10.6f ms", dTime ); } #ifdef CONFIG_CHECK_OUTPUT IMAGE_ADD_CHECK_OUTPUT( Int ); #endif printf("\n"); }
void TopologicalErosion::_RunFloat(unsigned int uiKernelSize) { const size_t cszIters = static_cast< size_t >( TEST_RUN_COUNT ); printf("\n Running \"_RunFloat()\" - Image-Size = %4d x %4d\n", ciImageWidth, ciImageHeight); HandlerList lstHandlers; AppendHandlerList( lstHandlers, TopologicalErosionFloat_GetScalarHandlers() ); AppendHandlerList( lstHandlers, TopologicalErosionFloat_GetSSEHandlers() ); AppendHandlerList( lstHandlers, TopologicalErosionFloat_GetAVXHandlers() ); CREATE_IMAGE( InputImageType, spInputImage ); CREATE_IMAGE( OutputImageType, spOutputImage ); ImageIO::LoadTestImage( *spInputImage ); for (auto itHandler : lstHandlers) { printf( "\n Launch handler \"%10s\" -> ", itHandler->GetName().c_str() ); double dTime = omp_get_wtime(); for (size_t szIter = static_cast<size_t>(0); szIter < cszIters; ++szIter) { _mm256_zeroall(); itHandler->Launch( spOutputImage, spInputImage, uiKernelSize ); } dTime = omp_get_wtime() - dTime; dTime = (dTime * 1000.) / static_cast< double >( cszIters ); printf( "%10.6f ms", dTime ); } #ifdef CONFIG_CHECK_OUTPUT TOPOLOGICAL_EROSION_CHECK_OUTPUT( Float ); #endif printf("\n"); }
lfError cLightFieldViewGenerator_SparseHR::generate(void *raw_image, void *depth_image, lfCalibrationParameter_t* cparams, lfViewGeneratorParameter_t* vparams) { IplImage* img = static_cast<IplImage*> (raw_image); IplImage* depthImg = static_cast<IplImage*> (depth_image); IplImage* view = CREATE_IMAGE(img); _lens_mask = cparams->createLensMask(); IplImage* mask = (IplImage*) _lens_mask; RETURN_IF_NULL(img && view && depthImg && mask); cvZero(view); _view = view; RETURN_NO_ERR; }
lfError cLightFieldViewGenerator_AllInFocus::generate(void *raw_image, void *depth_image, lfCalibrationParameter_t* cparams, lfViewGeneratorParameter_t* vparams) { IplImage* img = static_cast<IplImage*> (raw_image); IplImage* depthImg = static_cast<IplImage*> (depth_image); IplImage* view = CREATE_IMAGE(img); _lens_mask = cparams->createLensMask(); IplImage* mask = (IplImage*) _lens_mask; RETURN_IF_NULL(img && view && depthImg && mask); cvZero(view); unsigned int numLenses; // number of lenses in the neighborhood unsigned int numUsedLenses = 0; // number of lenses used for the projection int xLens, yLens, xImg, yImg; // projected point in lens coordinates double depth; // virtual depth at current image point lfPoint2Dd_t lens_centers[100]; // storage for the lens centers of the neighboring lenses lfPoint2Dd_t image_point; // projected point in image coordinates lfPoint2Dd_t lens_center; // current used lens center CvScalar s = cvScalar(0); // color value of the final pixel const int r = (int) (cparams->diameter / 2 - cparams->lens_border); // radius with integer resolution //showImage(mask,"Lens mask"); for (int y=0; y < img->height; y++) { for (int x=0; x < img->width; x++) { depth = cvGetReal2D(depthImg, y, x); numLenses = sizeof(lens_centers) / sizeof(*lens_centers); cparams->findCloseLensCenters(lfPoint2D(x, y), 2, depth, &numLenses, lens_centers); //IplImage *temp_img = cvCloneImage(img); //for(unsigned int l = 0; l < numLenses; l++) { // lens_center = lens_centers[l]; // cvCircle(temp_img, cvPoint((int) lens_center.x, (int) lens_center.y), r, gColors[0], 1); //} //cvCircle(temp_img, cvPoint(x,y), 5, gColors[1], 2); //showImage(temp_img, "Debug Image"); //cvReleaseImage(&temp_img); for(unsigned int l = 0; l < numLenses; l++) { lens_center = lens_centers[l]; image_point = lens_center - (1/depth * (lfPoint2D(x,y) - lens_center)); // point in image coordinate system xImg = cvFloor(image_point.x); yImg = cvFloor(image_point.y); // point in corresponding lens coordinate system xLens = (int) (mask->width / 2 - lens_center.x + image_point.x); yLens = (int) (mask->height / 2 - lens_center.y + image_point.y); // only if projected image point is at a valid lense position if(IS_POINT_IN_IMAGE(mask, xLens, yLens)) { if(cvGetReal2D(mask,yLens,xLens)) { if(IS_POINT_IN_IMAGE(img, xImg, yImg) && IS_POINT_IN_IMAGE(img, xImg+1, yImg+1)) { s = s + get2DInterpolated(img, image_point.x, image_point.y); numUsedLenses++; } } } } if(numUsedLenses == 0) continue; // compute mean value over all found pixels s = (1/(double)numUsedLenses) * s; cvSet2D(view, y, x, s); // reset variables numUsedLenses = 0; s = cvScalar(0); } } _view = view; RETURN_NO_ERR; }