diff --git a/doc/gpu_calib3d.tex b/doc/gpu_calib3d.tex index 8e2024ea25..ffe2ffa35b 100644 --- a/doc/gpu_calib3d.tex +++ b/doc/gpu_calib3d.tex @@ -33,7 +33,7 @@ public: }; \end{lstlisting} -The class computes the disparity map using block matching algorithm. The class also does some pre- and post- processing steps: sobel prefilter (if use \texttt{PREFILTER\_XSOBEL} preset) and textureless threshold post processing (if \texttt{avergeTexThreshold} $>$ 0). If \texttt{avergeTexThreshold = 0} post procesing is disabled, otherwise disparity is set 0 in each point \texttt{(x, y)} where for left image $\sum HorizontalGradiensInWindow(x, y, winSize) < (winSize \cdot winSize) \cdot avergeTexThreshold$ i.e. input left image is low textured. +This class computes the disparity map using block matching algorithm. The class also performs pre- and post- filtering steps: sobel prefiltering (if PREFILTER\_XSOBEL flag is set) and low textureness filtering (if averageTexThreshols $>$ 0). If \texttt{avergeTexThreshold = 0} low textureness filtering is disabled, otherwise disparity is set to 0 in each point \texttt{(x, y)} where for left image $\sum HorizontalGradiensInWindow(x, y, winSize) < (winSize \cdot winSize) \cdot avergeTexThreshold$ i.e. input left image is low textured. \cvfunc{cv::gpu::StereoBM\_GPU::StereoBM\_GPU}\label{cppfunc.gpu.StereoBM.StereoBM} @@ -45,13 +45,13 @@ StereoBM\_GPU::StereoBM\_GPU(int preset, \par int ndisparities = DEFAULT\_NDISP, } \begin{description} -\cvarg{preset}{Camera-specific preset:} +\cvarg{preset}{Preset:} \begin{description} \cvarg{BASIC\_PRESET}{Without preprocessing.} \cvarg{PREFILTER\_XSOBEL}{Sobel prefilter.} \end{description} -\cvarg{ndisparities}{Number of disparities. Must be multiple of 8 and less then 256.} -\cvarg{winSize}{SAD window size.} +\cvarg{ndisparities}{Number of disparities. Must be a multiple of 8 and less or equal then 256.} +\cvarg{winSize}{Block size.} \end{description} @@ -72,7 +72,7 @@ void StereoBM\_GPU::operator() (const GpuMat\& left, const GpuMat\& right, \par \cvfunc{cv::gpu::StereoBM\_GPU::checkIfGpuCallReasonable}\label{cppfunc.gpu.StereoBM.checkIfGpuCallReasonable} -Some heuristics that tries to estmate if current GPU will be faster then CPU in this algorithm. It queries current active device. +Some heuristics that tries to estmate if the current GPU will be faster then CPU in this algorithm. It queries current active device. \cvdefCpp{ bool StereoBM\_GPU::checkIfGpuCallReasonable(); @@ -127,6 +127,16 @@ public: The class implements Pedro F. Felzenszwalb algorithm \cite{felzenszwalb_bp}. It can compute own data cost (using truncated linear model) or use user-provided data cost. +\textbf{Please note:} \texttt{StereoBeliefPropagation} requires a lot of memory: +\[ +width\_step \cdot height \cdot ndisp \cdot 4 \cdot (1 + 0.25) +\] +for message storage and +\[ +width\_step \cdot height \cdot ndisp \cdot (1 + 0.25 + 0.0625 + \dotsm + \frac{1}{4^{levels}} +\] +for data cost storage. \texttt{width\_step} is the number of bytes in a line including the padding. + \cvCppFunc{gpu::StereoBeliefPropagation::StereoBeliefPropagation} StereoBeliefPropagation constructors. @@ -140,9 +150,9 @@ StereoBeliefPropagation::StereoBeliefPropagation(\par int ndisp, int iters, int \cvarg{ndisp}{Number of disparities.} \cvarg{iters}{Number of BP iterations on each level.} \cvarg{levels}{Number of levels.} -\cvarg{max\_data\_term}{Truncation of data cost.} +\cvarg{max\_data\_term}{Threshold for data cost truncation.} \cvarg{data\_weight}{Data weight.} -\cvarg{max\_disc\_term}{Truncation of discontinuity.} +\cvarg{max\_disc\_term}{Threshold for discontinuity truncation.} \cvarg{disc\_single\_jump}{Discontinuity single jump.} \cvarg{msg\_type}{Type for messages. Supports \texttt{CV\_16SC1} and \texttt{CV\_32FC1}.} \end{description} @@ -157,11 +167,14 @@ DiscTerm = \min(disc\_single\_jump \cdot \lvert f_1-f_2 \rvert, max\_disc\_term) For more details please see \cite{felzenszwalb_bp}. -By default \texttt{StereoBeliefPropagation} uses floating-point arithmetics and \texttt{CV\_32FC1} type for messages. But also it can use fixed-point arithmetics and \texttt{CV\_16SC1} type for messages for better perfomance. +By default \texttt{StereoBeliefPropagation} uses floating-point arithmetics and \texttt{CV\_32FC1} type for messages. But also it can use fixed-point arithmetics and \texttt{CV\_16SC1} type for messages for better perfomance. To avoid overflow in this case, the parameters must satisfy +\[ +10 \cdot 2^{levels-1} \cdot max\_data\_term < SHRT\_MAX +\] \cvCppFunc{gpu::StereoBeliefPropagation::estimateRecommendedParams} -Some heuristics that tries to compute parameters (\texttt{ndisp}, \texttt{iters} and \texttt{levels}) for specified image size (\texttt{width} and \texttt{height}). +Some heuristics that tries to compute recommended parameters (\texttt{ndisp}, \texttt{iters} and \texttt{levels}) for specified image size (\texttt{width} and \texttt{height}). \cvdefCpp{ void StereoBeliefPropagation::estimateRecommendedParams(\par int width, int height, int\& ndisp, int\& iters, int\& levels); @@ -248,7 +261,7 @@ public: }; \end{lstlisting} -The class implements Q. Yang algorithm \cite{qx_csbp}. \texttt{StereoConstantSpaceBP} can use global minimum or local minimum selection method. By default it use local minimum selection method (\texttt{use\_local\_init\_data\_cost = true}). +The class implements Q. Yang algorithm \cite{qx_csbp}. \texttt{StereoConstantSpaceBP} supports both local minimum and global minimum data cost initialization algortihms. For more details please see the paper. By default local algorithm is used, and to enable global algorithm set \texttt{use\_local\_init\_data\_cost} to false. \cvCppFunc{gpu::StereoConstantSpaceBP::StereoConstantSpaceBP} @@ -282,7 +295,10 @@ DiscTerm = \min(disc\_single\_jump \cdot \lvert f_1-f_2 \rvert, max\_disc\_term) For more details please see \cite{qx_csbp}. -By default \texttt{StereoConstantSpaceBP} uses floating-point arithmetics and \texttt{CV\_32FC1} type for messages. But also it can use fixed-point arithmetics and \texttt{CV\_16SC1} type for messages for better perfomance. +By default \texttt{StereoConstantSpaceBP} uses floating-point arithmetics and \texttt{CV\_32FC1} type for messages. But also it can use fixed-point arithmetics and \texttt{CV\_16SC1} type for messages for better perfomance. To avoid overflow in this case, the parameters must satisfy +\[ +10 \cdot 2^{levels-1} \cdot max\_data\_term < SHRT\_MAX +\] \cvCppFunc{gpu::StereoConstantSpaceBP::estimateRecommendedParams} @@ -335,11 +351,11 @@ public: }; \end{lstlisting} -The class implements disparity map refinement using joint bilateral filtering given a single color image described in \cite{qx_csbp}. +The class implements Q. Yang algorithm \cite{qx_csbp}. \cvCppFunc{gpu::DisparityBilateralFilter::DisparityBilateralFilter} -DisparityBilateralFilter constructors +DisparityBilateralFilter constructors. \cvdefCpp{ DisparityBilateralFilter::DisparityBilateralFilter(\par int ndisp = DEFAULT\_NDISP, int radius = DEFAULT\_RADIUS, \par int iters = DEFAULT\_ITERS);\newline @@ -350,8 +366,8 @@ DisparityBilateralFilter::DisparityBilateralFilter(\par int ndisp, int radius, i \cvarg{ndisp}{Number of disparities.} \cvarg{radius}{Filter radius.} \cvarg{iters}{Number of iterations.} -\cvarg{edge\_threshold}{Truncation of data continuity.} -\cvarg{max\_disc\_threshold}{Truncation of disparity continuity.} +\cvarg{edge\_threshold}{Threshold for edges.} +\cvarg{max\_disc\_threshold}{Constant to reject outliers.} \cvarg{sigma\_range}{Filter range.} \end{description} diff --git a/doc/gpu_features2d.tex b/doc/gpu_features2d.tex index e9f784532f..82b6396e97 100644 --- a/doc/gpu_features2d.tex +++ b/doc/gpu_features2d.tex @@ -1,62 +1,6 @@ \section{Feature Detection and Description} -\cvclass{gpu::SURFParams\_GPU} -Various SURF algorithm parameters. - -\begin{lstlisting} -struct SURFParams_GPU -{ - SURFParams_GPU() : - threshold(0.1f), - nOctaves(4), - nIntervals(4), - initialScale(2.f), - - l1(3.f/1.5f), - l2(5.f/1.5f), - l3(3.f/1.5f), - l4(1.f/1.5f), - edgeScale(0.81f), - initialStep(1), - - extended(true), - - featuresRatio(0.01f) - { - } - - //! The interest operator threshold - float threshold; - //! The number of octaves to process - int nOctaves; - //! The number of intervals in each octave - int nIntervals; - //! The scale associated with the first interval of the first octave - float initialScale; - - //! mask parameter l_1 - float l1; - //! mask parameter l_2 - float l2; - //! mask parameter l_3 - float l3; - //! mask parameter l_4 - float l4; - //! The amount to scale the edge rejection mask - float edgeScale; - //! The initial sampling step in pixels. - int initialStep; - - //! True, if generate 128-len descriptors, false - 64-len descriptors - bool extended; - - //! max features = featuresRatio * img.size().srea() - float featuresRatio; -}; -\end{lstlisting} - - \cvclass{gpu::SURF\_GPU} Class for extracting Speeded Up Robust Features from an image. @@ -236,8 +180,8 @@ void matchSingle(const GpuMat\& queryDescs, \par const GpuMat\& trainDescs, \par \begin{description} \cvarg{queryDescs} {Query set of descriptors.} \cvarg{trainDescs} {Train set of descriptors. This will not be added to train descriptors collection stored in class object.} -\cvarg{trainIdx} {One row \texttt{CV\_32SC1} matrix. Will contain the best train index for each query. If some query descriptors masked out in \texttt{mask} it will contain -1.} -\cvarg{distance} {One row \texttt{CV\_32FC1} matrix. Will contain the best distance for each query. If some query descriptors masked out in \texttt{mask} it will contain \texttt{FLT\_MAX}.} +\cvarg{trainIdx} {One row \texttt{CV\_32SC1} matrix. Will contain the best train index for each query. If some query descriptors are masked out in \texttt{mask} it will contain -1.} +\cvarg{distance} {One row \texttt{CV\_32FC1} matrix. Will contain the best distance for each query. If some query descriptors are masked out in \texttt{mask} it will contain \texttt{FLT\_MAX}.} \cvarg{mask}{Mask specifying permissible matches between input query and train matrices of descriptors.} \end{description} @@ -252,9 +196,9 @@ void matchCollection(const GpuMat\& queryDescs, \par const GpuMat\& trainCollect \begin{description} \cvarg{queryDescs} {Query set of descriptors.} \cvarg{trainCollection} {\texttt{GpuMat} containing train collection. It can be obtained from train descriptors collection that was set using \texttt{add} method by \hyperref[cppfunc.gpu.BruteForceMatcher.makeGpuCollection]{makeGpuCollection}. Or it can contain user defined collection. It must be one row matrix, each element is a \texttt{DevMem2D} that points to one train descriptors matrix.} -\cvarg{trainIdx} {One row \texttt{CV\_32SC1} matrix. Will contain the best train index for each query. If some query descriptors masked out in \texttt{maskCollection} it will contain -1.} -\cvarg{imgIdx} {One row \texttt{CV\_32SC1} matrix. Will contain image train index for each query. If some query descriptors masked out in \texttt{maskCollection} it will contain -1.} -\cvarg{distance} {One row \texttt{CV\_32FC1} matrix. Will contain the best distance for each query. If some query descriptors masked out in \texttt{maskCollection} it will contain \texttt{FLT\_MAX}.} +\cvarg{trainIdx} {One row \texttt{CV\_32SC1} matrix. Will contain the best train index for each query. If some query descriptors are masked out in \texttt{maskCollection} it will contain -1.} +\cvarg{imgIdx} {One row \texttt{CV\_32SC1} matrix. Will contain image train index for each query. If some query descriptors are masked out in \texttt{maskCollection} it will contain -1.} +\cvarg{distance} {One row \texttt{CV\_32FC1} matrix. Will contain the best distance for each query. If some query descriptors are masked out in \texttt{maskCollection} it will contain \texttt{FLT\_MAX}.} \cvarg{maskCollection}{\texttt{GpuMat} containing set of masks. It can be obtained from \texttt{std::vector} by \hyperref[cppfunc.gpu.BruteForceMatcher.makeGpuCollection]{makeGpuCollection}. Or it can contain user defined mask set. It must be empty matrix or one row matrix, each element is a \texttt{PtrStep} that points to one mask.} \end{description} @@ -299,8 +243,8 @@ void knnMatch(const GpuMat\& queryDescs, \par const GpuMat\& trainDescs, \par Gp \begin{description} \cvarg{queryDescs} {Query set of descriptors.} \cvarg{trainDescs} {Train set of descriptors. This will not be added to train descriptors collection stored in class object.} -\cvarg{trainIdx} {Matrix with $\texttt{nQueries} \times \texttt{k}$ size and \texttt{CV\_32SC1} type. \texttt{trainIdx.at(queryIdx, i)} will contain index of the i'th best trains. If some query descriptors masked out in \texttt{mask} it will contain -1.} -\cvarg{distance} {Matrix with $\texttt{nQuery} \times \texttt{k}$ and \texttt{CV\_32FC1} type. Will contain distance for each query and the i'th best trains. If some query descriptors masked out in \texttt{mask} it will contain \texttt{FLT\_MAX}.} +\cvarg{trainIdx} {Matrix with $\texttt{nQueries} \times \texttt{k}$ size and \texttt{CV\_32SC1} type. \texttt{trainIdx.at(queryIdx, i)} will contain index of the i'th best trains. If some query descriptors are masked out in \texttt{mask} it will contain -1.} +\cvarg{distance} {Matrix with $\texttt{nQuery} \times \texttt{k}$ and \texttt{CV\_32FC1} type. Will contain distance for each query and the i'th best trains. If some query descriptors are masked out in \texttt{mask} it will contain \texttt{FLT\_MAX}.} \cvarg{allDist} {Buffer to store all distances between query descriptors and train descriptors. It will have $\texttt{nQuery} \times \texttt{nTrain}$ size and \texttt{CV\_32FC1} type. \texttt{allDist.at(queryIdx, trainIdx)} will contain \texttt{FLT\_MAX}, if \texttt{trainIdx} is one from k best, otherwise it will contain distance between \texttt{queryIdx} and \texttt{trainIdx} descriptors.} \cvarg{k}{Number of the best matches will be found per each query descriptor (or less if it's not possible).} \cvarg{mask}{Mask specifying permissible matches between input query and train matrices of descriptors.} diff --git a/doc/gpu_image_filtering.tex b/doc/gpu_image_filtering.tex index ef73382790..813e0232d9 100644 --- a/doc/gpu_image_filtering.tex +++ b/doc/gpu_image_filtering.tex @@ -19,6 +19,8 @@ public: }; \end{lstlisting} +\textbf{Please note:} This class doesn't allocate memory for destination image. Usually this class is used inside \hyperref[class.gpu.FilterEngine]{cv::gpu::FilterEngine\_GPU}. + \cvclass{gpu::BaseColumnFilter\_GPU}\label{class.gpu.BaseColumnFilter} The base class for linear or non-linear filters that processes columns of 2D arrays. Such filters are used for the "vertical" filtering passes in separable filters. @@ -34,6 +36,8 @@ public: }; \end{lstlisting} +\textbf{Please note:} This class doesn't allocate memory for destination image. Usually this class is used inside \hyperref[class.gpu.FilterEngine]{cv::gpu::FilterEngine\_GPU}. + \cvclass{gpu::BaseFilter\_GPU}\label{class.gpu.BaseFilter} The base class for non-separable 2D filters. @@ -50,6 +54,8 @@ public: }; \end{lstlisting} +\textbf{Please note:} This class doesn't allocate memory for destination image. Usually this class is used inside \hyperref[class.gpu.FilterEngine]{cv::gpu::FilterEngine\_GPU}. + \cvclass{gpu::FilterEngine\_GPU}\label{class.gpu.FilterEngine} The base class for Filter Engine. @@ -91,9 +97,9 @@ while (...) filter.release(); \end{lstlisting} -\texttt{FilterEngine\_GPU} can process a rectangular sub-region of an image. By default, if \texttt{roi == Rect(0,0,-1,-1)}, \texttt{FilterEngine\_GPU} process inner region of image (\texttt{Rect(anchor.x, anchor.y, src\_size.width - ksize.width, src\_size.height - ksize.height)}), because some filters doesn't check indexes outside the image for better perfomace. Which filters supports processing the whole image and which not and image type limitations see below. +\texttt{FilterEngine\_GPU} can process a rectangular sub-region of an image. By default, if \texttt{roi == Rect(0,0,-1,-1)}, \texttt{FilterEngine\_GPU} processes inner region of image (\texttt{Rect(anchor.x, anchor.y, src\_size.width - ksize.width, src\_size.height - ksize.height)}), because some filters doesn't check if indices are outside the image for better perfomace. See below which filters supports processing the whole image and which not and image type limitations. -The GPU filters doesn't support the in-place mode. +\textbf{Please note:} The GPU filters doesn't support the in-place mode. See also: \hyperref[class.gpu.BaseRowFilter]{cv::gpu::BaseRowFilter\_GPU}, \hyperref[class.gpu.BaseColumnFilter]{cv::gpu::BaseColumnFilter\_GPU}, \hyperref[class.gpu.BaseFilter]{cv::gpu::BaseFilter\_GPU}, \hyperref[cppfunc.gpu.createFilter2D]{cv::gpu::createFilter2D\_GPU}, \hyperref[cppfunc.gpu.createSeparableFilter]{cv::gpu::createSeparableFilter\_GPU}, \hyperref[cppfunc.gpu.createBoxFilter]{cv::gpu::createBoxFilter\_GPU}, \hyperref[cppfunc.gpu.createMorphologyFilter]{cv::gpu::createMorphologyFilter\_GPU}, \hyperref[cppfunc.gpu.createLinearFilter]{cv::gpu::createLinearFilter\_GPU}, \hyperref[cppfunc.gpu.createSeparableLinearFilter]{cv::gpu::createSeparableLinearFilter\_GPU}, \hyperref[cppfunc.gpu.createDerivFilter]{cv::gpu::createDerivFilter\_GPU}, \hyperref[cppfunc.gpu.createGaussianFilter]{cv::gpu::createGaussianFilter\_GPU} @@ -146,7 +152,7 @@ Ptr getRowSumFilter\_GPU(int srcType, int sumType, \par int \cvarg{anchor}{Anchor point. The default value (-1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. \cvfunc{cv::gpu::getColumnSumFilter\_GPU}\label{cppfunc.gpu.getColumnSumFilter} @@ -163,7 +169,7 @@ Ptr getColumnSumFilter\_GPU(int sumType, \par int dstType \cvarg{anchor}{Anchor point. The default value (-1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. \cvfunc{cv::gpu::createBoxFilter\_GPU}\label{cppfunc.gpu.createBoxFilter} @@ -183,7 +189,7 @@ Ptr getBoxFilter\_GPU(int srcType, int dstType, \par const Size \cvarg{anchor}{Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{boxFilter}. @@ -203,7 +209,7 @@ void boxFilter(const GpuMat\& src, GpuMat\& dst, int ddepth, Size ksize, \par Po \cvarg{anchor}{Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{boxFilter}, \hyperref[cppfunc.gpu.createBoxFilter]{cv::gpu::createBoxFilter\_GPU}. @@ -222,7 +228,7 @@ void blur(const GpuMat\& src, GpuMat\& dst, Size ksize, \par Point anchor = Poin \cvarg{anchor}{Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{blur}, \cvCppCross{gpu::boxFilter}. @@ -245,7 +251,7 @@ Ptr getMorphologyFilter\_GPU(int op, int type, \par const Mat\& \cvarg{anchor}{Anchor position within the structuring element; negative values mean that the anchor is at the center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{createMorphologyFilter}. @@ -265,7 +271,7 @@ void erode(const GpuMat\& src, GpuMat\& dst, const Mat\& kernel, \par Point anch \cvarg{iterations}{Number of times erosion to be applied.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{erode}, \hyperref[cppfunc.gpu.createMorphologyFilter]{cv::gpu::createMorphologyFilter\_GPU}. @@ -285,7 +291,7 @@ void dilate(const GpuMat\& src, GpuMat\& dst, const Mat\& kernel, \par Point anc \cvarg{iterations}{Number of times dilation to be applied.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{dilate}, \hyperref[cppfunc.gpu.createMorphologyFilter]{cv::gpu::createMorphologyFilter\_GPU}. @@ -313,7 +319,7 @@ void morphologyEx(const GpuMat\& src, GpuMat\& dst, int op, \par const Mat\& ker \cvarg{iterations}{Number of times erosion and dilation to be applied.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{morphologyEx}. @@ -336,7 +342,7 @@ Ptr getLinearFilter\_GPU(int srcType, int dstType, \par const M \cvarg{anchor}{Anchor point. The default value Point(-1, -1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{createLinearFilter}. @@ -356,7 +362,7 @@ void filter2D(const GpuMat\& src, GpuMat\& dst, int ddepth, \par const Mat\& ker \cvarg{anchor}{Anchor of the kernel that indicates the relative position of a filtered point within the kernel. The anchor should lie within the kernel. The special default value (-1,-1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{filter2D}, \hyperref[cppfunc.gpu.createLinearFilter]{cv::gpu::createLinearFilter\_GPU}. @@ -376,7 +382,7 @@ void Laplacian(const GpuMat\& src, GpuMat\& dst, int ddepth, \par int ksize = 1, \cvarg{scale}{Optional scale factor for the computed Laplacian values (by default, no scaling is applied, see \cvCppCross{getDerivKernels}).} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. See also: \cvCppCross{Laplacian}, \cvCppCross{gpu::filter2D}. @@ -396,7 +402,7 @@ Ptr getLinearRowFilter\_GPU(int srcType, \par int bufType, c \cvarg{borderType}{Pixel extrapolation method; see \cvCppCross{borderInterpolate}. About limitation see below.} \end{description} -There are two version of algorithm: NPP and OpenCV. NPP calls when \texttt{srcType == CV\_8UC1} or \texttt{srcType == CV\_8UC4} and \texttt{bufType == srcType}, otherwise calls OpenCV version. NPP supports only \texttt{BORDER\_CONSTANT} border type and doesn't check indexes outside image. OpenCV version supports only \texttt{CV\_32F} buffer depth and \texttt{BORDER\_REFLECT101}, \texttt{BORDER\_REPLICATE} and \texttt{BORDER\_CONSTANT} border types and checks indexes outside image. +There are two version of algorithm: NPP and OpenCV. NPP calls when \texttt{srcType == CV\_8UC1} or \texttt{srcType == CV\_8UC4} and \texttt{bufType == srcType}, otherwise calls OpenCV version. NPP supports only \texttt{BORDER\_CONSTANT} border type and doesn't check indices outside image. OpenCV version supports only \texttt{CV\_32F} buffer depth and \texttt{BORDER\_REFLECT101}, \texttt{BORDER\_REPLICATE} and \texttt{BORDER\_CONSTANT} border types and checks indices outside image. See also: \hyperref[cppfunc.gpu.getLinearColumnFilter]{cv::gpu::getLinearColumnFilter\_GPU}, \cvCppCross{createSeparableLinearFilter}. @@ -416,7 +422,7 @@ Ptr getLinearColumnFilter\_GPU(int bufType, \par int dstT \cvarg{borderType}{Pixel extrapolation method; see \cvCppCross{borderInterpolate}. About limitation see below.} \end{description} -There are two version of algorithm: NPP and OpenCV. NPP calls when \texttt{dstType == CV\_8UC1} or \texttt{dstType == CV\_8UC4} and \texttt{bufType == dstType}, otherwise calls OpenCV version. NPP supports only \texttt{BORDER\_CONSTANT} border type and doesn't check indexes outside image. OpenCV version supports only \texttt{CV\_32F} buffer depth and \texttt{BORDER\_REFLECT101}, \texttt{BORDER\_REPLICATE} and \texttt{BORDER\_CONSTANT} border types and checks indexes outside image.\newline +There are two version of algorithm: NPP and OpenCV. NPP calls when \texttt{dstType == CV\_8UC1} or \texttt{dstType == CV\_8UC4} and \texttt{bufType == dstType}, otherwise calls OpenCV version. NPP supports only \texttt{BORDER\_CONSTANT} border type and doesn't check indices outside image. OpenCV version supports only \texttt{CV\_32F} buffer depth and \texttt{BORDER\_REFLECT101}, \texttt{BORDER\_REPLICATE} and \texttt{BORDER\_CONSTANT} border types and checks indices outside image.\newline See also: \hyperref[cppfunc.gpu.getLinearRowFilter]{cv::gpu::getLinearRowFilter\_GPU}, \cvCppCross{createSeparableLinearFilter}. @@ -568,7 +574,7 @@ Ptr getMaxFilter\_GPU(int srcType, int dstType, \par const Size \cvarg{anchor}{Anchor point. The default value (-1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. \cvfunc{cv::gpu::getMinFilter\_GPU}\label{cppfunc.gpu.getMinFilter} @@ -585,4 +591,4 @@ Ptr getMinFilter\_GPU(int srcType, int dstType, \par const Size \cvarg{anchor}{Anchor point. The default value (-1) means that the anchor is at the kernel center.} \end{description} -This filter doesn't check indexes outside the image, so it can process only inner area. +\textbf{Please note:} This filter doesn't check out of border accesses, so only proper submatrix of bigger matrix have to be passed to it. diff --git a/doc/gpu_image_processing.tex b/doc/gpu_image_processing.tex index d4d1270773..c967093198 100644 --- a/doc/gpu_image_processing.tex +++ b/doc/gpu_image_processing.tex @@ -319,7 +319,7 @@ double threshold(const GpuMat\& src, GpuMat\& dst, double thresh, \par double ma } \begin{description} -\cvarg{src}{Source array (single-channel, \texttt{CV\_64F} depth doesn't supported).} +\cvarg{src}{Source array (single-channel, \texttt{CV\_64F} depth isn't supported).} \cvarg{dst}{Destination array; will have the same size and the same type as \texttt{src}.} \cvarg{thresh}{Threshold value.} \cvarg{maxVal}{Maximum value to use with \texttt{THRESH\_BINARY} and \texttt{THRESH\_BINARY\_INV} thresholding types.} diff --git a/doc/opencv.pdf b/doc/opencv.pdf index 6ce453f639..105cd2dcf2 100644 Binary files a/doc/opencv.pdf and b/doc/opencv.pdf differ