# ----------------------------------------------------------------------------\r
\r
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)\r
+\r
+\r
# Add these standard paths to the search paths for FIND_LIBRARY\r
# to find libraries from these locations first\r
if(UNIX)\r
- set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /lib /usr/lib)\r
+ set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /lib /usr/lib)\r
endif()\r
+\r
+\r
# it _must_ go before PROJECT(OpenCV) in order to work\r
if (NOT CMAKE_INSTALL_PREFIX)\r
- if (WIN32)\r
+ if(WIN32)\r
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE INTERNAL "" FORCE)\r
elseif()\r
set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "" FORCE)\r
endif()\r
endif()\r
\r
-SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")\r
-SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)\r
+set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")\r
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)\r
\r
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)\r
set(CMAKE_C_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)\r
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)\r
set(CMAKE_VERBOSE OFF CACHE BOOL "Verbose mode")\r
\r
-if (CMAKE_VERBOSE)\r
- set (CMAKE_VERBOSE_MAKEFILE 1)\r
+if(CMAKE_VERBOSE)\r
+ set(CMAKE_VERBOSE_MAKEFILE 1)\r
endif()\r
\r
+\r
project(OpenCV)\r
\r
+\r
cmake_minimum_required(VERSION 2.4)\r
\r
+\r
if(MSVC)\r
set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)\r
endif()\r
#set(CMAKE_CXX_COMPILER "/opt/BullseyeCoverage/bin/g++")\r
#set(CMAKE_CXX_COMPILER_INIT "/opt/BullseyeCoverage/bin/gcc")\r
\r
+\r
# --------------------------------------------------------------\r
# Indicate CMake 2.7 and above that we don't want to mix relative\r
# and absolute paths in linker lib lists.\r
cmake_policy(SET CMP0003 NEW)\r
endif()\r
\r
+\r
# ----------------------------------------------------------------------------\r
# Current version number:\r
# ----------------------------------------------------------------------------\r
\r
# ----------------------------------------------------------------------------\r
# Build static or dynamic libs?\r
-# ----------------------------------------------------------------------------\r
# Default: dynamic libraries:\r
-SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)")\r
-IF(BUILD_SHARED_LIBS)\r
- SET(OPENCV_BUILD_SHARED_LIB 1) # For cvconfig.h, etc.\r
-ELSE(BUILD_SHARED_LIBS)\r
- SET(OPENCV_BUILD_SHARED_LIB 0)\r
-ENDIF(BUILD_SHARED_LIBS)\r
+# ----------------------------------------------------------------------------\r
+set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)")\r
+\r
+if(BUILD_SHARED_LIBS)\r
+ set(OPENCV_BUILD_SHARED_LIB 1) # For cvconfig.h, etc.\r
+else(BUILD_SHARED_LIBS)\r
+ set(OPENCV_BUILD_SHARED_LIB 0)\r
+endif(BUILD_SHARED_LIBS)\r
+\r
\r
# ----------------------------------------------------------------------------\r
# Variables for cvconfig.h.cmake\r
set(PACKAGE_TARNAME "${PACKAGE}")\r
set(PACKAGE_VERSION "${OPENCV_VERSION}")\r
\r
+\r
# ----------------------------------------------------------------------------\r
# Autodetect if we are in a SVN repository\r
# ----------------------------------------------------------------------------\r
set(OPENCV_SVNVERSION "")\r
endif()\r
\r
+\r
# ----------------------------------------------------------------------------\r
# Detect GNU version:\r
# ----------------------------------------------------------------------------\r
\r
endif()\r
\r
+\r
# ----------------------------------------------------------------------------\r
# Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ):\r
# see include/opencv/cxtypes.h file for related ICC & CV_ICC defines.\r
endif()\r
endif()\r
\r
+\r
# ----------------------------------------------------------------------------\r
# CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..\r
# ----------------------------------------------------------------------------\r
set(WITH_QUICKTIME OFF CACHE BOOL "Use QuickTime for Video I/O insted of QTKit")\r
endif()\r
\r
-set(WITH_TBB OFF CACHE BOOL "Include TBB support")\r
+set(WITH_TBB OFF CACHE BOOL "Include Intel TBB support")\r
+set(WITH_IPP OFF CACHE BOOL "Include Intel IPP support")\r
set(WITH_EIGEN2 ON CACHE BOOL "Include Eigen2/Eigen3 support")\r
set(WITH_CUDA OFF CACHE BOOL "Include NVidia Cuda Runtime support")\r
\r
if(WIN32)\r
- set(WITH_VIDEOINPUT ON CACHE BOOL "Enable VideoInput support")\r
+ set(WITH_VIDEOINPUT ON CACHE BOOL "Enable VideoInput support")\r
endif()\r
\r
+\r
# ===================================================\r
# Macros that checks if module have been installed.\r
# After it adds module to build and define\r
find_package (OpenGL QUIET)\r
\r
\r
- #if (NOT WIN32)\r
- if (WITH_QT_OPENGL)\r
- if (QT_QTOPENGL_FOUND AND OPENGL_FOUND)\r
- set(HAVE_QT_OPENGL 1)\r
- add_definitions(-DHAVE_QT_OPENGL)\r
- #link_directories("${OPENGL_LIBRARIES}")\r
- set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})\r
- endif()\r
- endif()\r
- #endif()\r
+ #if (NOT WIN32)\r
+ if (WITH_QT_OPENGL)\r
+ if (QT_QTOPENGL_FOUND AND OPENGL_FOUND)\r
+ set(HAVE_QT_OPENGL 1)\r
+ add_definitions(-DHAVE_QT_OPENGL)\r
+ #link_directories("${OPENGL_LIBRARIES}")\r
+ set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})\r
+ endif()\r
+ endif()\r
+ #endif()\r
\r
endif()\r
endif()\r
elseif(MSVC90)\r
set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc9")\r
endif()\r
+ elseif(MSVC10)\r
+ set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc10")\r
+ endif()\r
set(TBB_LIB_DIR "${_TBB_LIB_PATH}" CACHE PATH "Full path of TBB library directory")\r
link_directories("${TBB_LIB_DIR}")\r
endif()\r
endif()\r
endif()\r
endif()\r
+#endif(WITH_TBB)\r
+\r
+\r
+############################ Intel IPP #############################\r
+set(IPP_FOUND)\r
+\r
+if(WITH_IPP)\r
+ include(OpenCVFindIPP.cmake)\r
+endif()\r
+\r
+if(IPP_FOUND)\r
+ add_definitions(-DHAVE_IPP)\r
+ include_directories(${IPP_INCLUDE_DIRS})\r
+ link_directories(${IPP_LIBRARY_DIRS})\r
+ set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES})\r
endif()\r
\r
+\r
############################### CUDA ################################\r
\r
if (WITH_CUDA)\r
- find_package(CUDA 3.2)\r
- if (CUDA_FOUND) \r
- set(HAVE_CUDA 1)\r
- message(STATUS "CUDA detected: " ${CUDA_VERSION})\r
- \r
+ find_package(CUDA 3.2)\r
+ if (CUDA_FOUND)\r
+ set(HAVE_CUDA 1)\r
+ message(STATUS "CUDA detected: " ${CUDA_VERSION})\r
+\r
set(CUDA_COMPUTE_CAPABILITIES " 1.1 1.2 1.3 2.0 " CACHE STRING "Add or remove compute capability")\r
- set(CUDA_NVCC_FLAGS_ARCH ${CUDA_COMPUTE_CAPABILITIES})\r
-\r
- set(CUDA_NVCC_FLAGS_NUM "")\r
-\r
- while(NOT ${CUDA_NVCC_FLAGS_ARCH} STREQUAL "")\r
- string(REGEX MATCH "[0-9]+.[0-9]+" RESULT_NUM ${CUDA_NVCC_FLAGS_ARCH})\r
- string(REGEX MATCHALL "[0-9]" RESULT_STR ${RESULT_NUM})\r
- string(REGEX REPLACE ";" "\ " RESULT ${RESULT_STR})\r
- list(APPEND CUDA_NVCC_FLAGS_NUM ${RESULT})\r
- string(REGEX REPLACE "${RESULT_NUM}" "\ " CUDA_NVCC_FLAGS_ARCH_STR ${CUDA_NVCC_FLAGS_ARCH})\r
- string(STRIP ${CUDA_NVCC_FLAGS_ARCH_STR} CUDA_NVCC_FLAGS_ARCH)\r
- endwhile()\r
-\r
- set (OpenCV_CUDA_CC "")\r
- set (loop_var "")\r
- foreach( loop_var IN LISTS CUDA_NVCC_FLAGS_NUM)\r
- set (CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_${loop_var},code=sm_${loop_var})\r
- set (OpenCV_CUDA_CC ${OpenCV_CUDA_CC} -gencode arch=compute_${loop_var},code=sm_${loop_var})\r
- endforeach()\r
-\r
- ### set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${OpenCV_COMPUTE_CAPABILITIES})\r
- endif()\r
+ set(CUDA_NVCC_FLAGS_ARCH ${CUDA_COMPUTE_CAPABILITIES})\r
+\r
+ set(CUDA_NVCC_FLAGS_NUM "")\r
+\r
+ while(NOT ${CUDA_NVCC_FLAGS_ARCH} STREQUAL "")\r
+ string(REGEX MATCH "[0-9]+.[0-9]+" RESULT_NUM ${CUDA_NVCC_FLAGS_ARCH})\r
+ string(REGEX MATCHALL "[0-9]" RESULT_STR ${RESULT_NUM})\r
+ string(REGEX REPLACE ";" "\ " RESULT ${RESULT_STR})\r
+ list(APPEND CUDA_NVCC_FLAGS_NUM ${RESULT})\r
+ string(REGEX REPLACE "${RESULT_NUM}" "\ " CUDA_NVCC_FLAGS_ARCH_STR ${CUDA_NVCC_FLAGS_ARCH})\r
+ string(STRIP ${CUDA_NVCC_FLAGS_ARCH_STR} CUDA_NVCC_FLAGS_ARCH)\r
+ endwhile()\r
+\r
+ set (OpenCV_CUDA_CC "")\r
+ set (loop_var "")\r
+ foreach( loop_var IN LISTS CUDA_NVCC_FLAGS_NUM)\r
+ set (CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_${loop_var},code=sm_${loop_var})\r
+ set (OpenCV_CUDA_CC ${OpenCV_CUDA_CC} -gencode arch=compute_${loop_var},code=sm_${loop_var})\r
+ endforeach()\r
+\r
+ ### set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${OpenCV_COMPUTE_CAPABILITIES})\r
+ endif()\r
endif()\r
\r
+\r
############################### VideoInput ################################\r
\r
if (WIN32 AND WITH_VIDEOINPUT)\r
- if(CMAKE_CXX_COMPILER MATCHES "dw2")\r
- else()\r
- if(NOT MINGW64)\r
- set(HAVE_VIDEOINPUT 1)\r
- endif()\r
- endif()\r
+ if(CMAKE_CXX_COMPILER MATCHES "dw2")\r
+ else()\r
+ if(NOT MINGW64)\r
+ set(HAVE_VIDEOINPUT 1)\r
+ endif()\r
+ endif()\r
endif()\r
\r
+\r
############################## Eigen2 ##############################\r
\r
if(WITH_EIGEN2)\r
endif()\r
endif()\r
\r
-############################### IPP ################################\r
-set(IPP_FOUND)\r
-set(OPENCV_LOADER_PATH)\r
-\r
-if(UNIX)\r
-if(APPLE)\r
- set(OPENCV_LOADER_PATH DYLD_LIBRARY_PATH)\r
-else()\r
- set(OPENCV_LOADER_PATH LD_LIBRARY_PATH)\r
-endif()\r
-endif()\r
-\r
-foreach(v "6.1" "6.0" "5.3" "5.2" "5.1")\r
- if(NOT IPP_FOUND)\r
- if(WIN32)\r
- find_path(IPP_PATH "ippi-${v}.dll"\r
- PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}\r
- DOC "The path to IPP dynamic libraries")\r
- if(NOT IPP_PATH)\r
- find_path(IPP_PATH "ippiem64t-${v}.dll"\r
- PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}\r
- DOC "The path to IPP dynamic libraries")\r
- endif()\r
- endif()\r
- if(UNIX)\r
- find_path(IPP_PATH "libippi${CMAKE_SHARED_LIBRARY_SUFFIX}.${v}"\r
- PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_SYSTEM_LIBRARY_PATH} ENV ${OPENCV_LOADER_PATH}\r
- DOC "The path to IPP dynamic libraries")\r
- if(NOT IPP_PATH)\r
- find_path(IPP_PATH "libippiem64t${CMAKE_SHARED_LIBRARY_SUFFIX}.${v}"\r
- PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_SYSTEM_LIBRARY_PATH} ENV ${OPENCV_LOADER_PATH}\r
- DOC "The path to IPP dynamic libraries")\r
- endif()\r
- endif()\r
- if(IPP_PATH)\r
- file(GLOB IPP_HDRS "${IPP_PATH}/../include")\r
- if(IPP_HDRS)\r
- set(IPP_FOUND TRUE)\r
- endif()\r
- endif()\r
- endif()\r
-endforeach()\r
-\r
-message(STATUS "IPP detected: ${IPP_FOUND}")\r
-\r
-if(WIN32 AND NOT MSVC)\r
- set(IPP_FOUND)\r
-endif()\r
-\r
-set(USE_IPP ${IPP_FOUND} CACHE BOOL "Use IPP when available")\r
-\r
-if(IPP_FOUND AND USE_IPP)\r
- add_definitions(-DHAVE_IPP)\r
- include_directories("${IPP_PATH}/../include")\r
- link_directories("${IPP_PATH}/../lib")\r
-\r
- file(GLOB em64t_files "${IPP_PATH}/../lib/*em64t*")\r
- set(IPP_ARCH)\r
- if(em64t_files)\r
- set(IPP_ARCH "em64t")\r
- endif()\r
-\r
- set(A ${CMAKE_STATIC_LIBRARY_PREFIX})\r
- set(B ${IPP_ARCH}${CMAKE_STATIC_LIBRARY_SUFFIX})\r
- if(WIN32)\r
- set(L l)\r
- else()\r
- set(L)\r
- endif()\r
- set(IPP_LIBS ${A}ippsmerged${B} ${A}ippsemerged${B}\r
- ${A}ippimerged${B} ${A}ippiemerged${B}\r
- ${A}ippvmmerged${B} ${A}ippvmemerged${B}\r
- ${A}ippccmerged${B} ${A}ippccemerged${B}\r
- ${A}ippcvmerged${B} ${A}ippcvemerged${B}\r
- ${A}ippcore${IPP_ARCH}${L}${CMAKE_STATIC_LIBRARY_SUFFIX})\r
-endif()\r
\r
################## Extra HighGUI libs on Windows ###################\r
\r
################## LATEX ##################\r
set(BUILD_LATEX_DOCS OFF CACHE BOOL "Build LaTeX OpenCV Documentation")\r
\r
+\r
################### DOXYGEN ###############\r
\r
find_package(Doxygen)\r
set(BUILD_DOXYGEN_DOCS ON CACHE BOOL "Generate HTML docs using Doxygen")\r
endif()\r
\r
+\r
# ----------------------------------------------------------------------------\r
# UPDATE CONFIG FILES & SCRIPTS:\r
#\r
message(STATUS "Parsing 'cvconfig.h.cmake'")\r
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h")\r
\r
+\r
# ---------------------------------------------------------------------------\r
# The C+//0 include & link directories:\r
# ---------------------------------------------------------------------------\r
"${CMAKE_CURRENT_SOURCE_DIR}/include/opencv"\r
)\r
\r
+\r
# ----------------------------------------------------------------------------\r
# Set the maximum level of warnings:\r
# ----------------------------------------------------------------------------\r
string(REPLACE "/EHsc" "/EHsc-" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")\r
string(REPLACE "/EHsc" "/EHsc-" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")\r
\r
- string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")\r
- string(REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")\r
+ string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")\r
+ string(REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")\r
endif()\r
\r
if("${CMAKE_CONFIGURE_LDFLAGS}")\r
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")\r
endif("${CMAKE_CONFIGURE_LDFLAGS}")\r
\r
+\r
# ----------------------------------------------------------------------------\r
# PROCESS SUBDIRECTORIES:\r
# ----------------------------------------------------------------------------\r
set(OPENCV_DOC_INSTALL_PATH share/opencv/doc)\r
endif()\r
\r
+\r
# --------------------------------------------------------------------------------------------\r
# Installation for CMake Module: OpenCVConfig.cmake\r
# Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install"\r
\r
\r
# ----------------------------------------------------------------------------\r
-# Sumary:\r
+# Summary:\r
# ----------------------------------------------------------------------------\r
message(STATUS "")\r
message(STATUS "General configuration for opencv ${OPENCV_VERSION} =====================================")\r
message(STATUS " Python numpy: NO (Python interface will not cover OpenCV 2.x API)")\r
endif()\r
\r
-if(IPP_FOUND AND USE_IPP)\r
-message(STATUS " Use IPP: ${IPP_PATH}")\r
+if(WITH_IPP AND IPP_FOUND)\r
+message(STATUS " Use IPP: ${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")\r
+message(STATUS " at: ${IPP_ROOT_DIR}")\r
+elseif(WITH_IPP AND NOT IPP_FOUND)\r
+message(STATUS " Use IPP: IPP not found")\r
else()\r
message(STATUS " Use IPP: NO")\r
endif()\r
if (HAVE_CUDA)\r
message(STATUS " Use Cuda: YES")\r
else()\r
-message(STATUS " Use Cuda: No")\r
+message(STATUS " Use Cuda: NO")\r
endif()\r
\r
if(HAVE_EIGEN2)\r
#include "precomp.hpp"
#include <iterator>
-
+#ifdef HAVE_IPP
+#include "ipp.h"
+#endif
/****************************************************************************************\
The code below is implementation of HOG (Histogram-of-Oriented Gradients)
descriptor and object detection, introduced by Navneet Dalal and Bill Triggs.
int _nbins = nbins;
float angleScale = (float)(_nbins/CV_PI);
+#ifdef HAVE_IPP
+ Mat lutimg(img.rows,img.cols,CV_MAKETYPE(CV_32F,cn));
+ Mat hidxs(1, width, CV_32F);
+ Ipp32f *pHidxs = (Ipp32f*)hidxs.data;
+ Ipp32f *pAngles = (Ipp32f*)Angle.data;
+
+ IppiSize roiSize;
+ roiSize.width = img.cols;
+ roiSize.height = img.rows;
+
+ for( y = 0; y < roiSize.height; y++ )
+ {
+ const uchar* imgPtr = img.data + y*img.step;
+ float* imglutPtr = (float*)(lutimg.data + y*lutimg.step);
+ for( x = 0; x < roiSize.width*cn; x++ )
+ {
+ imglutPtr[x] = lut[imgPtr[x]];
+ }
+ }
+
+#endif
for( y = 0; y < gradsize.height; y++ )
{
+#ifdef HAVE_IPP
+ const float* imgPtr = (float*)(lutimg.data + lutimg.step*ymap[y]);
+ const float* prevPtr = (float*)(lutimg.data + lutimg.step*ymap[y-1]);
+ const float* nextPtr = (float*)(lutimg.data + lutimg.step*ymap[y+1]);
+#else
const uchar* imgPtr = img.data + img.step*ymap[y];
const uchar* prevPtr = img.data + img.step*ymap[y-1];
const uchar* nextPtr = img.data + img.step*ymap[y+1];
+#endif
float* gradPtr = (float*)grad.ptr(y);
uchar* qanglePtr = (uchar*)qangle.ptr(y);
for( x = 0; x < width; x++ )
{
int x1 = xmap[x];
+#ifdef HAVE_IPP
+ dbuf[x] = (float)(imgPtr[xmap[x+1]] - imgPtr[xmap[x-1]]);
+ dbuf[width + x] = (float)(nextPtr[x1] - prevPtr[x1]);
+#else
dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);
dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);
+#endif
}
}
else
for( x = 0; x < width; x++ )
{
int x1 = xmap[x]*3;
+ float dx0, dy0, dx, dy, mag0, mag;
+#ifdef HAVE_IPP
+ const float* p2 = imgPtr + xmap[x+1]*3;
+ const float* p0 = imgPtr + xmap[x-1]*3;
+
+ dx0 = p2[2] - p0[2];
+ dy0 = nextPtr[x1+2] - prevPtr[x1+2];
+ mag0 = dx0*dx0 + dy0*dy0;
+
+ dx = p2[1] - p0[1];
+ dy = nextPtr[x1+1] - prevPtr[x1+1];
+ mag = dx*dx + dy*dy;
+
+ if( mag0 < mag )
+ {
+ dx0 = dx;
+ dy0 = dy;
+ mag0 = mag;
+ }
+
+ dx = p2[0] - p0[0];
+ dy = nextPtr[x1] - prevPtr[x1];
+ mag = dx*dx + dy*dy;
+#else
const uchar* p2 = imgPtr + xmap[x+1]*3;
const uchar* p0 = imgPtr + xmap[x-1]*3;
- float dx0, dy0, dx, dy, mag0, mag;
dx0 = lut[p2[2]] - lut[p0[2]];
dy0 = lut[nextPtr[x1+2]] - lut[prevPtr[x1+2]];
dx = lut[p2[0]] - lut[p0[0]];
dy = lut[nextPtr[x1]] - lut[prevPtr[x1]];
mag = dx*dx + dy*dy;
-
+ #endif
if( mag0 < mag )
{
dx0 = dx;
dbuf[x+width] = dy0;
}
}
-
- cartToPolar( Dx, Dy, Mag, Angle, false );
+#ifdef HAVE_IPP
+ ippsCartToPolar_32f((const Ipp32f*)Dx.data, (const Ipp32f*)Dy.data, (Ipp32f*)Mag.data, pAngles, width);
+ for( x = 0; x < width; x++ )
+ {
+ if(pAngles[x] < 0.f) pAngles[x]+=(Ipp32f)(CV_PI*2.);
+ }
+
+
+ ippsNormalize_32f(pAngles, pAngles, width, 0.5f/angleScale, 1.f/angleScale);
+ ippsFloor_32f(pAngles,(Ipp32f*)hidxs.data,width);
+ ippsSub_32f_I((Ipp32f*)hidxs.data,pAngles,width);
+ ippsMul_32f_I((Ipp32f*)Mag.data,pAngles,width);
+ ippsSub_32f_I(pAngles,(Ipp32f*)Mag.data,width);
+ ippsRealToCplx_32f((Ipp32f*)Mag.data,pAngles,(Ipp32fc*)gradPtr,width);
+#else
+ cartToPolar( Dx, Dy, Mag, Angle, false );
+#endif
for( x = 0; x < width; x++ )
{
+#ifdef HAVE_IPP
+ int hidx = (int)pHidxs[x];
+#else
float mag = dbuf[x+width*2], angle = dbuf[x+width*3]*angleScale - 0.5f;
int hidx = cvFloor(angle);
angle -= hidx;
+ gradPtr[x*2] = mag*(1.f - angle);
+ gradPtr[x*2+1] = mag*angle;
+#endif
if( hidx < 0 )
hidx += _nbins;
else if( hidx >= _nbins )
hidx++;
hidx &= hidx < _nbins ? -1 : 0;
qanglePtr[x*2+1] = (uchar)hidx;
- gradPtr[x*2] = mag*(1.f - angle);
- gradPtr[x*2+1] = mag*angle;
- }
+ }
}
}
const uchar* qanglePtr = qangle.data + qangle.step*pt.y + pt.x*2;
CV_Assert( blockHist != 0 );
-
+#ifdef HAVE_IPP
+ ippsZero_32f(blockHist,blockHistogramSize);
+#else
for( k = 0; k < blockHistogramSize; k++ )
blockHist[k] = 0.f;
+#endif
const PixData* _pixData = &pixData[0];
void HOGCache::normalizeBlockHistogram(float* _hist) const
{
float* hist = &_hist[0];
+#ifdef HAVE_IPP
+ size_t sz = blockHistogramSize;
+#else
size_t i, sz = blockHistogramSize;
-
+#endif
+
float sum = 0;
+#ifdef HAVE_IPP
+ ippsDotProd_32f(hist,hist,sz,&sum);
+#else
for( i = 0; i < sz; i++ )
sum += hist[i]*hist[i];
+#endif
+
float scale = 1.f/(std::sqrt(sum)+sz*0.1f), thresh = (float)descriptor->L2HysThreshold;
+#ifdef HAVE_IPP
+ ippsMulC_32f_I(scale,hist,sz);
+ ippsThreshold_32f_I( hist, sz, thresh, ippCmpGreater );
+ ippsDotProd_32f(hist,hist,sz,&sum);
+#else
for( i = 0, sum = 0; i < sz; i++ )
{
hist[i] = std::min(hist[i]*scale, thresh);
sum += hist[i]*hist[i];
}
+#endif
+
scale = 1.f/(std::sqrt(sum)+1e-3f);
+#ifdef HAVE_IPP
+ ippsMulC_32f_I(scale,hist,sz);
+#else
for( i = 0; i < sz; i++ )
hist[i] *= scale;
+#endif
}
float* dst = descriptor + bj.histOfs;
const float* src = cache.getBlock(pt, dst);
if( src != dst )
+#ifdef HAVE_IPP
+ ippsCopy_32f(src,dst,blockHistogramSize);
+#else
for( int k = 0; k < blockHistogramSize; k++ )
dst[k] = src[k];
+#endif
}
}
}
}
double s = rho;
const float* svmVec = &svmDetector[0];
+#ifdef HAVE_IPP
+ int j;
+#else
int j, k;
+#endif
for( j = 0; j < nblocks; j++, svmVec += blockHistogramSize )
{
const HOGCache::BlockData& bj = blockData[j];
Point pt = pt0 + bj.imgOffset;
const float* vec = cache.getBlock(pt, &blockHist[0]);
+#ifdef HAVE_IPP
+ Ipp32f partSum;
+ ippsDotProd_32f(vec,svmVec,blockHistogramSize,&partSum);
+ s += (double)partSum;
+#else
for( k = 0; k <= blockHistogramSize - 4; k += 4 )
s += vec[k]*svmVec[k] + vec[k+1]*svmVec[k+1] +
vec[k+2]*svmVec[k+2] + vec[k+3]*svmVec[k+3];
for( ; k < blockHistogramSize; k++ )
s += vec[k]*svmVec[k];
+#endif
}
if( s >= hitThreshold )
hits.push_back(pt0);