Path: blob/master/modules/features2d/test/test_fast.cpp
16354 views
/*M///////////////////////////////////////////////////////////////////////////////////////1//2// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.3//4// By downloading, copying, installing or using the software you agree to this license.5// If you do not agree to this license, do not download, install,6// copy or use the software.7//8//9// License Agreement10// For Open Source Computer Vision Library11//12// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.13// Copyright (C) 2009, Willow Garage Inc., all rights reserved.14// Third party copyrights are property of their respective owners.15//16// Redistribution and use in source and binary forms, with or without modification,17// are permitted provided that the following conditions are met:18//19// * Redistribution's of source code must retain the above copyright notice,20// this list of conditions and the following disclaimer.21//22// * Redistribution's in binary form must reproduce the above copyright notice,23// this list of conditions and the following disclaimer in the documentation24// and/or other materials provided with the distribution.25//26// * The name of the copyright holders may not be used to endorse or promote products27// derived from this software without specific prior written permission.28//29// This software is provided by the copyright holders and contributors "as is" and30// any express or implied warranties, including, but not limited to, the implied31// warranties of merchantability and fitness for a particular purpose are disclaimed.32// In no event shall the Intel Corporation or contributors be liable for any direct,33// indirect, incidental, special, exemplary, or consequential damages34// (including, but not limited to, procurement of substitute goods or services;35// loss of use, data, or profits; or business interruption) however caused36// and on any theory of liability, whether in contract, strict liability,37// or tort (including negligence or otherwise) arising in any way out of38// the use of this software, even if advised of the possibility of such damage.39//40//M*/4142#include "test_precomp.hpp"4344namespace opencv_test { namespace {4546class CV_FastTest : public cvtest::BaseTest47{48public:49CV_FastTest();50~CV_FastTest();51protected:52void run(int);53};5455CV_FastTest::CV_FastTest() {}56CV_FastTest::~CV_FastTest() {}5758void CV_FastTest::run( int )59{60for(int type=0; type <= 2; ++type) {61Mat image1 = imread(string(ts->get_data_path()) + "inpaint/orig.png");62Mat image2 = imread(string(ts->get_data_path()) + "cameracalibration/chess9.png");63string xml = string(ts->get_data_path()) + format("fast/result%d.xml", type);6465if (image1.empty() || image2.empty())66{67ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_TEST_DATA );68return;69}7071Mat gray1, gray2;72cvtColor(image1, gray1, COLOR_BGR2GRAY);73cvtColor(image2, gray2, COLOR_BGR2GRAY);7475vector<KeyPoint> keypoints1;76vector<KeyPoint> keypoints2;77FAST(gray1, keypoints1, 30, true, static_cast<FastFeatureDetector::DetectorType>(type));78FAST(gray2, keypoints2, (type > 0 ? 30 : 20), true, static_cast<FastFeatureDetector::DetectorType>(type));7980for(size_t i = 0; i < keypoints1.size(); ++i)81{82const KeyPoint& kp = keypoints1[i];83cv::circle(image1, kp.pt, cvRound(kp.size/2), Scalar(255, 0, 0));84}8586for(size_t i = 0; i < keypoints2.size(); ++i)87{88const KeyPoint& kp = keypoints2[i];89cv::circle(image2, kp.pt, cvRound(kp.size/2), Scalar(255, 0, 0));90}9192Mat kps1(1, (int)(keypoints1.size() * sizeof(KeyPoint)), CV_8U, &keypoints1[0]);93Mat kps2(1, (int)(keypoints2.size() * sizeof(KeyPoint)), CV_8U, &keypoints2[0]);9495FileStorage fs(xml, FileStorage::READ);96if (!fs.isOpened())97{98fs.open(xml, FileStorage::WRITE);99if (!fs.isOpened())100{101ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA);102return;103}104fs << "exp_kps1" << kps1;105fs << "exp_kps2" << kps2;106fs.release();107fs.open(xml, FileStorage::READ);108if (!fs.isOpened())109{110ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA);111return;112}113}114115Mat exp_kps1, exp_kps2;116read( fs["exp_kps1"], exp_kps1, Mat() );117read( fs["exp_kps2"], exp_kps2, Mat() );118fs.release();119120if ( exp_kps1.size != kps1.size || 0 != cvtest::norm(exp_kps1, kps1, NORM_L2) ||121exp_kps2.size != kps2.size || 0 != cvtest::norm(exp_kps2, kps2, NORM_L2))122{123ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);124return;125}126127/*cv::namedWindow("Img1"); cv::imshow("Img1", image1);128cv::namedWindow("Img2"); cv::imshow("Img2", image2);129cv::waitKey(0);*/130}131132ts->set_failed_test_info(cvtest::TS::OK);133}134135TEST(Features2d_FAST, regression) { CV_FastTest test; test.safe_run(); }136137}} // namespace138139140