62 MITK_TEST_BEGIN(
"ImageToOpenCVImageFilter")
67 MITK_INFO <<
"setting test values";
70 pos1 = cv::Point(0,0);
71 pos2 = cv::Point(5,5);
72 pos3 = cv::Point(10,10);
74 color1 = cv::Vec3b(50,0,0);
75 color2 = cv::Vec3b(0,128,0);
76 color3 = cv::Vec3b(0,0,255);
82 MITK_INFO <<
"generating test OpenCV image (RGB)";
83 cv::Mat testRGBImage = cv::Mat::zeros(
testImageSize, CV_8UC3 );
91 MITK_INFO <<
"converting OpenCV test image to mitk image and comparing scalar rgb values";
92 mitk::OpenCVToMitkImageFilter::Pointer openCvToMitkFilter =
93 mitk::OpenCVToMitkImageFilter::New();
94 openCvToMitkFilter->SetOpenCVMat( testRGBImage );
95 openCvToMitkFilter->Update();
97 mitk::Image::Pointer mitkImage = openCvToMitkFilter->GetOutput();
99 (itk::RGBPixel<unsigned char>),
103 MITK_INFO <<
"converting mitk image to OpenCV image and comparing scalar rgb values";
104 mitk::ImageToOpenCVImageFilter::Pointer mitkToOpenCv = mitk::ImageToOpenCVImageFilter::New();
105 mitkToOpenCv->SetImage( mitkImage );
106 cv::Mat openCvImage = mitkToOpenCv->GetOpenCVMat();
109 cv::Vec3b convertedColor1 = openCvImage.at<cv::Vec3b>(
pos1);
110 cv::Vec3b convertedColor2 = openCvImage.at<cv::Vec3b>(
pos2);
111 cv::Vec3b convertedColor3 = openCvImage.at<cv::Vec3b>(
pos3);
113 MITK_TEST_CONDITION(
color1 == convertedColor1,
"Testing if initially created color values " <<
static_cast<int>(
color1[0] ) <<
", " <<
static_cast<int>(
color1[1] ) <<
", " <<
static_cast<int>(
color1[2] ) <<
" matches the color values " <<
static_cast<int>( convertedColor1[0] ) <<
", " <<
static_cast<int>( convertedColor1[1] ) <<
", " <<
static_cast<int>( convertedColor1[2] ) <<
" at the same position " <<
pos1.x <<
", " <<
pos1.y <<
" in the back converted OpenCV image" )
115 MITK_TEST_CONDITION(
color2 == convertedColor2,
"Testing if initially created color values " <<
static_cast<int>(
color2[0] ) <<
", " <<
static_cast<int>(
color2[1] ) <<
", " <<
static_cast<int>(
color2[2] ) <<
" matches the color values " <<
static_cast<int>( convertedColor2[0] ) <<
", " <<
static_cast<int>( convertedColor2[1] ) <<
", " <<
static_cast<int>( convertedColor2[2] ) <<
" at the same position " <<
pos2.x <<
", " <<
pos2.y <<
" in the back converted OpenCV image" )
117 MITK_TEST_CONDITION(
color3 == convertedColor3,
"Testing if initially created color values " <<
static_cast<int>(
color3[0] ) <<
", " <<
static_cast<int>(
color3[1] ) <<
", " <<
static_cast<int>(
color3[2] ) <<
" matches the color values " <<
static_cast<int>( convertedColor3[0] ) <<
", " <<
static_cast<int>( convertedColor3[1] ) <<
", " <<
static_cast<int>( convertedColor3[2] ) <<
" at the same position " <<
pos3.x <<
", " <<
pos3.y <<
" in the back converted OpenCV image" )
120 for (
int i = 1; i < argc; ++i)
129void ComparePixels( itk::Image<itk::RGBPixel<TPixel>,VImageDimension>* image )
131 typedef itk::RGBPixel<TPixel> PixelType;
132 typedef itk::Image<PixelType, VImageDimension>
ImageType;
134 typename ImageType::IndexType pixelIndex;
135 pixelIndex[0] =
pos1.x;
136 pixelIndex[1] =
pos1.y;
137 PixelType onePixel = image->GetPixel( pixelIndex );
139 MITK_TEST_CONDITION(
color1[0] == onePixel.GetBlue(),
"Testing if blue value (= " <<
static_cast<int>(
color1[0]) <<
") at postion "
140 <<
pos1.x <<
", " <<
pos1.y <<
" in OpenCV image is "
141 <<
"equals the blue value (= " <<
static_cast<int>(onePixel.GetBlue()) <<
")"
142 <<
" in the generated mitk image");
145 pixelIndex[0] =
pos2.x;
146 pixelIndex[1] =
pos2.y;
147 onePixel = image->GetPixel( pixelIndex );
149 MITK_TEST_CONDITION(
color2[1] == onePixel.GetGreen(),
"Testing if green value (= " <<
static_cast<int>(
color2[1]) <<
") at postion "
150 <<
pos2.x <<
", " <<
pos2.y <<
" in OpenCV image is "
151 <<
"equals the green value (= " <<
static_cast<int>(onePixel.GetGreen()) <<
")"
152 <<
" in the generated mitk image");
155 pixelIndex[0] =
pos3.x;
156 pixelIndex[1] =
pos3.y;
157 onePixel = image->GetPixel( pixelIndex );
159 MITK_TEST_CONDITION(
color3[2] == onePixel.GetRed(),
"Testing if red value (= " <<
static_cast<int>(
color3[2]) <<
") at postion "
160 <<
pos3.x <<
", " <<
pos3.y <<
" in OpenCV image is "
161 <<
"equals the red value (= " <<
static_cast<int>(onePixel.GetRed()) <<
")"
162 <<
" in the generated mitk image");
169 mitk::Image::Pointer mitkTestImage = mitk::IOUtil::Load<mitk::Image>(imageFileName);
172 mitk::Image::Pointer resultImg =
nullptr;
173 if( mitkTestImage->GetDimension() <= 3 )
175 if( mitkTestImage->GetDimension() > 2 && mitkTestImage->GetDimension(2) == 1 )
177 mitk::ImageSliceSelector::Pointer sliceSelector = mitk::ImageSliceSelector::New();
178 sliceSelector->SetInput(mitkTestImage);
179 sliceSelector->SetSliceNr(0);
180 sliceSelector->Update();
181 resultImg = sliceSelector->GetOutput()->Clone();
183 else if(mitkTestImage->GetDimension() < 3)
185 resultImg = mitkTestImage;
203 mitk::ImageToOpenCVImageFilter::Pointer toOCvConverter = mitk::ImageToOpenCVImageFilter::New();
204 toOCvConverter->SetImage(inputForCVMat);
205 cv::Mat cvmatTestImage = toOCvConverter->GetOpenCVMat();
207 MITK_TEST_CONDITION_REQUIRED( !cvmatTestImage.empty(),
"Conversion to cv::Mat successful!");
209 mitk::OpenCVToMitkImageFilter::Pointer toMitkConverter = mitk::OpenCVToMitkImageFilter::New();
210 toMitkConverter->SetOpenCVMat(cvmatTestImage);
211 toMitkConverter->Update();
214 mitk::Image::Pointer result = inputForCVMat->Clone();
215 mitk::ImageReadAccessor resultAcc(toMitkConverter->GetOutput(), toMitkConverter->GetOutput()->GetSliceData());
216 result->SetImportSlice(
const_cast<void*
>(resultAcc.GetData()));
218 if( result->GetPixelType().GetNumberOfComponents() == 1 )
220 MITK_ASSERT_EQUAL( result, inputForCVMat,
"Testing equality of input and output image of cv::Mat conversion" );
222 else if( result->GetPixelType().GetNumberOfComponents() == 3 )
224 MITK_ASSERT_EQUAL( result, inputForCVMat,
"Testing equality of input and output image of cv::Mat conversion" );
228 MITK_WARN <<
"Unhandled number of components used to test equality, please enhance test!";
232 cv::Mat changedcvmatTestImage = cvmatTestImage.clone();
233 if (result->GetPixelType().GetBitsPerComponent() ==
sizeof(
char)*8)
235 changedcvmatTestImage.at<
char>(0,0) = cvmatTestImage.at<
char>(0,0) != 0 ? 0 : 1;
237 else if (result->GetPixelType().GetBitsPerComponent() ==
sizeof(
float)*8)
239 changedcvmatTestImage.at<
float>(0,0) = cvmatTestImage.at<
float>(0,0) != 0 ? 0 : 1;
242 toMitkConverter->SetOpenCVMat(changedcvmatTestImage);
243 toMitkConverter->Update();
245 MITK_TEST_NOT_EQUAL(toMitkConverter->GetOutput(), inputForCVMat,
"Converted image must not be the same as before.");