Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
168d1dc1
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
168d1dc1
编写于
8月 27, 2013
作者:
P
peng xiao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make some tweaks to make `sum` operations less frequently
上级
525b6eca
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
26 addition
and
10 deletion
+26
-10
modules/ocl/src/opencl/tvl1flow.cl
modules/ocl/src/opencl/tvl1flow.cl
+8
-4
modules/ocl/src/tvl1flow.cpp
modules/ocl/src/tvl1flow.cpp
+18
-6
未找到文件。
modules/ocl/src/opencl/tvl1flow.cl
浏览文件 @
168d1dc1
...
...
@@ -341,7 +341,8 @@ __kernel void estimateUKernel(__global const float* I1wx, int I1wx_col, int I1wx
int
u1_offset_x,
int
u1_offset_y,
int
u2_offset_x,
int
u2_offset_y
)
int
u2_offset_y,
char
calc_error
)
{
//const
int
x
=
blockIdx.x
*
blockDim.x
+
threadIdx.x
;
...
...
@@ -399,9 +400,12 @@ __kernel void estimateUKernel(__global const float* I1wx, int I1wx_col, int I1wx
u1[
(
y
+
u1_offset_y
)
*
u1_step
+
x
+
u1_offset_x]
=
u1NewVal
;
u2[
(
y
+
u2_offset_y
)
*
u2_step
+
x
+
u2_offset_x]
=
u2NewVal
;
const
float
n1
=
(
u1OldVal
-
u1NewVal
)
*
(
u1OldVal
-
u1NewVal
)
;
const
float
n2
=
(
u2OldVal
-
u2NewVal
)
*
(
u2OldVal
-
u2NewVal
)
;
error[y
*
I1wx_step
+
x]
=
n1
+
n2
;
if
(
calc_error
)
{
const
float
n1
=
(
u1OldVal
-
u1NewVal
)
*
(
u1OldVal
-
u1NewVal
)
;
const
float
n2
=
(
u2OldVal
-
u2NewVal
)
*
(
u2OldVal
-
u2NewVal
)
;
error[y
*
I1wx_step
+
x]
=
n1
+
n2
;
}
}
}
modules/ocl/src/tvl1flow.cpp
浏览文件 @
168d1dc1
...
...
@@ -229,18 +229,29 @@ void cv::ocl::OpticalFlowDual_TVL1_OCL::procOneScale(const oclMat &I0, const ocl
warpBackward
(
I0
,
I1
,
I1x
,
I1y
,
u1
,
u2
,
I1w
,
I1wx
,
I1wy
,
grad
,
rho_c
);
double
error
=
numeric_limits
<
double
>::
max
();
double
prev_error
=
0
;
for
(
int
n
=
0
;
error
>
scaledEpsilon
&&
n
<
iterations
;
++
n
)
{
// some tweaks to make sum operation less frequently
char
calc_error
=
(
n
&
0x1
)
&&
(
prev_error
<
scaledEpsilon
);
estimateU
(
I1wx
,
I1wy
,
grad
,
rho_c
,
p11
,
p12
,
p21
,
p22
,
u1
,
u2
,
diff
,
l_t
,
static_cast
<
float
>
(
theta
));
error
=
ocl
::
sum
(
diff
)[
0
];
u1
,
u2
,
diff
,
l_t
,
static_cast
<
float
>
(
theta
),
calc_error
);
if
(
calc_error
)
{
error
=
ocl
::
sum
(
diff
)[
0
];
prev_error
=
error
;
}
else
{
error
=
numeric_limits
<
double
>::
max
();
prev_error
-=
scaledEpsilon
;
}
estimateDualVariables
(
u1
,
u2
,
p11
,
p12
,
p21
,
p22
,
taut
);
}
}
}
void
cv
::
ocl
::
OpticalFlowDual_TVL1_OCL
::
collectGarbage
()
...
...
@@ -348,7 +359,7 @@ void ocl_tvl1flow::estimateDualVariables(oclMat &u1, oclMat &u2, oclMat &p11, oc
void
ocl_tvl1flow
::
estimateU
(
oclMat
&
I1wx
,
oclMat
&
I1wy
,
oclMat
&
grad
,
oclMat
&
rho_c
,
oclMat
&
p11
,
oclMat
&
p12
,
oclMat
&
p21
,
oclMat
&
p22
,
oclMat
&
u1
,
oclMat
&
u2
,
oclMat
&
error
,
float
l_t
,
float
theta
)
oclMat
&
u2
,
oclMat
&
error
,
float
l_t
,
float
theta
,
char
calc_error
)
{
Context
*
clCxt
=
I1wx
.
clCxt
;
...
...
@@ -401,7 +412,8 @@ void ocl_tvl1flow::estimateU(oclMat &I1wx, oclMat &I1wy, oclMat &grad,
args
.
push_back
(
make_pair
(
sizeof
(
cl_int
),
(
void
*
)
&
u1_offset_y
));
args
.
push_back
(
make_pair
(
sizeof
(
cl_int
),
(
void
*
)
&
u2_offset_x
));
args
.
push_back
(
make_pair
(
sizeof
(
cl_int
),
(
void
*
)
&
u2_offset_y
));
args
.
push_back
(
make_pair
(
sizeof
(
cl_char
),
(
void
*
)
&
calc_error
));
openCLExecuteKernel
(
clCxt
,
&
tvl1flow
,
kernelName
,
globalThread
,
localThread
,
args
,
-
1
,
-
1
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录