mirror of https://github.com/opencv/opencv.git
commit
cc15898353
899 changed files with 11768 additions and 11055 deletions
@ -0,0 +1 @@ |
||||
* -whitespace |
@ -0,0 +1,22 @@ |
||||
diff --git a/3rdparty/libpng/pngpriv.h b/3rdparty/libpng/pngpriv.h
|
||||
index 07b2b0b..e7824b8 100644
|
||||
--- a/3rdparty/libpng/pngpriv.h
|
||||
+++ b/3rdparty/libpng/pngpriv.h
|
||||
@@ -360,7 +360,7 @@ typedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp;
|
||||
|
||||
/* Memory model/platform independent fns */
|
||||
#ifndef PNG_ABORT
|
||||
-# ifdef _WINDOWS_
|
||||
+# if defined(_WINDOWS_) && !defined(HAVE_WINRT)
|
||||
# define PNG_ABORT() ExitProcess(0)
|
||||
# else
|
||||
# define PNG_ABORT() abort()
|
||||
@@ -378,7 +378,7 @@ typedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp;
|
||||
# define png_memcpy _fmemcpy
|
||||
# define png_memset _fmemset
|
||||
#else
|
||||
-# ifdef _WINDOWS_ /* Favor Windows over C runtime fns */
|
||||
+# if defined(_WINDOWS_) && !defined(HAVE_WINRT) /* Favor Windows over C runtime fns */
|
||||
# define CVT_PTR(ptr) (ptr)
|
||||
# define CVT_PTR_NOCHECK(ptr) (ptr)
|
||||
# define png_strlen lstrlenA
|
@ -0,0 +1,4 @@ |
||||
if(IOS) |
||||
configure_file("${OpenCV_SOURCE_DIR}/platforms/ios/Info.plist.in" |
||||
"${CMAKE_BINARY_DIR}/ios/Info.plist") |
||||
endif() |
@ -1 +1,3 @@ |
||||
set(MIN_VER_CMAKE 2.8.7) |
||||
set(MIN_VER_PYTHON 2.6) |
||||
set(MIN_VER_ZLIB 1.2.3) |
||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 24 KiB |
@ -1,2 +1,2 @@ |
||||
set(the_description "Biologically inspired algorithms") |
||||
ocv_define_module(bioinspired opencv_core OPTIONAL opencv_highgui) |
||||
ocv_define_module(bioinspired opencv_core OPTIONAL opencv_highgui opencv_ocl) |
||||
|
@ -0,0 +1,753 @@ |
||||
/*M/////////////////////////////////////////////////////////////////////////////////////// |
||||
// |
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. |
||||
// |
||||
// By downloading, copying, installing or using the software you agree to this license. |
||||
// If you do not agree to this license, do not download, install, |
||||
// copy or use the software. |
||||
// |
||||
// |
||||
// License Agreement |
||||
// For Open Source Computer Vision Library |
||||
// |
||||
// Copyright (C) 2010-2013, Multicoreware, Inc., all rights reserved. |
||||
// Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved. |
||||
// Third party copyrights are property of their respective owners. |
||||
// |
||||
// @Authors |
||||
// Peng Xiao, pengxiao@multicorewareinc.com |
||||
// |
||||
// Redistribution and use in source and binary forms, with or without modification, |
||||
// are permitted provided that the following conditions are met: |
||||
// |
||||
// * Redistribution's of source code must retain the above copyright notice, |
||||
// this list of conditions and the following disclaimer. |
||||
// |
||||
// * Redistribution's in binary form must reproduce the above copyright notice, |
||||
// this list of conditions and the following disclaimer in the documentation |
||||
// and/or other oclMaterials provided with the distribution. |
||||
// |
||||
// * The name of the copyright holders may not be used to endorse or promote products |
||||
// derived from this software without specific prior written permission. |
||||
// |
||||
// This software is provided by the copyright holders and contributors as is and |
||||
// any express or implied warranties, including, but not limited to, the implied |
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed. |
||||
// In no event shall the Intel Corporation or contributors be liable for any direct, |
||||
// indirect, incidental, special, exemplary, or consequential damages |
||||
// (including, but not limited to, procurement of substitute goods or services; |
||||
// loss of use, data, or profits; or business interruption) however caused |
||||
// and on any theory of liability, whether in contract, strict liability, |
||||
// or tort (including negligence or otherwise) arising in any way out of |
||||
// the use of this software, even if advised of the possibility of such damage. |
||||
// |
||||
//M*/ |
||||
|
||||
///////////////////////////////////////////////////////// |
||||
//******************************************************* |
||||
// basicretinafilter |
||||
//////////////// _spatiotemporalLPfilter //////////////// |
||||
//_horizontalCausalFilter_addInput |
||||
kernel void horizontalCausalFilter_addInput( |
||||
global const float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int in_offset, |
||||
const int out_offset, |
||||
const float _tau, |
||||
const float _a |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global const float * iptr = |
||||
input + mad24(gid, elements_per_row, in_offset / 4); |
||||
global float * optr = |
||||
output + mad24(gid, elements_per_row, out_offset / 4); |
||||
|
||||
float res; |
||||
float4 in_v4, out_v4, res_v4 = (float4)(0); |
||||
//vectorize to increase throughput |
||||
for(int i = 0; i < cols / 4; ++i, iptr += 4, optr += 4) |
||||
{ |
||||
in_v4 = vload4(0, iptr); |
||||
out_v4 = vload4(0, optr); |
||||
|
||||
res_v4.x = in_v4.x + _tau * out_v4.x + _a * res_v4.w; |
||||
res_v4.y = in_v4.y + _tau * out_v4.y + _a * res_v4.x; |
||||
res_v4.z = in_v4.z + _tau * out_v4.z + _a * res_v4.y; |
||||
res_v4.w = in_v4.w + _tau * out_v4.w + _a * res_v4.z; |
||||
|
||||
vstore4(res_v4, 0, optr); |
||||
} |
||||
res = res_v4.w; |
||||
// there may be left some |
||||
for(int i = 0; i < cols % 4; ++i, ++iptr, ++optr) |
||||
{ |
||||
res = *iptr + _tau * *optr + _a * res; |
||||
*optr = res; |
||||
} |
||||
} |
||||
|
||||
//_horizontalAnticausalFilter |
||||
kernel void horizontalAnticausalFilter( |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int out_offset, |
||||
const float _a |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global float * optr = output + |
||||
mad24(gid + 1, elements_per_row, - 1 + out_offset / 4); |
||||
|
||||
float4 result = (float4)(0), out_v4; |
||||
// we assume elements_per_row is multple of 4 |
||||
for(int i = 0; i < elements_per_row / 4; ++i, optr -= 4) |
||||
{ |
||||
// shift left, `offset` is type `size_t` so it cannot be negative |
||||
out_v4 = vload4(0, optr - 3); |
||||
|
||||
result.w = out_v4.w + _a * result.x; |
||||
result.z = out_v4.z + _a * result.w; |
||||
result.y = out_v4.y + _a * result.z; |
||||
result.x = out_v4.x + _a * result.y; |
||||
|
||||
vstore4(result, 0, optr - 3); |
||||
} |
||||
} |
||||
|
||||
//_verticalCausalFilter |
||||
kernel void verticalCausalFilter( |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int out_offset, |
||||
const float _a |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= cols) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global float * optr = output + gid + out_offset / 4; |
||||
float result = 0; |
||||
for(int i = 0; i < rows; ++i, optr += elements_per_row) |
||||
{ |
||||
result = *optr + _a * result; |
||||
*optr = result; |
||||
} |
||||
} |
||||
|
||||
//_verticalCausalFilter |
||||
kernel void verticalAnticausalFilter_multGain( |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int out_offset, |
||||
const float _a, |
||||
const float _gain |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= cols) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global float * optr = output + (rows - 1) * elements_per_row + gid + out_offset / 4; |
||||
float result = 0; |
||||
for(int i = 0; i < rows; ++i, optr -= elements_per_row) |
||||
{ |
||||
result = *optr + _a * result; |
||||
*optr = _gain * result; |
||||
} |
||||
} |
||||
// |
||||
// end of _spatiotemporalLPfilter |
||||
///////////////////////////////////////////////////////////////////// |
||||
|
||||
//////////////// horizontalAnticausalFilter_Irregular //////////////// |
||||
kernel void horizontalAnticausalFilter_Irregular( |
||||
global float * output, |
||||
global float * buffer, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int out_offset, |
||||
const int buffer_offset |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global float * optr = |
||||
output + mad24(rows - gid, elements_per_row, -1 + out_offset / 4); |
||||
global float * bptr = |
||||
buffer + mad24(rows - gid, elements_per_row, -1 + buffer_offset / 4); |
||||
|
||||
float4 buf_v4, out_v4, res_v4 = (float4)(0); |
||||
|
||||
for(int i = 0; i < elements_per_row / 4; ++i, optr -= 4, bptr -= 4) |
||||
{ |
||||
buf_v4 = vload4(0, bptr - 3); |
||||
out_v4 = vload4(0, optr - 3); |
||||
|
||||
res_v4.w = out_v4.w + buf_v4.w * res_v4.x; |
||||
res_v4.z = out_v4.z + buf_v4.z * res_v4.w; |
||||
res_v4.y = out_v4.y + buf_v4.y * res_v4.z; |
||||
res_v4.x = out_v4.x + buf_v4.x * res_v4.y; |
||||
|
||||
vstore4(res_v4, 0, optr - 3); |
||||
} |
||||
} |
||||
|
||||
//////////////// verticalCausalFilter_Irregular //////////////// |
||||
kernel void verticalCausalFilter_Irregular( |
||||
global float * output, |
||||
global float * buffer, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int out_offset, |
||||
const int buffer_offset |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= cols) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global float * optr = output + gid + out_offset / 4; |
||||
global float * bptr = buffer + gid + buffer_offset / 4; |
||||
float result = 0; |
||||
for(int i = 0; i < rows; ++i, optr += elements_per_row, bptr += elements_per_row) |
||||
{ |
||||
result = *optr + *bptr * result; |
||||
*optr = result; |
||||
} |
||||
} |
||||
|
||||
//////////////// _adaptiveHorizontalCausalFilter_addInput //////////////// |
||||
kernel void adaptiveHorizontalCausalFilter_addInput( |
||||
global const float * input, |
||||
global const float * gradient, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int in_offset, |
||||
const int grad_offset, |
||||
const int out_offset |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
global const float * iptr = |
||||
input + mad24(gid, elements_per_row, in_offset / 4); |
||||
global const float * gptr = |
||||
gradient + mad24(gid, elements_per_row, grad_offset / 4); |
||||
global float * optr = |
||||
output + mad24(gid, elements_per_row, out_offset / 4); |
||||
|
||||
float4 in_v4, grad_v4, out_v4, res_v4 = (float4)(0); |
||||
for(int i = 0; i < cols / 4; ++i, iptr += 4, gptr += 4, optr += 4) |
||||
{ |
||||
in_v4 = vload4(0, iptr); |
||||
grad_v4 = vload4(0, gptr); |
||||
|
||||
res_v4.x = in_v4.x + grad_v4.x * res_v4.w; |
||||
res_v4.y = in_v4.y + grad_v4.y * res_v4.x; |
||||
res_v4.z = in_v4.z + grad_v4.z * res_v4.y; |
||||
res_v4.w = in_v4.w + grad_v4.w * res_v4.z; |
||||
|
||||
vstore4(res_v4, 0, optr); |
||||
} |
||||
for(int i = 0; i < cols % 4; ++i, ++iptr, ++gptr, ++optr) |
||||
{ |
||||
res_v4.w = *iptr + *gptr * res_v4.w; |
||||
*optr = res_v4.w; |
||||
} |
||||
} |
||||
|
||||
//////////////// _adaptiveVerticalAnticausalFilter_multGain //////////////// |
||||
kernel void adaptiveVerticalAnticausalFilter_multGain( |
||||
global const float * gradient, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const int grad_offset, |
||||
const int out_offset, |
||||
const float gain |
||||
) |
||||
{ |
||||
int gid = get_global_id(0); |
||||
if(gid >= cols) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
int start_idx = mad24(rows - 1, elements_per_row, gid); |
||||
|
||||
global const float * gptr = gradient + start_idx + grad_offset / 4; |
||||
global float * optr = output + start_idx + out_offset / 4; |
||||
|
||||
float result = 0; |
||||
for(int i = 0; i < rows; ++i, gptr -= elements_per_row, optr -= elements_per_row) |
||||
{ |
||||
result = *optr + *gptr * result; |
||||
*optr = gain * result; |
||||
} |
||||
} |
||||
|
||||
//////////////// _localLuminanceAdaptation //////////////// |
||||
// FIXME: |
||||
// This kernel seems to have precision problem on GPU |
||||
kernel void localLuminanceAdaptation( |
||||
global const float * luma, |
||||
global const float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float _localLuminanceAddon, |
||||
const float _localLuminanceFactor, |
||||
const float _maxInputValue |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
int offset = mad24(gidy, elements_per_row, gidx); |
||||
|
||||
float X0 = luma[offset] * _localLuminanceFactor + _localLuminanceAddon; |
||||
float input_val = input[offset]; |
||||
// output of the following line may be different between GPU and CPU |
||||
output[offset] = (_maxInputValue + X0) * input_val / (input_val + X0 + 0.00000000001f); |
||||
} |
||||
// end of basicretinafilter |
||||
//******************************************************* |
||||
///////////////////////////////////////////////////////// |
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////// |
||||
//****************************************************** |
||||
// magno |
||||
// TODO: this kernel has too many buffer accesses, better to make it |
||||
// vector read/write for fetch efficiency |
||||
kernel void amacrineCellsComputing( |
||||
global const float * opl_on, |
||||
global const float * opl_off, |
||||
global float * prev_in_on, |
||||
global float * prev_in_off, |
||||
global float * out_on, |
||||
global float * out_off, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float coeff |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
int offset = mad24(gidy, elements_per_row, gidx); |
||||
opl_on += offset; |
||||
opl_off += offset; |
||||
prev_in_on += offset; |
||||
prev_in_off += offset; |
||||
out_on += offset; |
||||
out_off += offset; |
||||
|
||||
float magnoXonPixelResult = coeff * (*out_on + *opl_on - *prev_in_on); |
||||
*out_on = fmax(magnoXonPixelResult, 0); |
||||
float magnoXoffPixelResult = coeff * (*out_off + *opl_off - *prev_in_off); |
||||
*out_off = fmax(magnoXoffPixelResult, 0); |
||||
|
||||
*prev_in_on = *opl_on; |
||||
*prev_in_off = *opl_off; |
||||
} |
||||
|
||||
///////////////////////////////////////////////////////// |
||||
//****************************************************** |
||||
// parvo |
||||
// TODO: this kernel has too many buffer accesses, needs optimization |
||||
kernel void OPL_OnOffWaysComputing( |
||||
global float4 * photo_out, |
||||
global float4 * horiz_out, |
||||
global float4 * bipol_on, |
||||
global float4 * bipol_off, |
||||
global float4 * parvo_on, |
||||
global float4 * parvo_off, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx * 4 >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
// we assume elements_per_row must be multiples of 4 |
||||
int offset = mad24(gidy, elements_per_row >> 2, gidx); |
||||
photo_out += offset; |
||||
horiz_out += offset; |
||||
bipol_on += offset; |
||||
bipol_off += offset; |
||||
parvo_on += offset; |
||||
parvo_off += offset; |
||||
|
||||
float4 diff = *photo_out - *horiz_out; |
||||
float4 isPositive;// = convert_float4(diff > (float4)(0.0f, 0.0f, 0.0f, 0.0f)); |
||||
isPositive.x = diff.x > 0.0f; |
||||
isPositive.y = diff.y > 0.0f; |
||||
isPositive.z = diff.z > 0.0f; |
||||
isPositive.w = diff.w > 0.0f; |
||||
float4 res_on = isPositive * diff; |
||||
float4 res_off = (isPositive - (float4)(1.0f)) * diff; |
||||
|
||||
*bipol_on = res_on; |
||||
*parvo_on = res_on; |
||||
|
||||
*bipol_off = res_off; |
||||
*parvo_off = res_off; |
||||
} |
||||
|
||||
///////////////////////////////////////////////////////// |
||||
//****************************************************** |
||||
// retinacolor |
||||
inline int bayerSampleOffset(int step, int rows, int x, int y) |
||||
{ |
||||
return mad24(y, step, x) + |
||||
((y % 2) + (x % 2)) * rows * step; |
||||
} |
||||
|
||||
|
||||
/////// colorMultiplexing ////// |
||||
kernel void runColorMultiplexingBayer( |
||||
global const float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
int offset = mad24(gidy, elements_per_row, gidx); |
||||
output[offset] = input[bayerSampleOffset(elements_per_row, rows, gidx, gidy)]; |
||||
} |
||||
|
||||
kernel void runColorDemultiplexingBayer( |
||||
global const float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
int offset = mad24(gidy, elements_per_row, gidx); |
||||
output[bayerSampleOffset(elements_per_row, rows, gidx, gidy)] = input[offset]; |
||||
} |
||||
|
||||
kernel void demultiplexAssign( |
||||
global const float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
int offset = bayerSampleOffset(elements_per_row, rows, gidx, gidy); |
||||
output[offset] = input[offset]; |
||||
} |
||||
|
||||
|
||||
//// normalizeGrayOutputCentredSigmoide |
||||
kernel void normalizeGrayOutputCentredSigmoide( |
||||
global const float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float meanval, |
||||
const float X0 |
||||
) |
||||
|
||||
{ |
||||
int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
int offset = mad24(gidy, elements_per_row, gidx); |
||||
|
||||
float input_val = input[offset]; |
||||
output[offset] = meanval + |
||||
(meanval + X0) * (input_val - meanval) / (fabs(input_val - meanval) + X0); |
||||
} |
||||
|
||||
//// normalize by photoreceptors density |
||||
kernel void normalizePhotoDensity( |
||||
global const float * chroma, |
||||
global const float * colorDensity, |
||||
global const float * multiplex, |
||||
global float * luma, |
||||
global float * demultiplex, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float pG |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
const int offset = mad24(gidy, elements_per_row, gidx); |
||||
int index = offset; |
||||
|
||||
float Cr = chroma[index] * colorDensity[index]; |
||||
index += elements_per_row * rows; |
||||
float Cg = chroma[index] * colorDensity[index]; |
||||
index += elements_per_row * rows; |
||||
float Cb = chroma[index] * colorDensity[index]; |
||||
|
||||
const float luma_res = (Cr + Cg + Cb) * pG; |
||||
luma[offset] = luma_res; |
||||
demultiplex[bayerSampleOffset(elements_per_row, rows, gidx, gidy)] = |
||||
multiplex[offset] - luma_res; |
||||
} |
||||
|
||||
|
||||
|
||||
//////// computeGradient /////// |
||||
// TODO: |
||||
// this function maybe accelerated by image2d_t or lds |
||||
kernel void computeGradient( |
||||
global const float * luma, |
||||
global float * gradient, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row |
||||
) |
||||
{ |
||||
int gidx = get_global_id(0) + 2, gidy = get_global_id(1) + 2; |
||||
if(gidx >= cols - 2 || gidy >= rows - 2) |
||||
{ |
||||
return; |
||||
} |
||||
int offset = mad24(gidy, elements_per_row, gidx); |
||||
luma += offset; |
||||
|
||||
// horizontal and vertical local gradients |
||||
const float v_grad = fabs(luma[elements_per_row] - luma[- elements_per_row]); |
||||
const float h_grad = fabs(luma[1] - luma[-1]); |
||||
|
||||
// neighborhood horizontal and vertical gradients |
||||
const float cur_val = luma[0]; |
||||
const float v_grad_p = fabs(cur_val - luma[- 2 * elements_per_row]); |
||||
const float h_grad_p = fabs(cur_val - luma[- 2]); |
||||
const float v_grad_n = fabs(cur_val - luma[2 * elements_per_row]); |
||||
const float h_grad_n = fabs(cur_val - luma[2]); |
||||
|
||||
const float horiz_grad = 0.5f * h_grad + 0.25f * (h_grad_p + h_grad_n); |
||||
const float verti_grad = 0.5f * v_grad + 0.25f * (v_grad_p + v_grad_n); |
||||
const bool is_vertical_greater = horiz_grad < verti_grad; |
||||
|
||||
gradient[offset + elements_per_row * rows] = is_vertical_greater ? 0.06f : 0.57f; |
||||
gradient[offset ] = is_vertical_greater ? 0.57f : 0.06f; |
||||
} |
||||
|
||||
|
||||
/////// substractResidual /////// |
||||
kernel void substractResidual( |
||||
global float * input, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float pR, |
||||
const float pG, |
||||
const float pB |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
int indices [3] = |
||||
{ |
||||
mad24(gidy, elements_per_row, gidx), |
||||
mad24(gidy + rows, elements_per_row, gidx), |
||||
mad24(gidy + 2 * rows, elements_per_row, gidx) |
||||
}; |
||||
float vals[3] = {input[indices[0]], input[indices[1]], input[indices[2]]}; |
||||
float residu = pR * vals[0] + pG * vals[1] + pB * vals[2]; |
||||
|
||||
input[indices[0]] = vals[0] - residu; |
||||
input[indices[1]] = vals[1] - residu; |
||||
input[indices[2]] = vals[2] - residu; |
||||
} |
||||
|
||||
///// clipRGBOutput_0_maxInputValue ///// |
||||
kernel void clipRGBOutput_0_maxInputValue( |
||||
global float * input, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float maxVal |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
const int offset = mad24(gidy, elements_per_row, gidx); |
||||
float val = input[offset]; |
||||
val = clamp(val, 0.0f, maxVal); |
||||
input[offset] = val; |
||||
} |
||||
|
||||
//// normalizeGrayOutputNearZeroCentreredSigmoide //// |
||||
kernel void normalizeGrayOutputNearZeroCentreredSigmoide( |
||||
global float * input, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float maxVal, |
||||
const float X0cube |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
const int offset = mad24(gidy, elements_per_row, gidx); |
||||
float currentCubeLuminance = input[offset]; |
||||
currentCubeLuminance = currentCubeLuminance * currentCubeLuminance * currentCubeLuminance; |
||||
output[offset] = currentCubeLuminance * X0cube / (X0cube + currentCubeLuminance); |
||||
} |
||||
|
||||
//// centerReductImageLuminance //// |
||||
kernel void centerReductImageLuminance( |
||||
global float * input, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row, |
||||
const float mean, |
||||
const float std_dev |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
const int offset = mad24(gidy, elements_per_row, gidx); |
||||
|
||||
float val = input[offset]; |
||||
input[offset] = (val - mean) / std_dev; |
||||
} |
||||
|
||||
//// inverseValue //// |
||||
kernel void inverseValue( |
||||
global float * input, |
||||
const int cols, |
||||
const int rows, |
||||
const int elements_per_row |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
const int offset = mad24(gidy, elements_per_row, gidx); |
||||
input[offset] = 1.f / input[offset]; |
||||
} |
||||
|
||||
#define CV_PI 3.1415926535897932384626433832795 |
||||
|
||||
//// _processRetinaParvoMagnoMapping //// |
||||
kernel void processRetinaParvoMagnoMapping( |
||||
global float * parvo, |
||||
global float * magno, |
||||
global float * output, |
||||
const int cols, |
||||
const int rows, |
||||
const int halfCols, |
||||
const int halfRows, |
||||
const int elements_per_row, |
||||
const float minDistance |
||||
) |
||||
{ |
||||
const int gidx = get_global_id(0), gidy = get_global_id(1); |
||||
if(gidx >= cols || gidy >= rows) |
||||
{ |
||||
return; |
||||
} |
||||
const int offset = mad24(gidy, elements_per_row, gidx); |
||||
|
||||
float distanceToCenter = |
||||
sqrt(((float)(gidy - halfRows) * (gidy - halfRows) + (gidx - halfCols) * (gidx - halfCols))); |
||||
|
||||
float a = distanceToCenter < minDistance ? |
||||
(0.5f + 0.5f * (float)cos(CV_PI * distanceToCenter / minDistance)) : 0; |
||||
float b = 1.f - a; |
||||
|
||||
output[offset] = parvo[offset] * a + magno[offset] * b; |
||||
} |
@ -1,44 +0,0 @@ |
||||
/*M///////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
//
|
||||
// By downloading, copying, installing or using the software you agree to this license.
|
||||
// If you do not agree to this license, do not download, install,
|
||||
// copy or use the software.
|
||||
//
|
||||
//
|
||||
// Intel License Agreement
|
||||
// For Open Source Computer Vision Library
|
||||
//
|
||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||
// Third party copyrights are property of their respective owners.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// * Redistribution's of source code must retain the above copyright notice,
|
||||
// this list of conditions and the following disclaimer.
|
||||
//
|
||||
// * Redistribution's in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
||||
// derived from this software without specific prior written permission.
|
||||
//
|
||||
// This software is provided by the copyright holders and contributors "as is" and
|
||||
// any express or implied warranties, including, but not limited to, the implied
|
||||
// warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||
// In no event shall the Intel Corporation or contributors be liable for any direct,
|
||||
// indirect, incidental, special, exemplary, or consequential damages
|
||||
// (including, but not limited to, procurement of substitute goods or services;
|
||||
// loss of use, data, or profits; or business interruption) however caused
|
||||
// and on any theory of liability, whether in contract, strict liability,
|
||||
// or tort (including negligence or otherwise) arising in any way out of
|
||||
// the use of this software, even if advised of the possibility of such damage.
|
||||
//
|
||||
//M*/
|
||||
|
||||
#include "precomp.hpp" |
||||
|
||||
/* End of file. */ |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue