void DegradeFrameSource::nextFrame(cv::OutputArray frame) { base_->nextFrame(origFrame_); cv::GaussianBlur(origFrame_, blurred_, cv::Size(5, 5), 0); cv::resize(blurred_, deg_, cv::Size(), iscale_, iscale_, cv::INTER_NEAREST); addGaussNoise(deg_, 10.0); addSpikeNoise(deg_, 500); cv::superres::arrCopy(deg_, frame); }
void AllignedFrameSource::nextFrame(cv::OutputArray frame) { base_->nextFrame(origFrame_); if (origFrame_.rows % scale_ == 0 && origFrame_.cols % scale_ == 0) { cv::superres::arrCopy(origFrame_, frame); } else { cv::Rect ROI(0, 0, (origFrame_.cols / scale_) * scale_, (origFrame_.rows / scale_) * scale_); cv::superres::arrCopy(origFrame_(ROI), frame); } }
void SuperResolution::RunTest(cv::Ptr<cv::superres::SuperResolution> superRes) { const std::string inputVideoName = cvtest::TS::ptr()->get_data_path() + "car.avi"; const int scale = 2; const int iterations = 100; const int temporalAreaRadius = 2; ASSERT_FALSE( superRes.empty() ); const int btvKernelSize = superRes->getInt("btvKernelSize"); superRes->set("scale", scale); superRes->set("iterations", iterations); superRes->set("temporalAreaRadius", temporalAreaRadius); cv::Ptr<cv::superres::FrameSource> goldSource(new AllignedFrameSource(cv::superres::createFrameSource_Video(inputVideoName), scale)); cv::Ptr<cv::superres::FrameSource> lowResSource(new DegradeFrameSource(new AllignedFrameSource(cv::superres::createFrameSource_Video(inputVideoName), scale), scale)); // skip first frame cv::Mat frame; lowResSource->nextFrame(frame); goldSource->nextFrame(frame); cv::Rect inner(btvKernelSize, btvKernelSize, frame.cols - 2 * btvKernelSize, frame.rows - 2 * btvKernelSize); superRes->setInput(lowResSource); double srAvgMSSIM = 0.0; const int count = 10; cv::Mat goldFrame, superResFrame; for (int i = 0; i < count; ++i) { goldSource->nextFrame(goldFrame); ASSERT_FALSE( goldFrame.empty() ); superRes->nextFrame(superResFrame); ASSERT_FALSE( superResFrame.empty() ); const double srMSSIM = MSSIM(goldFrame(inner), superResFrame); srAvgMSSIM += srMSSIM; } srAvgMSSIM /= count; EXPECT_GE( srAvgMSSIM, 0.5 ); }