Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
fb97273b
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,发现更多精彩内容 >>
提交
fb97273b
编写于
10月 12, 2014
作者:
I
Ilya Lavrenov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cv::phase; cv::cartToPolar
上级
7e6fb668
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
41 addition
and
0 deletion
+41
-0
modules/core/include/opencv2/core/base.hpp
modules/core/include/opencv2/core/base.hpp
+16
-0
modules/core/src/mathfuncs.cpp
modules/core/src/mathfuncs.cpp
+25
-0
未找到文件。
modules/core/include/opencv2/core/base.hpp
浏览文件 @
fb97273b
...
...
@@ -605,6 +605,22 @@ inline uint32x4_t cv_vrndq_u32_f32(float32x4_t v)
return
vcvtq_u32_f32
(
vaddq_f32
(
v
,
v_05
));
}
inline
float32x4_t
cv_vrecpq_f32
(
float32x4_t
val
)
{
float32x4_t
reciprocal
=
vrecpeq_f32
(
val
);
reciprocal
=
vmulq_f32
(
vrecpsq_f32
(
val
,
reciprocal
),
reciprocal
);
reciprocal
=
vmulq_f32
(
vrecpsq_f32
(
val
,
reciprocal
),
reciprocal
);
return
reciprocal
;
}
inline
float32x2_t
cv_vrecp_f32
(
float32x2_t
val
)
{
float32x2_t
reciprocal
=
vrecpe_f32
(
val
);
reciprocal
=
vmul_f32
(
vrecps_f32
(
val
,
reciprocal
),
reciprocal
);
reciprocal
=
vmul_f32
(
vrecps_f32
(
val
,
reciprocal
),
reciprocal
);
return
reciprocal
;
}
#endif
}
// cv
...
...
modules/core/src/mathfuncs.cpp
浏览文件 @
fb97273b
...
...
@@ -168,6 +168,31 @@ static void FastAtan2_32f(const float *Y, const float *X, float *angle, int len,
_mm_storeu_ps
(
angle
+
i
,
a
);
}
}
#elif CV_NEON
float32x4_t
eps
=
vdupq_n_f32
((
float
)
DBL_EPSILON
);
float32x4_t
_90
=
vdupq_n_f32
(
90.
f
),
_180
=
vdupq_n_f32
(
180.
f
),
_360
=
vdupq_n_f32
(
360.
f
);
float32x4_t
z
=
vdupq_n_f32
(
0.0
f
),
scale4
=
vdupq_n_f32
(
scale
);
float32x4_t
p1
=
vdupq_n_f32
(
atan2_p1
),
p3
=
vdupq_n_f32
(
atan2_p3
);
float32x4_t
p5
=
vdupq_n_f32
(
atan2_p5
),
p7
=
vdupq_n_f32
(
atan2_p7
);
for
(
;
i
<=
len
-
4
;
i
+=
4
)
{
float32x4_t
x
=
vld1q_f32
(
X
+
i
),
y
=
vld1q_f32
(
Y
+
i
);
float32x4_t
ax
=
vabsq_f32
(
x
),
ay
=
vabsq_f32
(
y
);
float32x4_t
tmin
=
vminq_f32
(
ax
,
ay
),
tmax
=
vmaxq_f32
(
ax
,
ay
);
float32x4_t
c
=
vmulq_f32
(
tmin
,
cv_vrecpq_f32
(
vaddq_f32
(
tmax
,
eps
)));
float32x4_t
c2
=
vmulq_f32
(
c
,
c
);
float32x4_t
a
=
vmulq_f32
(
c2
,
p7
);
a
=
vmulq_f32
(
vaddq_f32
(
a
,
p5
),
c2
);
a
=
vmulq_f32
(
vaddq_f32
(
a
,
p3
),
c2
);
a
=
vmulq_f32
(
vaddq_f32
(
a
,
p1
),
c
);
a
=
vbslq_f32
(
vcgeq_f32
(
ax
,
ay
),
a
,
vsubq_f32
(
_90
,
a
));
a
=
vbslq_f32
(
vcltq_f32
(
x
,
z
),
vsubq_f32
(
_180
,
a
),
a
);
a
=
vbslq_f32
(
vcltq_f32
(
y
,
z
),
vsubq_f32
(
_360
,
a
),
a
);
vst1q_f32
(
angle
+
i
,
vmulq_f32
(
a
,
scale4
));
}
#endif
for
(
;
i
<
len
;
i
++
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录