Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
30222c7b
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
30222c7b
编写于
10月 28, 2014
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3359 from akarsakov:ocl_buildMaps
上级
dee56598
ebfaf4c5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
27 deletion
+30
-27
modules/stitching/include/opencv2/stitching/detail/warpers.hpp
...es/stitching/include/opencv2/stitching/detail/warpers.hpp
+1
-0
modules/stitching/src/opencl/warpers.cl
modules/stitching/src/opencl/warpers.cl
+21
-24
modules/stitching/src/warpers.cpp
modules/stitching/src/warpers.cpp
+8
-3
未找到文件。
modules/stitching/include/opencv2/stitching/detail/warpers.hpp
浏览文件 @
30222c7b
...
...
@@ -135,6 +135,7 @@ public:
Point2f
warpPoint
(
const
Point2f
&
pt
,
InputArray
K
,
InputArray
R
,
InputArray
T
);
virtual
Rect
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
OutputArray
xmap
,
OutputArray
ymap
);
Rect
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
OutputArray
xmap
,
OutputArray
ymap
);
virtual
Point
warp
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
int
interp_mode
,
int
border_mode
,
OutputArray
dst
);
...
...
modules/stitching/src/opencl/warpers.cl
浏览文件 @
30222c7b
...
...
@@ -56,25 +56,27 @@ __kernel void buildWarpPlaneMaps(__global uchar * xmapptr, int xmap_step, int xm
int
xmap_index
=
mad24
(
dv0,
xmap_step,
mad24
(
du,
(
int
)
sizeof
(
float
)
,
xmap_offset
))
;
int
ymap_index
=
mad24
(
dv0,
ymap_step,
mad24
(
du,
(
int
)
sizeof
(
float
)
,
ymap_offset
))
;
float
u
=
tl_u
+
du
;
float
x_
=
fma
(
u,
scale,
-ct[0]
)
;
float
ct1
=
1
-
ct[2]
;
for
(
int
dv
=
dv0,
dv1
=
min
(
rows,
dv0
+
rowsPerWI
)
; dv < dv1; ++dv, xmap_index += xmap_step,
ymap_index
+=
ymap_step
)
{
__global
float
*
xmap
=
(
__global
float
*
)(
xmapptr
+
xmap_index
)
;
__global
float
*
ymap
=
(
__global
float
*
)(
ymapptr
+
ymap_index
)
;
float
u
=
tl_u
+
du
;
float
v
=
tl_v
+
dv
;
float
y_
=
fma
(
v,
scale,
-ct[1]
)
;
float
x_
=
u
/
scale
-
ct[0]
;
float
y_
=
v
/
scale
-
ct[1]
;
float
ct1
=
1
-
ct[2]
;
float
x
=
fma
(
ck_rinv[0],
x_,
fma
(
ck_rinv[1],
y_,
ck_rinv[2]
*
ct1
))
;
float
y
=
fma
(
ck_rinv[3],
x_,
fma
(
ck_rinv[4],
y_,
ck_rinv[5]
*
ct1
))
;
float
z
=
fma
(
ck_rinv[6],
x_,
fma
(
ck_rinv[7],
y_,
ck_rinv[8]
*
ct1
))
;
x
/=
z
;
y
/=
z
;
if
(
z
!=
0
)
x
/=
z,
y
/=
z
;
else
x
=
y
=
-1
;
xmap[0]
=
x
;
ymap[0]
=
y
;
...
...
@@ -94,22 +96,19 @@ __kernel void buildWarpCylindricalMaps(__global uchar * xmapptr, int xmap_step,
int
xmap_index
=
mad24
(
dv0,
xmap_step,
mad24
(
du,
(
int
)
sizeof
(
float
)
,
xmap_offset
))
;
int
ymap_index
=
mad24
(
dv0,
ymap_step,
mad24
(
du,
(
int
)
sizeof
(
float
)
,
ymap_offset
))
;
float
u
=
(
tl_u
+
du
)
*
scale
;
float
x_,
z_
;
x_
=
sincos
(
u,
&z_
)
;
for
(
int
dv
=
dv0,
dv1
=
min
(
rows,
dv0
+
rowsPerWI
)
; dv < dv1; ++dv, xmap_index += xmap_step,
ymap_index
+=
ymap_step
)
{
__global
float
*
xmap
=
(
__global
float
*
)(
xmapptr
+
xmap_index
)
;
__global
float
*
ymap
=
(
__global
float
*
)(
ymapptr
+
ymap_index
)
;
float
u
=
tl_u
+
du
;
float
v
=
tl_v
+
dv
;
float
x,
y
;
u
/=
scale
;
float
x_,
y_,
z_
;
x_
=
sincos
(
u,
&z_
)
;
y_
=
v
/
scale
;
float
y_
=
(
tl_v
+
dv
)
*
scale
;
float
z
;
float
x,
y,
z
;
x
=
fma
(
ck_rinv[0],
x_,
fma
(
ck_rinv[1],
y_,
ck_rinv[2]
*
z_
))
;
y
=
fma
(
ck_rinv[3],
x_,
fma
(
ck_rinv[4],
y_,
ck_rinv[5]
*
z_
))
;
z
=
fma
(
ck_rinv[6],
x_,
fma
(
ck_rinv[7],
y_,
ck_rinv[8]
*
z_
))
;
...
...
@@ -137,25 +136,23 @@ __kernel void buildWarpSphericalMaps(__global uchar * xmapptr, int xmap_step, in
int
xmap_index
=
mad24
(
dv0,
xmap_step,
mad24
(
du,
(
int
)
sizeof
(
float
)
,
xmap_offset
))
;
int
ymap_index
=
mad24
(
dv0,
ymap_step,
mad24
(
du,
(
int
)
sizeof
(
float
)
,
ymap_offset
))
;
float
u
=
(
tl_u
+
du
)
*
scale
;
float
cosu,
sinu
=
sincos
(
u,
&cosu
)
;
for
(
int
dv
=
dv0,
dv1
=
min
(
rows,
dv0
+
rowsPerWI
)
; dv < dv1; ++dv, xmap_index += xmap_step,
ymap_index
+=
ymap_step
)
{
__global
float
*
xmap
=
(
__global
float
*
)(
xmapptr
+
xmap_index
)
;
__global
float
*
ymap
=
(
__global
float
*
)(
ymapptr
+
ymap_index
)
;
float
u
=
tl_u
+
du
;
float
v
=
tl_v
+
dv
;
float
x,
y
;
v
/=
scale
;
u
/=
scale
;
float
v
=
(
tl_v
+
dv
)
*
scale
;
float
cosv,
sinv
=
sincos
(
v,
&cosv
)
,
cosu,
sinu
=
sincos
(
u,
&cosu
)
;
float
cosv,
sinv
=
sincos
(
v,
&cosv
)
;
float
x_
=
sinv
*
sinu
;
float
y_
=
-cosv
;
float
z_
=
sinv
*
cosu
;
float
z
;
float
x,
y,
z
;
x
=
fma
(
ck_rinv[0],
x_,
fma
(
ck_rinv[1],
y_,
ck_rinv[2]
*
z_
))
;
y
=
fma
(
ck_rinv[3],
x_,
fma
(
ck_rinv[4],
y_,
ck_rinv[5]
*
z_
))
;
z
=
fma
(
ck_rinv[6],
x_,
fma
(
ck_rinv[7],
y_,
ck_rinv[8]
*
z_
))
;
...
...
modules/stitching/src/warpers.cpp
浏览文件 @
30222c7b
...
...
@@ -87,6 +87,11 @@ Point2f PlaneWarper::warpPoint(const Point2f &pt, InputArray K, InputArray R, In
return
uv
;
}
Rect
PlaneWarper
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
OutputArray
xmap
,
OutputArray
ymap
)
{
return
buildMaps
(
src_size
,
K
,
R
,
Mat
::
zeros
(
3
,
1
,
CV_32FC1
),
xmap
,
ymap
);
}
Rect
PlaneWarper
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
OutputArray
_xmap
,
OutputArray
_ymap
)
{
projector_
.
setCameraParams
(
K
,
R
,
T
);
...
...
@@ -110,7 +115,7 @@ Rect PlaneWarper::buildMaps(Size src_size, InputArray K, InputArray R, InputArra
k
.
args
(
ocl
::
KernelArg
::
WriteOnlyNoSize
(
uxmap
),
ocl
::
KernelArg
::
WriteOnly
(
uymap
),
ocl
::
KernelArg
::
PtrReadOnly
(
uk_rinv
),
ocl
::
KernelArg
::
PtrReadOnly
(
ut
),
dst_tl
.
x
,
dst_tl
.
y
,
projector_
.
scale
,
rowsPerWI
);
dst_tl
.
x
,
dst_tl
.
y
,
1
/
projector_
.
scale
,
rowsPerWI
);
size_t
globalsize
[
2
]
=
{
dsize
.
width
,
(
dsize
.
height
+
rowsPerWI
-
1
)
/
rowsPerWI
};
if
(
k
.
run
(
2
,
globalsize
,
NULL
,
true
))
...
...
@@ -388,7 +393,7 @@ Rect SphericalWarper::buildMaps(Size src_size, InputArray K, InputArray R, Outpu
UMat
uxmap
=
xmap
.
getUMat
(),
uymap
=
ymap
.
getUMat
(),
uk_rinv
=
k_rinv
.
getUMat
(
ACCESS_READ
);
k
.
args
(
ocl
::
KernelArg
::
WriteOnlyNoSize
(
uxmap
),
ocl
::
KernelArg
::
WriteOnly
(
uymap
),
ocl
::
KernelArg
::
PtrReadOnly
(
uk_rinv
),
dst_tl
.
x
,
dst_tl
.
y
,
projector_
.
scale
,
rowsPerWI
);
ocl
::
KernelArg
::
PtrReadOnly
(
uk_rinv
),
dst_tl
.
x
,
dst_tl
.
y
,
1
/
projector_
.
scale
,
rowsPerWI
);
size_t
globalsize
[
2
]
=
{
dsize
.
width
,
(
dsize
.
height
+
rowsPerWI
-
1
)
/
rowsPerWI
};
if
(
k
.
run
(
2
,
globalsize
,
NULL
,
true
))
...
...
@@ -436,7 +441,7 @@ Rect CylindricalWarper::buildMaps(Size src_size, InputArray K, InputArray R, Out
UMat
uxmap
=
xmap
.
getUMat
(),
uymap
=
ymap
.
getUMat
(),
uk_rinv
=
k_rinv
.
getUMat
(
ACCESS_READ
);
k
.
args
(
ocl
::
KernelArg
::
WriteOnlyNoSize
(
uxmap
),
ocl
::
KernelArg
::
WriteOnly
(
uymap
),
ocl
::
KernelArg
::
PtrReadOnly
(
uk_rinv
),
dst_tl
.
x
,
dst_tl
.
y
,
projector_
.
scale
,
ocl
::
KernelArg
::
PtrReadOnly
(
uk_rinv
),
dst_tl
.
x
,
dst_tl
.
y
,
1
/
projector_
.
scale
,
rowsPerWI
);
size_t
globalsize
[
2
]
=
{
dsize
.
width
,
(
dsize
.
height
+
rowsPerWI
-
1
)
/
rowsPerWI
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录