]> rtime.felk.cvut.cz Git - opencv.git/commitdiff
added 16s median filter (3x3 and 5x5 only)
authorvp153 <vp153@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Tue, 16 Feb 2010 22:41:51 +0000 (22:41 +0000)
committervp153 <vp153@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Tue, 16 Feb 2010 22:41:51 +0000 (22:41 +0000)
git-svn-id: https://code.ros.org/svn/opencv/trunk@2695 73c94f0f-984f-4a5f-82bc-2d8db8d8ee08

opencv/src/cv/cvsmooth.cpp

index 3baa12d459376ae521a099b8b1cd2ad2cacaf84a..87b74abb7bc9e6f0877be52ddf14dae66b061a95 100644 (file)
@@ -860,6 +860,21 @@ struct MinMax16u
         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
@@ -909,7 +924,23 @@ struct MinMaxVec16u
     }\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
@@ -930,6 +961,7 @@ struct MinMaxVec32f
 \r
 typedef MinMax8u MinMaxVec8u;\r
 typedef MinMax16u MinMaxVec16u;\r
+typedef MinMax16s MinMaxVec16s;\r
 typedef MinMax32f MinMaxVec32f;\r
 \r
 #endif\r
@@ -1182,8 +1214,12 @@ void medianBlur( const Mat& src0, Mat& dst, int ksize )
             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