76 lines
2.6 KiB
C++
76 lines
2.6 KiB
C++
// This file is part of OpenCV project.
|
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
// of this distribution and at http://opencv.org/license.html.
|
|
#include "test_precomp.hpp"
|
|
|
|
namespace opencv_test { namespace {
|
|
using namespace xphoto;
|
|
|
|
|
|
static void test_inpainting(const Size inputSize, InpaintTypes mode, double expected_psnr, ImreadModes inputMode = IMREAD_COLOR)
|
|
{
|
|
string original_path = cvtest::findDataFile("cv/shared/lena.png");
|
|
string mask_path = cvtest::findDataFile("cv/inpaint/mask.png");
|
|
|
|
Mat original_ = imread(original_path, inputMode);
|
|
ASSERT_FALSE(original_.empty()) << "Could not load input image " << original_path;
|
|
|
|
Mat mask_ = imread(mask_path, IMREAD_GRAYSCALE);
|
|
ASSERT_FALSE(mask_.empty()) << "Could not load error mask " << mask_path;
|
|
|
|
Mat original, mask;
|
|
resize(original_, original, inputSize, 0.0, 0.0, INTER_AREA);
|
|
resize(mask_, mask, inputSize, 0.0, 0.0, INTER_NEAREST);
|
|
|
|
Mat mask_valid = (mask == 0);
|
|
Mat im_distorted(inputSize, original.type(), Scalar::all(0));
|
|
original.copyTo(im_distorted, mask_valid);
|
|
|
|
Mat reconstructed;
|
|
xphoto::inpaint(im_distorted, mask_valid, reconstructed, mode);
|
|
|
|
double adiff_psnr = cvtest::PSNR(original, reconstructed);
|
|
EXPECT_LE(expected_psnr, adiff_psnr);
|
|
|
|
#if 0
|
|
imshow("original", original);
|
|
imshow("im_distorted", im_distorted);
|
|
imshow("reconstructed", reconstructed);
|
|
std::cout << "adiff_psnr=" << adiff_psnr << std::endl;
|
|
waitKey();
|
|
#endif
|
|
}
|
|
|
|
TEST(xphoto_inpaint, smoke_FSR_FAST) // fast smoke test, input doesn't fit well for tested algorithm
|
|
{
|
|
test_inpainting(Size(128, 128), INPAINT_FSR_FAST, 30);
|
|
}
|
|
TEST(xphoto_inpaint, smoke_FSR_BEST) // fast smoke test, input doesn't fit well for tested algorithm
|
|
{
|
|
applyTestTag(CV_TEST_TAG_LONG);
|
|
test_inpainting(Size(128, 128), INPAINT_FSR_BEST, 30);
|
|
}
|
|
|
|
TEST(xphoto_inpaint, smoke_grayscale_FSR_FAST) // fast smoke test, input doesn't fit well for tested algorithm
|
|
{
|
|
test_inpainting(Size(128, 128), INPAINT_FSR_FAST, 30, IMREAD_GRAYSCALE);
|
|
}
|
|
TEST(xphoto_inpaint, smoke_grayscale_FSR_BEST) // fast smoke test, input doesn't fit well for tested algorithm
|
|
{
|
|
test_inpainting(Size(128, 128), INPAINT_FSR_BEST, 30, IMREAD_GRAYSCALE);
|
|
}
|
|
|
|
|
|
TEST(xphoto_inpaint, regression_FSR_FAST)
|
|
{
|
|
test_inpainting(Size(512, 512), INPAINT_FSR_FAST, 39.5);
|
|
}
|
|
TEST(xphoto_inpaint, regression_FSR_BEST)
|
|
{
|
|
applyTestTag(CV_TEST_TAG_VERYLONG); // add --test_tag_enable=verylong to run this test
|
|
test_inpainting(Size(512, 512), INPAINT_FSR_BEST, 39.6);
|
|
}
|
|
|
|
|
|
}} // namespace
|