From: Alexander Karsakov Date: Fri, 4 Apr 2014 11:07:17 +0000 (+0400) Subject: Added ippiThreshold to cv::threshold X-Git-Tag: submit/tizen_ivi/20141117.190038~2^2~489^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=35494f81ef594900548c88723b2074af04d461e9;p=profile%2Fivi%2Fopencv.git Added ippiThreshold to cv::threshold --- diff --git a/modules/imgproc/src/thresh.cpp b/modules/imgproc/src/thresh.cpp index 7fd0b23..440f15a 100644 --- a/modules/imgproc/src/thresh.cpp +++ b/modules/imgproc/src/thresh.cpp @@ -53,11 +53,14 @@ thresh_8u( const Mat& _src, Mat& _dst, uchar thresh, uchar maxval, int type ) uchar tab[256]; Size roi = _src.size(); roi.width *= _src.channels(); + size_t src_step = _src.step; + size_t dst_step = _dst.step; if( _src.isContinuous() && _dst.isContinuous() ) { roi.width *= roi.height; roi.height = 1; + src_step = dst_step = roi.width; } #ifdef HAVE_TEGRA_OPTIMIZATION @@ -65,6 +68,25 @@ thresh_8u( const Mat& _src, Mat& _dst, uchar thresh, uchar maxval, int type ) return; #endif +#ifdef HAVE_IPP + IppiSize sz = { roi.width, roi.height }; + switch( type ) + { + case THRESH_TRUNC: + if (0 <= ippiThreshold_GT_8u_C1R(_src.data, (int)src_step, _dst.data, (int)dst_step, sz, thresh)) + return; + break; + case THRESH_TOZERO: + if (0 <= ippiThreshold_LTVal_8u_C1R(_src.data, (int)src_step, _dst.data, (int)dst_step, sz, thresh+1, 0)) + return; + break; + case THRESH_TOZERO_INV: + if (0 <= ippiThreshold_GTVal_8u_C1R(_src.data, (int)src_step, _dst.data, (int)dst_step, sz, thresh, 0)) + return; + break; + } +#endif + switch( type ) { case THRESH_BINARY: @@ -112,8 +134,8 @@ thresh_8u( const Mat& _src, Mat& _dst, uchar thresh, uchar maxval, int type ) for( i = 0; i < roi.height; i++ ) { - const uchar* src = (const uchar*)(_src.data + _src.step*i); - uchar* dst = (uchar*)(_dst.data + _dst.step*i); + const uchar* src = (const uchar*)(_src.data + src_step*i); + uchar* dst = (uchar*)(_dst.data + dst_step*i); switch( type ) { @@ -231,8 +253,8 @@ thresh_8u( const Mat& _src, Mat& _dst, uchar thresh, uchar maxval, int type ) { for( i = 0; i < roi.height; i++ ) { - const uchar* src = (const uchar*)(_src.data + _src.step*i); - uchar* dst = (uchar*)(_dst.data + _dst.step*i); + const uchar* src = (const uchar*)(_src.data + src_step*i); + uchar* dst = (uchar*)(_dst.data + dst_step*i); j = j_scalar; #if CV_ENABLE_UNROLLED for( ; j <= roi.width - 4; j += 4 ) @@ -276,6 +298,7 @@ thresh_16s( const Mat& _src, Mat& _dst, short thresh, short maxval, int type ) { roi.width *= roi.height; roi.height = 1; + src_step = dst_step = roi.width; } #ifdef HAVE_TEGRA_OPTIMIZATION @@ -283,6 +306,25 @@ thresh_16s( const Mat& _src, Mat& _dst, short thresh, short maxval, int type ) return; #endif +#ifdef HAVE_IPP + IppiSize sz = { roi.width, roi.height }; + switch( type ) + { + case THRESH_TRUNC: + if (0 <= ippiThreshold_GT_16s_C1R(src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh)) + return; + break; + case THRESH_TOZERO: + if (0 <= ippiThreshold_LTVal_16s_C1R(src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh+1, 0)) + return; + break; + case THRESH_TOZERO_INV: + if (0 <= ippiThreshold_GTVal_16s_C1R(src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh, 0)) + return; + break; + } +#endif + switch( type ) { case THRESH_BINARY: @@ -455,6 +497,25 @@ thresh_32f( const Mat& _src, Mat& _dst, float thresh, float maxval, int type ) return; #endif +#ifdef HAVE_IPP + IppiSize sz = { roi.width, roi.height }; + switch( type ) + { + case THRESH_TRUNC: + if (0 <= ippiThreshold_GT_32f_C1R(src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh)) + return; + break; + case THRESH_TOZERO: + if (0 <= ippiThreshold_LTVal_32f_C1R(src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh+FLT_EPSILON, 0)) + return; + break; + case THRESH_TOZERO_INV: + if (0 <= ippiThreshold_GTVal_32f_C1R(src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh, 0)) + return; + break; + } +#endif + switch( type ) { case THRESH_BINARY: