MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkBasicCombinationOpenCVImageFilterTest.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
16#include <mitkTestingMacros.h>
17
18#include <opencv2/imgproc/imgproc.hpp>
19#include <opencv2/imgproc/imgproc_c.h>
20#include <opencv2/imgcodecs.hpp>
21
22static bool ImagesAreEqualInGray(const cv::Mat& img1, const cv::Mat& img2)
23{
24 cv::Mat grayImg1;
25 cv::Mat grayImg2;
26
27 cv::cvtColor(img1, grayImg1, CV_RGB2GRAY, 1);
28 cv::cvtColor(img2, grayImg2, CV_RGB2GRAY, 1);
29
30 return cv::countNonZero(grayImg1 != grayImg2) == 0;
31}
32
33
34static void ConvertTestLoadedImage(std::string mitkImagePath)
35{
36 cv::Mat image = cv::imread(mitkImagePath.c_str());
37 cv::Mat compareImg = image.clone();
38
39 mitk::BasicCombinationOpenCVImageFilter::Pointer combinationFilter
40 = mitk::BasicCombinationOpenCVImageFilter::New();
41
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.");
44
45 mitk::ConvertGrayscaleOpenCVImageFilter::Pointer grayscaleFilter
46 = mitk::ConvertGrayscaleOpenCVImageFilter::New();
47
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.");
51
52 image.release();
53 image = compareImg.clone();
54
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.");
58
59 MITK_TEST_CONDITION(combinationFilter->PopFilter() == cropFilter, "Last added filter is equal to returned filter.");
60
61 image.release();
62 image = compareImg.clone();
63
64 MITK_TEST_CONDITION(combinationFilter->FilterImage(image), "Filter function should return true again after removing incorrect filter.");
65
66 MITK_TEST_CONDITION(combinationFilter->RemoveFilter(grayscaleFilter.GetPointer()), "Filter must be found.");
67
68 image.release();
69 image = compareImg.clone();
70
71 MITK_TEST_CONDITION(combinationFilter->FilterImage(image), "Filter function should still return true.");
72
73 MITK_TEST_CONDITION(ImagesAreEqualInGray(image, compareImg), "Image must not be changed after all filters were removed.");
74}
75
80{
81 MITK_TEST_BEGIN("BasicCombinationOpenCVImageFilter")
82
83 MITK_TEST_CONDITION_REQUIRED(argc == 2, "Two parameters are needed for this test.")
84
85 ConvertTestLoadedImage(argv[1]);
86
87 MITK_TEST_END(); // always end with this!
88
89}
int mitkBasicCombinationOpenCVImageFilterTest(int argc, char *argv[])