[arrayfire] 11/29: Fixed min/max values of sigma in SIFT scale levels

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Mon Oct 19 17:48:53 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch master
in repository arrayfire.

commit 5d4e868000a809c7322d7e62a75ea8a3ad9a7a88
Author: Peter Andreas Entschev <peter at arrayfire.com>
Date:   Mon Oct 5 17:37:41 2015 -0400

    Fixed min/max values of sigma in SIFT scale levels
---
 src/backend/cpu/sift_nonfree.hpp           | 6 +++---
 src/backend/cuda/kernel/sift_nonfree.hpp   | 6 +++---
 src/backend/opencl/kernel/sift_nonfree.hpp | 4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/backend/cpu/sift_nonfree.hpp b/src/backend/cpu/sift_nonfree.hpp
index 3113b4e..5ba9fe4 100644
--- a/src/backend/cpu/sift_nonfree.hpp
+++ b/src/backend/cpu/sift_nonfree.hpp
@@ -168,7 +168,7 @@ namespace cpu
     Array<T> gauss_filter(float sigma)
     {
         // Using 6-sigma rule
-        unsigned gauss_len = (unsigned)round(sigma * 6 + 1) | 1;
+        unsigned gauss_len = std::min((unsigned)round(sigma * 6 + 1) | 1, 31u);
 
         Array<T> filter = createEmptyArray<T>(gauss_len);
         gaussian1D((T*)getDevicePtr(filter), gauss_len, sigma);
@@ -726,8 +726,8 @@ namespace cpu
 
         Array<T> init_img = createEmptyArray<T>(af::dim4());
 
-        float s = (double_input) ? sqrt(init_sigma * init_sigma - InitSigma * InitSigma * 4)
-            : sqrt(init_sigma * init_sigma - InitSigma * InitSigma);
+        float s = (double_input) ? std::max((float)sqrt(init_sigma * init_sigma - InitSigma * InitSigma * 4), 0.1f)
+                                 : std::max((float)sqrt(init_sigma * init_sigma - InitSigma * InitSigma), 0.1f);
 
         Array<T> filter = gauss_filter<T>(s);
 
diff --git a/src/backend/cuda/kernel/sift_nonfree.hpp b/src/backend/cuda/kernel/sift_nonfree.hpp
index 43438e9..b834117 100644
--- a/src/backend/cuda/kernel/sift_nonfree.hpp
+++ b/src/backend/cuda/kernel/sift_nonfree.hpp
@@ -164,7 +164,7 @@ template<typename T>
 Param<T> gauss_filter(float sigma)
 {
     // Using 6-sigma rule
-    unsigned gauss_len = (unsigned)round(sigma * 6 + 1) | 1;
+    unsigned gauss_len = std::min((unsigned)round(sigma * 6 + 1) | 1, 31u);
 
     T* h_gauss = new T[gauss_len];
     gaussian1D(h_gauss, gauss_len, sigma);
@@ -899,8 +899,8 @@ Param<T> createInitialImage(
     init_img.ptr = memAlloc<T>(init_img_el);
     init_tmp.ptr = memAlloc<T>(init_img_el);
 
-    float s = (double_input) ? sqrt(init_sigma * init_sigma - INIT_SIGMA * INIT_SIGMA * 4)
-                             : sqrt(init_sigma * init_sigma - INIT_SIGMA * INIT_SIGMA);
+    float s = (double_input) ? std::max((float)sqrt(init_sigma * init_sigma - INIT_SIGMA * INIT_SIGMA * 4), 0.1f)
+                             : std::max((float)sqrt(init_sigma * init_sigma - INIT_SIGMA * INIT_SIGMA), 0.1f);
 
     Param<convAccT> filter = gauss_filter<convAccT>(s);
 
diff --git a/src/backend/opencl/kernel/sift_nonfree.hpp b/src/backend/opencl/kernel/sift_nonfree.hpp
index 9aee907..3d9dfce 100644
--- a/src/backend/opencl/kernel/sift_nonfree.hpp
+++ b/src/backend/opencl/kernel/sift_nonfree.hpp
@@ -218,8 +218,8 @@ Param createInitialImage(
     dim_t init_img_el = init_img.info.strides[3] * init_img.info.dims[3];
     init_img.data = bufferAlloc(init_img_el * sizeof(T));
 
-    float s = (double_input) ? sqrt(init_sigma * init_sigma - InitSigma * InitSigma * 4)
-                             : sqrt(init_sigma * init_sigma - InitSigma * InitSigma);
+    float s = (double_input) ? std::max((float)sqrt(init_sigma * init_sigma - InitSigma * InitSigma * 4.f), 0.1f)
+                             : std::max((float)sqrt(init_sigma * init_sigma - InitSigma * InitSigma), 0.1f);
 
     const Param filter = gaussFilter<convAccT>(s);
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git



More information about the debian-science-commits mailing list