|
9 | 9 | #include "convert_scale.simd.hpp"
|
10 | 10 | #include "convert_scale.simd_declarations.hpp" // defines CV_CPU_DISPATCH_MODES_ALL=AVX2,...,BASELINE based on CMakeLists.txt content
|
11 | 11 |
|
12 |
| - |
13 | 12 | namespace cv
|
14 | 13 | {
|
15 | 14 |
|
@@ -117,143 +116,4 @@ void convertScaleAbs(InputArray _src, OutputArray _dst, double alpha, double bet
|
117 | 116 | }
|
118 | 117 | }
|
119 | 118 |
|
120 |
| -//================================================================================================== |
121 |
| - |
122 |
| -#ifdef HAVE_OPENCL |
123 |
| - |
124 |
| -static bool ocl_normalize( InputArray _src, InputOutputArray _dst, InputArray _mask, int dtype, |
125 |
| - double scale, double delta ) |
126 |
| -{ |
127 |
| - UMat src = _src.getUMat(); |
128 |
| - |
129 |
| - if( _mask.empty() ) |
130 |
| - src.convertTo( _dst, dtype, scale, delta ); |
131 |
| - else if (src.channels() <= 4) |
132 |
| - { |
133 |
| - const ocl::Device & dev = ocl::Device::getDefault(); |
134 |
| - |
135 |
| - int stype = _src.type(), sdepth = CV_MAT_DEPTH(stype), cn = CV_MAT_CN(stype), |
136 |
| - ddepth = CV_MAT_DEPTH(dtype), wdepth = std::max(CV_32F, std::max(sdepth, ddepth)), |
137 |
| - rowsPerWI = dev.isIntel() ? 4 : 1; |
138 |
| - |
139 |
| - float fscale = static_cast<float>(scale), fdelta = static_cast<float>(delta); |
140 |
| - bool haveScale = std::fabs(scale - 1) > DBL_EPSILON, |
141 |
| - haveZeroScale = !(std::fabs(scale) > DBL_EPSILON), |
142 |
| - haveDelta = std::fabs(delta) > DBL_EPSILON, |
143 |
| - doubleSupport = dev.doubleFPConfig() > 0; |
144 |
| - |
145 |
| - if (!haveScale && !haveDelta && stype == dtype) |
146 |
| - { |
147 |
| - _src.copyTo(_dst, _mask); |
148 |
| - return true; |
149 |
| - } |
150 |
| - if (haveZeroScale) |
151 |
| - { |
152 |
| - _dst.setTo(Scalar(delta), _mask); |
153 |
| - return true; |
154 |
| - } |
155 |
| - |
156 |
| - if ((sdepth == CV_64F || ddepth == CV_64F) && !doubleSupport) |
157 |
| - return false; |
158 |
| - |
159 |
| - char cvt[2][40]; |
160 |
| - String opts = format("-D srcT=%s -D dstT=%s -D convertToWT=%s -D cn=%d -D rowsPerWI=%d" |
161 |
| - " -D convertToDT=%s -D workT=%s%s%s%s -D srcT1=%s -D dstT1=%s", |
162 |
| - ocl::typeToStr(stype), ocl::typeToStr(dtype), |
163 |
| - ocl::convertTypeStr(sdepth, wdepth, cn, cvt[0]), cn, |
164 |
| - rowsPerWI, ocl::convertTypeStr(wdepth, ddepth, cn, cvt[1]), |
165 |
| - ocl::typeToStr(CV_MAKE_TYPE(wdepth, cn)), |
166 |
| - doubleSupport ? " -D DOUBLE_SUPPORT" : "", |
167 |
| - haveScale ? " -D HAVE_SCALE" : "", |
168 |
| - haveDelta ? " -D HAVE_DELTA" : "", |
169 |
| - ocl::typeToStr(sdepth), ocl::typeToStr(ddepth)); |
170 |
| - |
171 |
| - ocl::Kernel k("normalizek", ocl::core::normalize_oclsrc, opts); |
172 |
| - if (k.empty()) |
173 |
| - return false; |
174 |
| - |
175 |
| - UMat mask = _mask.getUMat(), dst = _dst.getUMat(); |
176 |
| - |
177 |
| - ocl::KernelArg srcarg = ocl::KernelArg::ReadOnlyNoSize(src), |
178 |
| - maskarg = ocl::KernelArg::ReadOnlyNoSize(mask), |
179 |
| - dstarg = ocl::KernelArg::ReadWrite(dst); |
180 |
| - |
181 |
| - if (haveScale) |
182 |
| - { |
183 |
| - if (haveDelta) |
184 |
| - k.args(srcarg, maskarg, dstarg, fscale, fdelta); |
185 |
| - else |
186 |
| - k.args(srcarg, maskarg, dstarg, fscale); |
187 |
| - } |
188 |
| - else |
189 |
| - { |
190 |
| - if (haveDelta) |
191 |
| - k.args(srcarg, maskarg, dstarg, fdelta); |
192 |
| - else |
193 |
| - k.args(srcarg, maskarg, dstarg); |
194 |
| - } |
195 |
| - |
196 |
| - size_t globalsize[2] = { (size_t)src.cols, ((size_t)src.rows + rowsPerWI - 1) / rowsPerWI }; |
197 |
| - return k.run(2, globalsize, NULL, false); |
198 |
| - } |
199 |
| - else |
200 |
| - { |
201 |
| - UMat temp; |
202 |
| - src.convertTo( temp, dtype, scale, delta ); |
203 |
| - temp.copyTo( _dst, _mask ); |
204 |
| - } |
205 |
| - |
206 |
| - return true; |
207 |
| -} |
208 |
| - |
209 |
| -#endif |
210 |
| - |
211 |
| -void normalize(InputArray _src, InputOutputArray _dst, double a, double b, |
212 |
| - int norm_type, int rtype, InputArray _mask) |
213 |
| -{ |
214 |
| - CV_INSTRUMENT_REGION(); |
215 |
| - |
216 |
| - double scale = 1, shift = 0; |
217 |
| - int type = _src.type(), depth = CV_MAT_DEPTH(type); |
218 |
| - |
219 |
| - if( rtype < 0 ) |
220 |
| - rtype = _dst.fixedType() ? _dst.depth() : depth; |
221 |
| - |
222 |
| - if( norm_type == CV_MINMAX ) |
223 |
| - { |
224 |
| - double smin = 0, smax = 0; |
225 |
| - double dmin = MIN( a, b ), dmax = MAX( a, b ); |
226 |
| - minMaxIdx( _src, &smin, &smax, 0, 0, _mask ); |
227 |
| - scale = (dmax - dmin)*(smax - smin > DBL_EPSILON ? 1./(smax - smin) : 0); |
228 |
| - if( rtype == CV_32F ) |
229 |
| - { |
230 |
| - scale = (float)scale; |
231 |
| - shift = (float)dmin - (float)(smin*scale); |
232 |
| - } |
233 |
| - else |
234 |
| - shift = dmin - smin*scale; |
235 |
| - } |
236 |
| - else if( norm_type == CV_L2 || norm_type == CV_L1 || norm_type == CV_C ) |
237 |
| - { |
238 |
| - scale = norm( _src, norm_type, _mask ); |
239 |
| - scale = scale > DBL_EPSILON ? a/scale : 0.; |
240 |
| - shift = 0; |
241 |
| - } |
242 |
| - else |
243 |
| - CV_Error( CV_StsBadArg, "Unknown/unsupported norm type" ); |
244 |
| - |
245 |
| - CV_OCL_RUN(_dst.isUMat(), |
246 |
| - ocl_normalize(_src, _dst, _mask, rtype, scale, shift)) |
247 |
| - |
248 |
| - Mat src = _src.getMat(); |
249 |
| - if( _mask.empty() ) |
250 |
| - src.convertTo( _dst, rtype, scale, shift ); |
251 |
| - else |
252 |
| - { |
253 |
| - Mat temp; |
254 |
| - src.convertTo( temp, rtype, scale, shift ); |
255 |
| - temp.copyTo( _dst, _mask ); |
256 |
| - } |
257 |
| -} |
258 |
| - |
259 | 119 | } // namespace
|
0 commit comments