b = std::max(b, t);\r
}\r
};\r
+ \r
+struct MinMax16s\r
+{\r
+ typedef short value_type;\r
+ typedef int arg_type;\r
+ enum { SIZE = 1 };\r
+ arg_type load(const short* ptr) { return *ptr; }\r
+ void store(short* ptr, arg_type val) { *ptr = (short)val; }\r
+ void operator()(arg_type& a, arg_type& b) const\r
+ {\r
+ arg_type t = a;\r
+ a = std::min(a, b);\r
+ b = std::max(b, t);\r
+ }\r
+};\r
\r
struct MinMax32f\r
{\r
}\r
};\r
\r
+ \r
+struct MinMaxVec16s\r
+{\r
+ typedef short value_type;\r
+ typedef __m128i arg_type;\r
+ enum { SIZE = 8 };\r
+ arg_type load(const short* ptr) { return _cv_loadu_si128((const __m128i*)ptr); }\r
+ void store(short* ptr, arg_type val) { _mm_storeu_si128((__m128i*)ptr, val); }\r
+ void operator()(arg_type& a, arg_type& b) const\r
+ {\r
+ arg_type t = a;\r
+ a = _mm_min_epi16(a, b);\r
+ b = _mm_max_epi16(b, t);\r
+ }\r
+}; \r
\r
+ \r
struct MinMaxVec32f\r
{\r
typedef float value_type;\r
\r
typedef MinMax8u MinMaxVec8u;\r
typedef MinMax16u MinMaxVec16u;\r
+typedef MinMax16s MinMaxVec16s;\r
typedef MinMax32f MinMaxVec32f;\r
\r
#endif\r
medianBlur_SortNet<MinMax8u, MinMaxVec8u>( src, dst, ksize );\r
else if( src.depth() == CV_16U )\r
medianBlur_SortNet<MinMax16u, MinMaxVec16u>( src, dst, ksize );\r
+ else if( src.depth() == CV_16S )\r
+ medianBlur_SortNet<MinMax16s, MinMaxVec16s>( src, dst, ksize );\r
else if( src.depth() == CV_32F )\r
medianBlur_SortNet<MinMax32f, MinMaxVec32f>( src, dst, ksize );\r
+ else\r
+ CV_Error(CV_StsUnsupportedFormat, "");\r
return;\r
}\r
\r