15 #ifndef __IPSDKUNITTESTTOOLS_IMGCOMPARISON_H__ 16 #define __IPSDKUNITTESTTOOLS_IMGCOMPARISON_H__ 18 #include <IPSDKImage/Image/BaseImage.h> 19 #include <IPSDKIPL/IPSDKIPLUtility/Processor/CompareImg/CompareImg.h> 21 #include <boost/format.hpp> 26 inline std::string convertPixelPositionToString(
27 const ipsdk::imaproc::attr::PixelPosition& pixPos,
30 std::string str = (boost::format(
"x=%d, y=%d")
31 % pixPos.getValue<imaproc::attr::PixelPosition::X>()
32 % pixPos.getValue<imaproc::attr::PixelPosition::Y>()).str();
34 str += (boost::format(
", z=%d") % pixPos.getValue<imaproc::attr::PixelPosition::Z>()).str();
36 str += (boost::format(
", c=%d") % pixPos.getValue<imaproc::attr::PixelPosition::C>()).str();
38 str += (boost::format(
", t=%d") % pixPos.getValue<imaproc::attr::PixelPosition::T>()).str();
42 inline std::string convertImgComparisonTolToString(
const imaproc::attr::ImgComparisonTolerance& tol)
44 const imaproc::attr::eImgComparisonToleranceType& tolType =
45 tol.getValue<imaproc::attr::ImgComparisonTolerance::ToleranceType>();
46 switch (tolType.value()) {
47 case imaproc::attr::eImgComparisonToleranceType::eICTT_None:
48 return std::string(
"");
49 case imaproc::attr::eImgComparisonToleranceType::eICTT_Absolute:
50 return (boost::format(
" with absolute tolerance=%e") % tol.getValue<imaproc::attr::ImgComparisonTolerance::AbsTol>()).str();
51 case imaproc::attr::eImgComparisonToleranceType::eICTT_Relative:
52 return (boost::format(
" with relative tolerance=%e") % tol.getValue<imaproc::attr::ImgComparisonTolerance::RelTol>()).str();
53 case imaproc::attr::eImgComparisonToleranceType::eICTT_AbsoluteOrRelative:
54 return (boost::format(
" with tolerance[absolute=%e, relative=%e]") % tol.getValue<imaproc::attr::ImgComparisonTolerance::AbsTol>() % tol.getValue<imaproc::attr::ImgComparisonTolerance::RelTol>()).str();
56 return std::string(
"with unknown tolerance");
60 inline BoolResult convertImgComparisonResToBoolResult(
63 const std::string& strPrefix,
64 const std::string& strImg1VarName,
65 const std::string& strImg2VarName)
67 const ipsdk::imaproc::attr::CompareResultPtr pRes =
68 ipsdk::imaproc::util::compareImg(pImg1, pImg2);
70 if (pRes->getValue<ipsdk::imaproc::attr::CompareResult::BEqual>() ==
true)
71 return BoolResult(
true, (boost::format(
"%s (for comparison of images %s and %s)")
74 % strImg2VarName).str());
76 return BoolResult(
false, (boost::format(
"%s ([value1=%e not equals value2=%e at (%s)] for comparison of images %s and %s)")
78 % pRes->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix1Value>()
79 % pRes->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix2Value>()
80 % convertPixelPositionToString(pRes->getNode<imaproc::attr::CompareResult::OutOfTolPixPosition>(), pImg1)
82 % strImg2VarName).str());
85 inline BoolResult convertImgComparison1Or2ResToBoolResult(
89 const std::string& strPrefix,
90 const std::string& strImgVarName,
91 const std::string& strImgRef1VarName,
92 const std::string& strImgRef2VarName)
94 const ipsdk::imaproc::attr::CompareResultPtr pRes1 =
95 ipsdk::imaproc::util::compareImg(pImg, pImgRef1);
97 const ipsdk::imaproc::attr::CompareResultPtr pRes2 =
98 ipsdk::imaproc::util::compareImg(pImg, pImgRef2);
100 if (pRes1->getValue<ipsdk::imaproc::attr::CompareResult::BEqual>() ==
true)
101 return BoolResult(
true, (boost::format(
"%s (for comparison of images %s and %s)")
104 % strImgRef1VarName).str());
105 else if(pRes2->getValue<ipsdk::imaproc::attr::CompareResult::BEqual>() ==
true)
106 return BoolResult(
true, (boost::format(
"%s (for comparison of images %s and %s)")
109 % strImgRef2VarName).str());
111 return BoolResult(
false, (boost::format(
"%s ([value1=%e not equals value2=%e at (%s)] for comparison of images %s and %s and [value1=%e not equals value2=%e at(%s)] for comparison of images %s and %s)")
113 % pRes1->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix1Value>()
114 % pRes1->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix2Value>()
115 % convertPixelPositionToString(pRes1->getNode<imaproc::attr::CompareResult::OutOfTolPixPosition>(), pImg)
118 % pRes2->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix1Value>()
119 % pRes2->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix2Value>()
120 % convertPixelPositionToString(pRes2->getNode<imaproc::attr::CompareResult::OutOfTolPixPosition>(), pImg)
126 inline BoolResult convertImgComparisonResToBoolResult(
129 const imaproc::attr::ImgComparisonToleranceConstPtr& pTol,
130 const std::string& strPrefix,
131 const std::string& strImg1VarName,
132 const std::string& strImg2VarName)
134 ipsdk::imaproc::attr::CompareResultPtr pRes =
135 ipsdk::imaproc::util::compareImg(pImg1, pImg2, pTol);
136 std::string strMsgInsideMacro;
137 if (pRes->getValue<ipsdk::imaproc::attr::CompareResult::BEqual>() ==
true)
138 return BoolResult(
true, (boost::format(
"%s (for comparison of images %s and %s%s)")
142 % convertImgComparisonTolToString(*pTol)).str());
144 return BoolResult(
false, (boost::format(
"%s ([value1=%e not equals value2=%e at (%s)] for comparison of images %s and %s%s)")
146 % pRes->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix1Value>()
147 % pRes->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix2Value>()
148 % convertPixelPositionToString(pRes->getNode<ipsdk::imaproc::attr::CompareResult::OutOfTolPixPosition>(), pImg1)
151 % convertImgComparisonTolToString(*pTol)).str());
154 inline BoolResult convertImgComparison1Or2ResToBoolResult(
158 const imaproc::attr::ImgComparisonToleranceConstPtr& pTol,
159 const std::string& strPrefix,
160 const std::string& strImgVarName,
161 const std::string& strImgRef1VarName,
162 const std::string& strImgRef2VarName)
164 ipsdk::imaproc::attr::CompareResultPtr pRes1 =
165 ipsdk::imaproc::util::compareImg(pImg, pImgRef1, pTol);
166 ipsdk::imaproc::attr::CompareResultPtr pRes2 =
167 ipsdk::imaproc::util::compareImg(pImg, pImgRef2, pTol);
168 std::string strMsgInsideMacro;
169 if (pRes1->getValue<ipsdk::imaproc::attr::CompareResult::BEqual>() ==
true)
170 return BoolResult(
true, (boost::format(
"%s (for comparison of images %s and %s%s)")
174 % convertImgComparisonTolToString(*pTol)).str());
175 else if (pRes2->getValue<ipsdk::imaproc::attr::CompareResult::BEqual>() ==
true)
176 return BoolResult(
true, (boost::format(
"%s (for comparison of images %s and %s%s)")
180 % convertImgComparisonTolToString(*pTol)).str());
182 return BoolResult(
false, (boost::format(
"%s ([value1=%e not equals value2=%e at (%s)] for comparison of images %s and %s and [value1=%e not equals value2=%e at(%s)] for comparison of images %s and %s%s )")
184 % pRes1->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix1Value>()
185 % pRes1->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix2Value>()
186 % convertPixelPositionToString(pRes1->getNode<ipsdk::imaproc::attr::CompareResult::OutOfTolPixPosition>(), pImg)
189 % pRes2->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix1Value>()
190 % pRes2->getValue<ipsdk::imaproc::attr::CompareResult::OutOfTolPix2Value>()
191 % convertPixelPositionToString(pRes2->getNode<ipsdk::imaproc::attr::CompareResult::OutOfTolPixPosition>(), pImg)
194 % convertImgComparisonTolToString(*pTol)).str());
204 #define IPSDK_CHECK_IMG_EQUAL(pImg1, pImg2, strPrefix) \ 206 const ipsdk::BoolResult __ipsdkInternalBRes = convertImgComparisonResToBoolResult(pImg1, pImg2, strPrefix, BOOST_PP_STRINGIZE(pImg1), BOOST_PP_STRINGIZE(pImg2)); \ 207 IPSDK_UT_LOG_TEST_RES(strPrefix, __ipsdkInternalBRes)\ 208 BOOST_CHECK_MESSAGE(__ipsdkInternalBRes, __ipsdkInternalBRes.getMsg()); \ 211 #define IPSDK_CHECK_IMG_EQUAL_TO_1_OR_2(pImg, pImgRef1, pImgRef2, strPrefix) \ 213 const ipsdk::BoolResult __ipsdkInternalBRes = convertImgComparison1Or2ResToBoolResult(pImg, pImgRef1, pImgRef2, strPrefix, BOOST_PP_STRINGIZE(pImg), BOOST_PP_STRINGIZE(pImgRef1), BOOST_PP_STRINGIZE(pImgRef2)); \ 214 IPSDK_UT_LOG_TEST_RES(strPrefix, __ipsdkInternalBRes)\ 215 BOOST_CHECK_MESSAGE(__ipsdkInternalBRes, __ipsdkInternalBRes.getMsg()); \ 218 #define IPSDK_CHECK_IMG_CLOSE(pImg1, pImg2, pTol, strPrefix) \ 220 const ipsdk::BoolResult __ipsdkInternalBRes = convertImgComparisonResToBoolResult(pImg1, pImg2, pTol, strPrefix, BOOST_PP_STRINGIZE(pImg1), BOOST_PP_STRINGIZE(pImg2)); \ 221 IPSDK_UT_LOG_TEST_RES(strPrefix, __ipsdkInternalBRes)\ 222 BOOST_CHECK_MESSAGE(__ipsdkInternalBRes, __ipsdkInternalBRes.getMsg()); \ 225 #define IPSDK_CHECK_IMG_CLOSE_TO_1_OR_2(pImg, pImgRef1, pImgRef2, pTol, strPrefix) \ 227 const ipsdk::BoolResult __ipsdkInternalBRes = convertImgComparison1Or2ResToBoolResult(pImg, pImgRef1, pImgRef2, pTol, strPrefix, BOOST_PP_STRINGIZE(pImg), BOOST_PP_STRINGIZE(pImgRef1), BOOST_PP_STRINGIZE(pImgRef2)); \ 228 IPSDK_UT_LOG_TEST_RES(strPrefix, __ipsdkInternalBRes)\ 229 BOOST_CHECK_MESSAGE(__ipsdkInternalBRes, __ipsdkInternalBRes.getMsg()); \ 232 #endif // __IPSDKUNITTESTTOOLS_IMGCOMPARISON_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
3d geometry
Definition: GeometryComponentTypes.h:36
Predefined macros for unit test management.
sequence of elements temporal geometry
Definition: GeometryComponentTypes.h:80
grey level geometry
Definition: GeometryComponentTypes.h:47
boost::shared_ptr< const BaseImage > ImageConstPtr
Definition: ImageTypes.h:140
ProcessingResult< bool > BoolResult
typedef for boolean results associated to a string description
Definition: ProcessingResultTypes.h:29