mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 06:03:15 +08:00
adjust test cases
This commit is contained in:
parent
14bd6402be
commit
a9b7ff41bd
@ -95,7 +95,7 @@ PERFTEST(BruteForceMatcher)
|
||||
GPU_FULL_ON;
|
||||
d_query.upload(query);
|
||||
d_train.upload(train);
|
||||
d_matcher.match(d_query, d_train, matches[0]);
|
||||
d_matcher.match(d_query, d_train, d_matches[0]);
|
||||
GPU_FULL_OFF;
|
||||
|
||||
int diff = abs((int)d_matches[0].size() - (int)matches[0].size());
|
||||
|
@ -156,3 +156,73 @@ PERFTEST(PyrLKOpticalFlow)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PERFTEST(tvl1flow)
|
||||
{
|
||||
cv::Mat frame0 = imread("rubberwhale1.png", cv::IMREAD_GRAYSCALE);
|
||||
assert(!frame0.empty());
|
||||
|
||||
cv::Mat frame1 = imread("rubberwhale2.png", cv::IMREAD_GRAYSCALE);
|
||||
assert(!frame1.empty());
|
||||
|
||||
cv::ocl::OpticalFlowDual_TVL1_OCL d_alg;
|
||||
cv::ocl::oclMat d_flowx(frame0.size(), CV_32FC1);
|
||||
cv::ocl::oclMat d_flowy(frame1.size(), CV_32FC1);
|
||||
|
||||
cv::Ptr<cv::DenseOpticalFlow> alg = cv::createOptFlow_DualTVL1();
|
||||
cv::Mat flow;
|
||||
|
||||
|
||||
SUBTEST << frame0.cols << 'x' << frame0.rows << "; rubberwhale1.png; "<<frame1.cols<<'x'<<frame1.rows<<"; rubberwhale2.png";
|
||||
|
||||
alg->calc(frame0, frame1, flow);
|
||||
|
||||
CPU_ON;
|
||||
alg->calc(frame0, frame1, flow);
|
||||
CPU_OFF;
|
||||
|
||||
cv::Mat gold[2];
|
||||
cv::split(flow, gold);
|
||||
|
||||
cv::ocl::oclMat d0(frame0.size(), CV_32FC1);
|
||||
d0.upload(frame0);
|
||||
cv::ocl::oclMat d1(frame1.size(), CV_32FC1);
|
||||
d1.upload(frame1);
|
||||
|
||||
WARMUP_ON;
|
||||
d_alg(d0, d1, d_flowx, d_flowy);
|
||||
WARMUP_OFF;
|
||||
/*
|
||||
double diff1 = 0.0, diff2 = 0.0;
|
||||
if(ExceptedMatSimilar(gold[0], cv::Mat(d_flowx), 3e-3, diff1) == 1
|
||||
&&ExceptedMatSimilar(gold[1], cv::Mat(d_flowy), 3e-3, diff2) == 1)
|
||||
TestSystem::instance().setAccurate(1);
|
||||
else
|
||||
TestSystem::instance().setAccurate(0);
|
||||
|
||||
TestSystem::instance().setDiff(diff1);
|
||||
TestSystem::instance().setDiff(diff2);
|
||||
*/
|
||||
|
||||
|
||||
GPU_ON;
|
||||
d_alg(d0, d1, d_flowx, d_flowy);
|
||||
d_alg.collectGarbage();
|
||||
GPU_OFF;
|
||||
|
||||
|
||||
cv::Mat flowx, flowy;
|
||||
|
||||
GPU_FULL_ON;
|
||||
d0.upload(frame0);
|
||||
d1.upload(frame1);
|
||||
d_alg(d0, d1, d_flowx, d_flowy);
|
||||
d_alg.collectGarbage();
|
||||
d_flowx.download(flowx);
|
||||
d_flowy.download(flowy);
|
||||
GPU_FULL_OFF;
|
||||
|
||||
TestSystem::instance().ExceptedMatSimilar(gold[0], flowx, 3e-3);
|
||||
TestSystem::instance().ExceptedMatSimilar(gold[1], flowy, 3e-3);
|
||||
}
|
@ -86,4 +86,47 @@ PERFTEST(pyrDown)
|
||||
TestSystem::instance().ExpectedMatNear(dst, ocl_dst, dst.depth() == CV_32F ? 1e-4f : 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////// pyrUp ////////////////////////
|
||||
PERFTEST(pyrUp)
|
||||
{
|
||||
Mat src, dst, ocl_dst;
|
||||
int all_type[] = {CV_8UC1, CV_8UC4};
|
||||
std::string type_name[] = {"CV_8UC1", "CV_8UC4"};
|
||||
|
||||
for (int size = 500; size <= 2000; size *= 2)
|
||||
{
|
||||
for (size_t j = 0; j < sizeof(all_type) / sizeof(int); j++)
|
||||
{
|
||||
SUBTEST << size << 'x' << size << "; " << type_name[j] ;
|
||||
|
||||
gen(src, size, size, all_type[j], 0, 256);
|
||||
|
||||
pyrUp(src, dst);
|
||||
|
||||
CPU_ON;
|
||||
pyrUp(src, dst);
|
||||
CPU_OFF;
|
||||
|
||||
ocl::oclMat d_src(src);
|
||||
ocl::oclMat d_dst;
|
||||
|
||||
WARMUP_ON;
|
||||
ocl::pyrUp(d_src, d_dst);
|
||||
WARMUP_OFF;
|
||||
|
||||
GPU_ON;
|
||||
ocl::pyrUp(d_src, d_dst);
|
||||
GPU_OFF;
|
||||
|
||||
GPU_FULL_ON;
|
||||
d_src.upload(src);
|
||||
ocl::pyrUp(d_src, d_dst);
|
||||
d_dst.download(ocl_dst);
|
||||
GPU_FULL_OFF;
|
||||
|
||||
TestSystem::instance().ExpectedMatNear(dst, ocl_dst, (src.depth() == CV_32F ? 1e-4f : 1.0));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
|
||||
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// @Authors
|
||||
// Fangfang Bai, fangfang@multicorewareinc.com
|
||||
// Jin Ma, jin@multicorewareinc.com
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other oclMaterials provided with the distribution.
|
||||
//
|
||||
// * The name of the copyright holders may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors as is and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
#include "precomp.hpp"
|
||||
|
||||
///////////// pyrUp ////////////////////////
|
||||
PERFTEST(pyrUp)
|
||||
{
|
||||
Mat src, dst, ocl_dst;
|
||||
int all_type[] = {CV_8UC1, CV_8UC4};
|
||||
std::string type_name[] = {"CV_8UC1", "CV_8UC4"};
|
||||
|
||||
for (int size = 500; size <= 2000; size *= 2)
|
||||
{
|
||||
for (size_t j = 0; j < sizeof(all_type) / sizeof(int); j++)
|
||||
{
|
||||
SUBTEST << size << 'x' << size << "; " << type_name[j] ;
|
||||
|
||||
gen(src, size, size, all_type[j], 0, 256);
|
||||
|
||||
pyrUp(src, dst);
|
||||
|
||||
CPU_ON;
|
||||
pyrUp(src, dst);
|
||||
CPU_OFF;
|
||||
|
||||
ocl::oclMat d_src(src);
|
||||
ocl::oclMat d_dst;
|
||||
|
||||
WARMUP_ON;
|
||||
ocl::pyrUp(d_src, d_dst);
|
||||
WARMUP_OFF;
|
||||
|
||||
GPU_ON;
|
||||
ocl::pyrUp(d_src, d_dst);
|
||||
GPU_OFF;
|
||||
|
||||
GPU_FULL_ON;
|
||||
d_src.upload(src);
|
||||
ocl::pyrUp(d_src, d_dst);
|
||||
d_dst.download(ocl_dst);
|
||||
GPU_FULL_OFF;
|
||||
|
||||
TestSystem::instance().ExpectedMatNear(dst, ocl_dst, (src.depth() == CV_32F ? 1e-4f : 1.0));
|
||||
}
|
||||
}
|
||||
}
|
@ -471,134 +471,6 @@ void gen(Mat &mat, int rows, int cols, int type, Scalar low, Scalar high)
|
||||
RNG rng(0);
|
||||
rng.fill(mat, RNG::UNIFORM, low, high);
|
||||
}
|
||||
#if 0
|
||||
void gen(Mat &mat, int rows, int cols, int type, int low, int high, int n)
|
||||
{
|
||||
assert(n > 0&&n <= cols * rows);
|
||||
assert(type == CV_8UC1||type == CV_8UC3||type == CV_8UC4
|
||||
||type == CV_32FC1||type == CV_32FC3||type == CV_32FC4);
|
||||
|
||||
RNG rng;
|
||||
//generate random position without duplication
|
||||
std::vector<int> pos;
|
||||
for(int i = 0; i < cols * rows; i++)
|
||||
{
|
||||
pos.push_back(i);
|
||||
}
|
||||
|
||||
for(int i = 0; i < cols * rows; i++)
|
||||
{
|
||||
int temp = i + rng.uniform(0, cols * rows - 1 - i);
|
||||
int temp1 = pos[temp];
|
||||
pos[temp]= pos[i];
|
||||
pos[i] = temp1;
|
||||
}
|
||||
|
||||
std::vector<int> selected_pos;
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
selected_pos.push_back(pos[i]);
|
||||
}
|
||||
|
||||
pos.clear();
|
||||
//end of generating random y without duplication
|
||||
|
||||
if(type == CV_8UC1)
|
||||
{
|
||||
typedef struct coorStruct_
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
uchar xy;
|
||||
}coorStruct;
|
||||
|
||||
coorStruct coor_struct;
|
||||
|
||||
std::vector<coorStruct> coor;
|
||||
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
coor_struct.x = -1;
|
||||
coor_struct.y = -1;
|
||||
coor_struct.xy = (uchar)rng.uniform(low, high);
|
||||
coor.push_back(coor_struct);
|
||||
}
|
||||
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
coor[i].y = selected_pos[i]/cols;
|
||||
coor[i].x = selected_pos[i]%cols;
|
||||
}
|
||||
selected_pos.clear();
|
||||
|
||||
mat.create(rows, cols, type);
|
||||
mat.setTo(0);
|
||||
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
mat.at<unsigned char>(coor[i].y, coor[i].x) = coor[i].xy;
|
||||
}
|
||||
}
|
||||
|
||||
if(type == CV_8UC4 || type == CV_8UC3)
|
||||
{
|
||||
mat.create(rows, cols, type);
|
||||
mat.setTo(0);
|
||||
|
||||
typedef struct Coor
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
|
||||
uchar r;
|
||||
uchar g;
|
||||
uchar b;
|
||||
uchar alpha;
|
||||
}coor;
|
||||
|
||||
std::vector<coor> coor_vect;
|
||||
|
||||
coor xy_coor;
|
||||
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
xy_coor.r = (uchar)rng.uniform(low, high);
|
||||
xy_coor.g = (uchar)rng.uniform(low, high);
|
||||
xy_coor.b = (uchar)rng.uniform(low, high);
|
||||
if(type == CV_8UC4)
|
||||
xy_coor.alpha = (uchar)rng.uniform(low, high);
|
||||
|
||||
coor_vect.push_back(xy_coor);
|
||||
}
|
||||
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
coor_vect[i].y = selected_pos[i]/((int)mat.step1()/mat.elemSize());
|
||||
coor_vect[i].x = selected_pos[i]%((int)mat.step1()/mat.elemSize());
|
||||
//printf("coor_vect[%d] = (%d, %d)\n", i, coor_vect[i].y, coor_vect[i].x);
|
||||
}
|
||||
|
||||
if(type == CV_8UC4)
|
||||
{
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
mat.at<unsigned char>(coor_vect[i].y, 4 * coor_vect[i].x) = coor_vect[i].r;
|
||||
mat.at<unsigned char>(coor_vect[i].y, 4 * coor_vect[i].x + 1) = coor_vect[i].g;
|
||||
mat.at<unsigned char>(coor_vect[i].y, 4 * coor_vect[i].x + 2) = coor_vect[i].b;
|
||||
mat.at<unsigned char>(coor_vect[i].y, 4 * coor_vect[i].x + 3) = coor_vect[i].alpha;
|
||||
}
|
||||
}else if(type == CV_8UC3)
|
||||
{
|
||||
for(int i = 0; i < n; i++)
|
||||
{
|
||||
mat.at<unsigned char>(coor_vect[i].y, 3 * coor_vect[i].x) = coor_vect[i].r;
|
||||
mat.at<unsigned char>(coor_vect[i].y, 3 * coor_vect[i].x + 1) = coor_vect[i].g;
|
||||
mat.at<unsigned char>(coor_vect[i].y, 3 * coor_vect[i].x + 2) = coor_vect[i].b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
string abspath(const string &relpath)
|
||||
{
|
||||
@ -631,34 +503,6 @@ double checkSimilarity(const Mat &m1, const Mat &m2)
|
||||
return std::abs(diff.at<float>(0, 0) - 1.f);
|
||||
}
|
||||
|
||||
/*
|
||||
int ExpectedMatNear(cv::Mat dst, cv::Mat cpu_dst, double eps)
|
||||
{
|
||||
assert(dst.type() == cpu_dst.type());
|
||||
assert(dst.size() == cpu_dst.size());
|
||||
if(checkNorm(cv::Mat(dst), cv::Mat(cpu_dst)) < eps ||checkNorm(cv::Mat(dst), cv::Mat(cpu_dst)) == eps)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ExceptDoubleNear(double val1, double val2, double abs_error)
|
||||
{
|
||||
const double diff = fabs(val1 - val2);
|
||||
if (diff <= abs_error)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
int ExceptedMatSimilar(cv::Mat dst, cv::Mat cpu_dst, double eps)
|
||||
{
|
||||
assert(dst.type() == cpu_dst.type());
|
||||
assert(dst.size() == cpu_dst.size());
|
||||
if(checkSimilarity(cv::Mat(cpu_dst), cv::Mat(dst)) <= eps)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user