[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