![]() |
ETRI IVCL 1.0.0
Acceleration SW Platform for Ondevice
|
#include "CL/cl.hpp"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <cmath>
#include <math.h>
#include <vector>
#include <chrono>
#include <float.h>
Macros | |
#define | __CL_ENABLE_EXCEPTIONS |
#define | USE_CAM false |
whether using camera or image More... | |
#define | MMAX(a, b) (((a)>(b))?(a):(b)) |
#define | MMIN(a, b) (((a)<(b))?(a):(b)) |
Functions | |
int | openCL_Init () |
Declare for OpenCL code execution. More... | |
void | openCL_BufferSet () |
Declare for OpenCL buffer. More... | |
void | openCL_ImageSet () |
Declare for OpenCL Image2D. More... | |
void | openCL_ArgumentSet () |
Declare for OpenCL argument. More... | |
int | openCV_Init () |
void | costComputation_SAD (float ***datacost, float **left, float **right, int width, int height, int dispRange, int mSize) |
Native SAD function. More... | |
void | costComputation_ASW (float ***datacost, float **left, float **right, int width, int height, int dispRange, int mSize) |
Compute stereo datacost using a window of Adaptive Support Weight (ASW) More... | |
void | winnerTakesALL (float ***datacost, uchar *result, int height, int width, int dispRange) |
Find the minimum cost for each pixel using winner takes all algorithm. More... | |
void | startMethod (int, void *) |
void | selectASW (int, void *) |
void | selectSAD (int, void *) |
void | mSizeChanged (int) |
void | changeStaticImg (int) |
void | qt5_Init () |
int | index_y (int y, int height) |
PADDING Y. More... | |
int | index_x (int x, int width) |
PADDING X. More... | |
void | filter_Gaussian (float **inputL, float **inputR, float **outputL, float **outputR, int width, int height) |
void | filter_Sobel (float **inputL, float **inputR, float **outputL, float **outputR, int width, int height) |
float *** | SGM (float **left, float ***datacost, int width, int height, int dispRange, float Penalty1, float Penalty2) |
Refine stereo datacost using Semi Global Mathcing (Native) More... | |
void | iterate_direction_ocl (int dirx, int diry, int width, int height, int disp_range, float p1, float p2) |
CPU part. More... | |
void | optimizeBeliefPropagation (float ***datacost, int width, int height, int dispRange, int HIER_ITER, int HIER_LEVEL, float CONT_COST, float DISCONT_COST) |
Refine stereo datacost using Hierarchy Belief Propagation. More... | |
float | evaluation (Mat gt, double gt_scaling, Mat &errorMap, float *result, float focal_length, float base_line, int dispRange, float d_val[], float threshold) |
float | evaluation (Mat gt, double gt_scaling, Mat &errorMap, uchar *result, float focal_length, float base_line, int dispRange, float d_val[], float threshold) |
int | valid_pixel_cnt (Mat gt, double gt_scaling, Mat &validROI, float focal_length, float base_line, int dispRange, float d_val[]) |
Variables | |
char | platformChooser |
volatile bool | flagCountEachTime |
volatile bool | sad_selected |
volatile bool | onPreFilter |
volatile bool | onlyGaussian |
whether using gaussian only or gaussian + sobel More... | |
volatile bool | onPostFilter |
uchar | onMethod |
volatile bool | onlyGPU |
whether using CPU or GPU More... | |
const bool | newCAM |
CAUTION !!! ask about parameter before change it! More... | |
int | frameWidth |
The input image width. More... | |
int | frameHeight |
The input image height. More... | |
int | totalPixels |
frameWidth * frameHeight More... | |
int | dispRange |
int | dispScale |
int | mSize |
cv::Mat | intrinsicL |
cv::Mat | intrinsicR |
cv::Mat | Translation |
cv::Mat | om |
cv::Mat | Rotation |
cv::Mat | distCoeffL |
cv::Mat | distCoeffR |
cv::Mat | imgDistL |
cv::Mat | imgDistR |
cv::Mat | imgRectiL |
cv::Mat | imgRectiR |
cv::Mat | R1 |
cv::Mat | R2 |
cv::Mat | P1 |
cv::Mat | P2 |
cv::Mat | Q |
cv::Mat | map1x |
cv::Mat | map1y |
cv::Mat | map2x |
cv::Mat | map2y |
cv::Mat | rectResultLeft |
cv::Mat | rectResultRight |
cv::Mat | RIden |
cv::Mat | rectResultFrame |
cl_int | err |
vector< cl::Platform > | platforms |
cl::Context | context |
vector< cl::Device > | devices |
cl::CommandQueue | queue1 |
cl::CommandQueue | queue2 |
cl::Kernel | gGaussian_8bit |
cl::Kernel | gGaussian_8bit_image |
cl::Kernel | gSobel_8bit |
cl::Kernel | gSobel_8bit_image |
cl::Kernel | gSAD_kernel |
cl::Kernel | gSAD_image_kernel |
cl::Kernel | gASW_kernel |
cl::Kernel | gASW_image_kernel |
cl::Kernel | gWTA_char |
cl::Kernel | gWTA_float |
cl::Kernel | gRectifyL_8bit |
kernel /// More... | |
cl::Kernel | gRectifyR_8bit |
cl::Kernel | evaluate_path_ocl |
cl::Kernel | iterate_direction_dirxpos_ocl |
cl::Kernel | iterate_direction_dirypos_ocl |
cl::Kernel | iterate_direction_dirxneg_ocl |
cl::Kernel | iterate_direction_diryneg_ocl |
cl::Kernel | inplace_sum_views_ocl |
cl::Kernel | Kernel_InitHierCost |
cl::Kernel | Kernel_HierBP |
cl::Kernel | Kernel_UpdateCostLayer |
cl::Kernel | Kernel_FinalBP |
cl::Buffer | bufferInA |
buffer /// More... | |
cl::Buffer | bufferInB |
cl::Buffer | bufferInL |
cl::Buffer | bufferInR |
cl::Buffer | bufferOutA |
cl::Buffer | bufferOutB |
cl::Buffer | bufferOutL |
cl::Buffer | bufferOutR |
cl::Buffer | bufferGaussianL |
cl::Buffer | bufferGaussianR |
cl::Buffer | bufferSobelL |
cl::Buffer | bufferSobelR |
cl::Buffer | bufferDisp |
cl::Buffer | bufferDispMid |
cl::Buffer | bufferDispFinal |
cl::Buffer | bufferDispFinalFloat |
cl::Image2D | imageInL |
Image2D ///. More... | |
cl::Image2D | imageInR |
cl::Image2D | imageGaussianL |
cl::Image2D | imageGaussianR |
cl::Buffer | devPtr_accumulated_costs |
cl::Buffer | devPtr_dir_accumulated_costs |
cl::Buffer ** | bufferHierCost |
cl::Buffer | m_u |
cl::Buffer | m_l |
cl::Buffer | m_d |
cl::Buffer | m_r |
cl::Buffer | temp_m_u |
cl::Buffer | temp_m_l |
cl::Buffer | temp_m_d |
cl::Buffer | temp_m_r |
cl::Buffer | bufferZero |
int | selectedImg |
volatile bool | flagStartMethod |
volatile bool | flagFinishMethod |
volatile bool | nextImg |
float | minSAD_cost |
float | maxSAD_cost |
float | minASW_cost |
float | maxASW_cost |
float | sad_penalty1 |
GPU part. More... | |
float | sad_penalty2 |
float | asw_penalty1 |
float | asw_penalty2 |
const int | HIER_LEVELS = 3 |
The number of hierarchy. More... | |
const int | HIER_ITER = 8 |
BP interation per one Hierarchy. More... | |
float * | zeros |
float * | zeros_dispRange |
#define __CL_ENABLE_EXCEPTIONS |
#define MMAX | ( | a, | |
b | |||
) | (((a)>(b))?(a):(b)) |
#define MMIN | ( | a, | |
b | |||
) | (((a)<(b))?(a):(b)) |
#define USE_CAM false |
whether using camera or image
void changeStaticImg | ( | int | img | ) |
void costComputation_ASW | ( | float *** | datacost, |
float ** | left, | ||
float ** | right, | ||
int | width, | ||
int | height, | ||
int | dispRange, | ||
int | mSize | ||
) |
Compute stereo datacost using a window of Adaptive Support Weight (ASW)
void costComputation_SAD | ( | float *** | datacost, |
float ** | left, | ||
float ** | right, | ||
int | width, | ||
int | height, | ||
int | dispRange, | ||
int | mSize | ||
) |
Native SAD function.
float evaluation | ( | Mat | gt, |
double | gt_scaling, | ||
Mat & | errorMap, | ||
float * | result, | ||
float | focal_length, | ||
float | base_line, | ||
int | dispRange, | ||
float | d_val[], | ||
float | threshold_ | ||
) |
Evaluate the depth map (DISP_SPLIT == True)
gt | Ground truth depth image |
gt_scaling | Scale the depth image (according to ground truth) |
errorMap | Error map in the result image (compared with GT) |
result | Input depth image |
focal_length | Camera focal length |
base_line | The distance between the stereo camera |
dispRange | The number of pixels for matching comparison |
d_val | range for evaluation (array) |
threshold_ |
float evaluation | ( | Mat | gt, |
double | gt_scaling, | ||
Mat & | errorMap, | ||
uchar * | result, | ||
float | focal_length, | ||
float | base_line, | ||
int | dispRange, | ||
float | d_val[], | ||
float | threshold_ | ||
) |
Evaluate the depth map (DISP_SPLIT == False)
gt | Ground truth depth image |
gt_scaling | Scale the depth image (according to ground truth) |
errorMap | Error map in the result image (compared with GT) |
result | Input depth image |
focal_length | Camera focal length |
base_line | The distance between the stereo camera |
dispRange | The number of pixels for matching comparison |
d_val | range for evaluation (array) |
threshold_ |
void filter_Gaussian | ( | float ** | inputL, |
float ** | inputR, | ||
float ** | outputL, | ||
float ** | outputR, | ||
int | width, | ||
int | height | ||
) |
Perform 5x5 Gaussian filtering on an image (Native)
inputL | Left input image |
inputR | Right input image |
outputL | The Gaussian filtered left image |
outputR | The Gaussian filtered right image |
width | The input image width |
height | The input image height |
void filter_Sobel | ( | float ** | inputL, |
float ** | inputR, | ||
float ** | outputL, | ||
float ** | outputR, | ||
int | width, | ||
int | height | ||
) |
Perform 5x5 Sobel filtering on an image (Native)
inputL | Left input image |
inputR | Right input image |
outputL | The Gaussian filtered left image |
outputR | The Gaussian filtered right image |
width | The input image width |
height | The input image height |
int index_x | ( | int | x, |
int | width | ||
) |
PADDING X.
int index_y | ( | int | y, |
int | height | ||
) |
PADDING Y.
void iterate_direction_ocl | ( | int | dirx, |
int | diry, | ||
int | width, | ||
int | height, | ||
int | disp_range, | ||
float | penalty1, | ||
float | penalty2 | ||
) |
CPU part.
Dynamically iterate horizontally/vertically in the up/down direction
CPU part.
void mSizeChanged | ( | int | ms | ) |
void openCL_ArgumentSet | ( | ) |
Declare for OpenCL argument.
SAD ///
ASW ///
BP !!!! ///
void openCL_BufferSet | ( | ) |
Declare for OpenCL buffer.
void openCL_ImageSet | ( | ) |
Declare for OpenCL Image2D.
int openCL_Init | ( | ) |
Declare for OpenCL code execution.
THIS NEW KENEL CODE USES UCHAR4 VECTOR
int openCV_Init | ( | ) |
void optimizeBeliefPropagation | ( | float *** | datacost, |
int | width, | ||
int | height, | ||
int | dispRange, | ||
int | HIER_ITER, | ||
int | HIER_LEVEL, | ||
float | CONT_COST, | ||
float | DISCONT_COST | ||
) |
Refine stereo datacost using Hierarchy Belief Propagation.
void qt5_Init | ( | ) |
void selectASW | ( | int | state, |
void * | val | ||
) |
void selectSAD | ( | int | state, |
void * | val | ||
) |
float *** SGM | ( | float ** | left, |
float *** | datacost, | ||
int | width, | ||
int | height, | ||
int | dispRange, | ||
float | Penalty1, | ||
float | Penalty2 | ||
) |
Refine stereo datacost using Semi Global Mathcing (Native)
void startMethod | ( | int | state, |
void * | val | ||
) |
int valid_pixel_cnt | ( | Mat | gt, |
double | gt_scaling, | ||
Mat & | validROI, | ||
float | focal_length, | ||
float | base_line, | ||
int | dispRange, | ||
float | d_val[] | ||
) |
Check valid pixels in depth map
d_val[0] < pixel distance in GT < d_val[1]
void winnerTakesALL | ( | float *** | datacost, |
uchar * | result, | ||
int | height, | ||
int | width, | ||
int | dispRange | ||
) |
Find the minimum cost for each pixel using winner takes all algorithm.
|
extern |
|
extern |
|
extern |
cl::Buffer bufferDispFinal |
cl::Buffer bufferDispFinalFloat |
cl::Buffer bufferDispMid |
|
extern |
cl::Buffer bufferGaussianR |
|
extern |
|
extern |
buffer ///
cl::Buffer bufferInB |
cl::Buffer bufferInL |
cl::Buffer bufferInR |
|
extern |
cl::Buffer bufferOutB |
cl::Buffer bufferOutL |
cl::Buffer bufferOutR |
cl::Buffer bufferSobelL |
cl::Buffer bufferSobelR |
|
extern |
|
extern |
|
extern |
|
extern |
cl::Buffer devPtr_dir_accumulated_costs |
|
extern |
The number of pixels for matching comparison
68 : Mobeius, 48 : Teddy
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
The input image height.
|
extern |
The input image width.
cl::Kernel gASW_image_kernel |
|
extern |
|
extern |
cl::Kernel gGaussian_8bit_image |
|
extern |
kernel ///
cl::Kernel gRectifyR_8bit |
cl::Kernel gSAD_image_kernel |
|
extern |
|
extern |
cl::Kernel gSobel_8bit_image |
|
extern |
cl::Kernel gWTA_float |
const int HIER_ITER = 8 |
BP interation per one Hierarchy.
const int HIER_LEVELS = 3 |
The number of hierarchy.
cl::Image2D imageGaussianL |
cl::Image2D imageGaussianR |
|
extern |
Image2D ///.
cl::Image2D imageInR |
|
extern |
|
extern |
|
extern |
|
extern |
cl::Kernel inplace_sum_views_ocl |
|
extern |
|
extern |
cl::Kernel iterate_direction_dirxneg_ocl |
cl::Kernel iterate_direction_dirxpos_ocl |
cl::Kernel iterate_direction_diryneg_ocl |
cl::Kernel iterate_direction_dirypos_ocl |
|
extern |
|
extern |
|
extern |
|
extern |
cl::Buffer m_d |
cl::Buffer m_l |
cl::Buffer m_r |
|
extern |
|
extern |
cv::Mat map1y |
cv::Mat map2x |
cv::Mat map2y |
float maxASW_cost |
float maxSAD_cost |
|
extern |
|
extern |
|
extern |
|
extern |
CAUTION !!! ask about parameter before change it!
|
extern |
|
extern |
|
extern |
whether using gaussian only or gaussian + sobel
|
extern |
whether using CPU or GPU
|
extern |
Choose depth estimation method
0 for desktop or laptop with non-optimus
1 for laptop with optimus
2 for embedded board (e.g. Odroid-XU4)
|
extern |
|
extern |
cv::Mat P1 |
cv::Mat P2 |
|
extern |
Choose Platform
0 for desktop or laptop with non-optimus
1 for laptop with optimus
2 for embedded board (e.g. Odroid-XU4)
|
extern |
cv::Mat Q |
|
extern |
cl::CommandQueue queue2 |
|
extern |
cv::Mat R2 |
|
extern |
|
extern |
cv::Mat rectResultRight |
|
extern |
|
extern |
|
extern |
GPU part.
|
extern |
|
extern |
|
extern |
cl::Buffer temp_m_d |
cl::Buffer temp_m_l |
cl::Buffer temp_m_r |
|
extern |
|
extern |
frameWidth * frameHeight
|
extern |
|
extern |
|
extern |