16#include <mitkTestingMacros.h>
18#include <opencv2/imgproc/imgproc.hpp>
19#include <opencv2/imgproc/imgproc_c.h>
20#include <opencv2/imgcodecs.hpp>
22static bool ImagesAreEqualInGray(
const cv::Mat& img1,
const cv::Mat& img2)
27 cv::cvtColor(img1, grayImg1, CV_RGB2GRAY, 1);
28 cv::cvtColor(img2, grayImg2, CV_RGB2GRAY, 1);
30 return cv::countNonZero(grayImg1 != grayImg2) == 0;
34static void ConvertTestLoadedImage(std::string mitkImagePath)
36 cv::Mat image = cv::imread(mitkImagePath.c_str());
37 cv::Mat compareImg = image.clone();
39 mitk::BasicCombinationOpenCVImageFilter::Pointer combinationFilter
40 = mitk::BasicCombinationOpenCVImageFilter::New();
42 MITK_TEST_CONDITION(combinationFilter->FilterImage(image),
"Filtering with empty filter list is ok.");
43 MITK_TEST_CONDITION(ImagesAreEqualInGray(image, compareImg),
"Image must not be changed after filtering with empty filter list.");
45 mitk::ConvertGrayscaleOpenCVImageFilter::Pointer grayscaleFilter
46 = mitk::ConvertGrayscaleOpenCVImageFilter::New();
48 combinationFilter->PushFilter(grayscaleFilter.GetPointer());
49 MITK_TEST_CONDITION(combinationFilter->FilterImage(image),
"Filtering with grayscale filter should be ok.");
50 MITK_TEST_CONDITION(image.channels() == 1,
"Image must not have more than one channel after grayscale conversion.");
53 image = compareImg.clone();
55 mitk::CropOpenCVImageFilter::Pointer cropFilter = mitk::CropOpenCVImageFilter::New();
56 combinationFilter->PushFilter(cropFilter.GetPointer());
57 MITK_TEST_CONDITION( ! combinationFilter->FilterImage(image),
"Filter function must return false if an filter returns false.");
59 MITK_TEST_CONDITION(combinationFilter->PopFilter() == cropFilter,
"Last added filter is equal to returned filter.");
62 image = compareImg.clone();
64 MITK_TEST_CONDITION(combinationFilter->FilterImage(image),
"Filter function should return true again after removing incorrect filter.");
66 MITK_TEST_CONDITION(combinationFilter->RemoveFilter(grayscaleFilter.GetPointer()),
"Filter must be found.");
69 image = compareImg.clone();
71 MITK_TEST_CONDITION(combinationFilter->FilterImage(image),
"Filter function should still return true.");
73 MITK_TEST_CONDITION(ImagesAreEqualInGray(image, compareImg),
"Image must not be changed after all filters were removed.");
81 MITK_TEST_BEGIN(
"BasicCombinationOpenCVImageFilter")
83 MITK_TEST_CONDITION_REQUIRED(argc == 2,
"Two parameters are needed for this test.")
85 ConvertTestLoadedImage(argv[1]);
int mitkBasicCombinationOpenCVImageFilterTest(int argc, char *argv[])