optimized createHanningWindow

pull/2153/head^2
Ilya Lavrenov 11 years ago
parent fff5a6c058
commit 41bc5808c0
  1. 22
      modules/imgproc/perf/perf_phasecorr.cpp
  2. 24
      modules/imgproc/src/phasecorr.cpp

@ -0,0 +1,22 @@
#include "perf_precomp.hpp"
using namespace std;
using namespace cv;
using namespace perf;
using namespace testing;
using std::tr1::make_tuple;
using std::tr1::get;
typedef TestBaseWithParam<Size > CreateHanningWindowFixture;
PERF_TEST_P( CreateHanningWindowFixture, CreateHanningWindow, Values(szVGA, sz1080p))
{
const Size size = GetParam();
Mat dst(size, CV_32FC1);
declare.in(dst, WARMUP_RNG).out(dst);
TEST_CYCLE() cv::createHanningWindow(dst, size, CV_32FC1);
SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
}

@ -576,20 +576,23 @@ void cv::createHanningWindow(OutputArray _dst, cv::Size winSize, int type)
_dst.create(winSize, type);
Mat dst = _dst.getMat();
int rows = dst.rows;
int cols = dst.cols;
int rows = dst.rows, cols = dst.cols;
AutoBuffer<double> _wc(cols);
double * const wc = (double *)_wc;
double coeff0 = 2.0 * CV_PI / (double)(cols - 1), coeff1 = 2.0f * CV_PI / (double)(rows - 1);
for(int j = 0; j < cols; j++)
wc[j] = 0.5 * (1.0 - cos(coeff0 * j));
if(dst.depth() == CV_32F)
{
for(int i = 0; i < rows; i++)
{
float* dstData = dst.ptr<float>(i);
double wr = 0.5 * (1.0f - cos(2.0f * CV_PI * (double)i / (double)(rows - 1)));
double wr = 0.5 * (1.0 - cos(coeff1 * i));
for(int j = 0; j < cols; j++)
{
double wc = 0.5 * (1.0f - cos(2.0f * CV_PI * (double)j / (double)(cols - 1)));
dstData[j] = (float)(wr * wc);
}
dstData[j] = (float)(wr * wc[j]);
}
}
else
@ -597,12 +600,9 @@ void cv::createHanningWindow(OutputArray _dst, cv::Size winSize, int type)
for(int i = 0; i < rows; i++)
{
double* dstData = dst.ptr<double>(i);
double wr = 0.5 * (1.0 - cos(2.0 * CV_PI * (double)i / (double)(rows - 1)));
double wr = 0.5 * (1.0 - cos(coeff1 * i));
for(int j = 0; j < cols; j++)
{
double wc = 0.5 * (1.0 - cos(2.0 * CV_PI * (double)j / (double)(cols - 1)));
dstData[j] = wr * wc;
}
dstData[j] = wr * wc[j];
}
}

Loading…
Cancel
Save