From 9405c6d2061edc4f8ee1c762a672bbf719c9978a Mon Sep 17 00:00:00 2001 From: Michele Cancilla Date: Thu, 27 Apr 2017 12:53:33 +0200 Subject: [PATCH] =?UTF-8?q?Improvement=20of=20array=20of=20equivalences?= =?UTF-8?q?=E2=80=99=20upper=20bound=20+=20fix=20some=20wrong=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/imgproc/src/connectedcomponents.cpp | 22 +++++++++++-------- .../include/opencv2/video/background_segm.hpp | 4 ++-- modules/video/src/bgfg_KNN.cpp | 2 +- modules/video/src/bgfg_gaussmix2.cpp | 6 ++--- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/imgproc/src/connectedcomponents.cpp b/modules/imgproc/src/connectedcomponents.cpp index d80cbaaf15..f03e568823 100644 --- a/modules/imgproc/src/connectedcomponents.cpp +++ b/modules/imgproc/src/connectedcomponents.cpp @@ -288,7 +288,7 @@ namespace cv{ int r = range.start; chunksSizeAndLabels_[r] = range.end; - LabelT label = LabelT((r * imgLabels_.cols + 1) / 2 + 1); + LabelT label = LabelT((r + 1) / 2) * LabelT((imgLabels_.cols + 1) / 2) + 1; const LabelT firstLabel = label; const int w = img_.cols; @@ -615,6 +615,10 @@ namespace cv{ //merge labels of different chunks mergeLabels8Connectivity(imgLabels, P, chunksSizeAndLabels); + + for (int i = 0; i < h; i = chunksSizeAndLabels[i]){ + flattenL(P, int((i + 1) / 2) * int((w + 1) / 2) + 1, chunksSizeAndLabels[i + 1], nLabels); + } } else{ //First scan, each thread works with chunk of img.rows/nThreads rows @@ -623,10 +627,10 @@ namespace cv{ //merge labels of different chunks mergeLabels4Connectivity(imgLabels, P, chunksSizeAndLabels); - } - - for (int i = 0; i < h; i = chunksSizeAndLabels[i]){ - flattenL(P, (i * w + 1) / 2 + 1, chunksSizeAndLabels[i + 1], nLabels); + + for (int i = 0; i < h; i = chunksSizeAndLabels[i]){ + flattenL(P, int(i * w + 1) / 2 + 1, chunksSizeAndLabels[i + 1], nLabels); + } } //Array for statistics dataof threads @@ -842,7 +846,7 @@ namespace cv{ chunksSizeAndLabels_[r] = range.end + (range.end % 2); - LabelT label = LabelT((r + 1) * (imgLabels_.cols + 1) / 4); + LabelT label = LabelT((r + 1) / 2) * LabelT((imgLabels_.cols + 1) / 2) + 1; const LabelT firstLabel = label; const int h = img_.rows, w = img_.cols; @@ -2540,7 +2544,7 @@ namespace cv{ //0 0 0 0 0... //1 0 1 0 1... //............ - const size_t Plength = ((size_t(h) + 1) * (size_t(w) + 1)) / 4 + 1; + const size_t Plength = size_t(((h + 1) / 2) * size_t((w + 1) / 2)) + 1; //Array used to store info and labeled pixel by each thread. //Different threads affect different memory location of chunksSizeAndLabels @@ -2562,7 +2566,7 @@ namespace cv{ LabelT nLabels = 1; for (int i = 0; i < h; i = chunksSizeAndLabels[i]){ - flattenL(P, (i + 1) * (w + 1) / 4, chunksSizeAndLabels[i + 1], nLabels); + flattenL(P, LabelT((i + 1) / 2) * LabelT((w + 1) / 2) + 1, chunksSizeAndLabels[i + 1], nLabels); } //Array for statistics data @@ -2602,7 +2606,7 @@ namespace cv{ //0 0 0 0 0... //1 0 1 0 1... //............ - const size_t Plength = ((size_t(h) + 1) * (size_t(w) + 1)) / 4 + 1; + const size_t Plength = size_t(((h + 1) / 2) * size_t((w + 1) / 2)) + 1; LabelT *P = (LabelT *)fastMalloc(sizeof(LabelT) *Plength); P[0] = 0; diff --git a/modules/video/include/opencv2/video/background_segm.hpp b/modules/video/include/opencv2/video/background_segm.hpp index f4c6e4cf0d..8a2d40b1a7 100644 --- a/modules/video/include/opencv2/video/background_segm.hpp +++ b/modules/video/include/opencv2/video/background_segm.hpp @@ -188,7 +188,7 @@ public: A shadow is detected if pixel is a darker version of the background. The shadow threshold (Tau in the paper) is a threshold defining how much darker the shadow can be. Tau= 0.5 means that if a pixel - is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiarra, + is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiara, *Detecting Moving Shadows...*, IEEE PAMI,2003. */ CV_WRAP virtual double getShadowThreshold() const = 0; @@ -289,7 +289,7 @@ public: A shadow is detected if pixel is a darker version of the background. The shadow threshold (Tau in the paper) is a threshold defining how much darker the shadow can be. Tau= 0.5 means that if a pixel - is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiarra, + is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiara, *Detecting Moving Shadows...*, IEEE PAMI,2003. */ CV_WRAP virtual double getShadowThreshold() const = 0; diff --git a/modules/video/src/bgfg_KNN.cpp b/modules/video/src/bgfg_KNN.cpp index 66be34a00f..434f51f94b 100755 --- a/modules/video/src/bgfg_KNN.cpp +++ b/modules/video/src/bgfg_KNN.cpp @@ -235,7 +235,7 @@ protected: // Tau - shadow threshold. The shadow is detected if the pixel is darker //version of the background. Tau is a threshold on how much darker the shadow can be. //Tau= 0.5 means that if pixel is more than 2 times darker then it is not shadow - //See: Prati,Mikic,Trivedi,Cucchiarra,"Detecting Moving Shadows...",IEEE PAMI,2003. + //See: Prati,Mikic,Trivedi,Cucchiara,"Detecting Moving Shadows...",IEEE PAMI,2003. //model data int nLongCounter;//circular counter diff --git a/modules/video/src/bgfg_gaussmix2.cpp b/modules/video/src/bgfg_gaussmix2.cpp index ebe449825c..7a1786cd35 100644 --- a/modules/video/src/bgfg_gaussmix2.cpp +++ b/modules/video/src/bgfg_gaussmix2.cpp @@ -386,7 +386,7 @@ protected: // Tau - shadow threshold. The shadow is detected if the pixel is darker //version of the background. Tau is a threshold on how much darker the shadow can be. //Tau= 0.5 means that if pixel is more than 2 times darker then it is not shadow - //See: Prati,Mikic,Trivedi,Cucchiarra,"Detecting Moving Shadows...",IEEE PAMI,2003. + //See: Prati,Mikic,Trivedi,Cucchiara,"Detecting Moving Shadows...",IEEE PAMI,2003. String name_; @@ -461,7 +461,7 @@ struct GaussBGStatModel2Params // Tau - shadow threshold. The shadow is detected if the pixel is darker //version of the background. Tau is a threshold on how much darker the shadow can be. //Tau= 0.5 means that if pixel is more than 2 times darker then it is not shadow - //See: Prati,Mikic,Trivedi,Cucchiarra,"Detecting Moving Shadows...",IEEE PAMI,2003. + //See: Prati,Mikic,Trivedi,Cucchiara,"Detecting Moving Shadows...",IEEE PAMI,2003. }; struct GMM @@ -472,7 +472,7 @@ struct GMM // shadow detection performed per pixel // should work for rgb data, could be usefull for gray scale and depth data as well -// See: Prati,Mikic,Trivedi,Cucchiarra,"Detecting Moving Shadows...",IEEE PAMI,2003. +// See: Prati,Mikic,Trivedi,Cucchiara,"Detecting Moving Shadows...",IEEE PAMI,2003. CV_INLINE bool detectShadowGMM(const float* data, int nchannels, int nmodes, const GMM* gmm, const float* mean,