Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
d5f006ee
O
Opencv
项目概览
Greenplum
/
Opencv
10 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
d5f006ee
编写于
10月 12, 2014
作者:
I
Ilya Lavrenov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cv::magnitude; cv::corner**
上级
fb97273b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
53 addition
and
10 deletion
+53
-10
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
+6
-8
modules/imgproc/src/corner.cpp
modules/imgproc/src/corner.cpp
+31
-2
未找到文件。
modules/core/include/opencv2/core/base.hpp
浏览文件 @
d5f006ee
...
...
@@ -621,6 +621,22 @@ inline float32x2_t cv_vrecp_f32(float32x2_t val)
return
reciprocal
;
}
inline
float32x4_t
cv_vsqrtq_f32
(
float32x4_t
val
)
{
float32x4_t
e
=
vrsqrteq_f32
(
val
);
e
=
vmulq_f32
(
vrsqrtsq_f32
(
vmulq_f32
(
e
,
e
),
val
),
e
);
e
=
vmulq_f32
(
vrsqrtsq_f32
(
vmulq_f32
(
e
,
e
),
val
),
e
);
return
cv_vrecpq_f32
(
e
);
}
inline
float32x2_t
cv_vsqrt_f32
(
float32x2_t
val
)
{
float32x2_t
e
=
vrsqrte_f32
(
val
);
e
=
vmul_f32
(
vrsqrts_f32
(
vmul_f32
(
e
,
e
),
val
),
e
);
e
=
vmul_f32
(
vrsqrts_f32
(
vmul_f32
(
e
,
e
),
val
),
e
);
return
cv_vrecp_f32
(
e
);
}
#endif
}
// cv
...
...
modules/core/src/mathfuncs.cpp
浏览文件 @
d5f006ee
...
...
@@ -293,17 +293,15 @@ static void Magnitude_32f(const float* x, const float* y, float* mag, int len)
}
}
#elif CV_NEON
float
CV_DECL_ALIGNED
(
16
)
m
[
4
];
for
(
;
i
<=
len
-
4
;
i
+=
4
)
{
float32x4_t
v_x
=
vld1q_f32
(
x
+
i
),
v_y
=
vld1q_f32
(
y
+
i
);
vst1q_f32
(
m
,
vaddq_f32
(
vmulq_f32
(
v_x
,
v_x
),
vmulq_f32
(
v_y
,
v_y
)));
mag
[
i
]
=
std
::
sqrt
(
m
[
0
]);
mag
[
i
+
1
]
=
std
::
sqrt
(
m
[
1
]);
mag
[
i
+
2
]
=
std
::
sqrt
(
m
[
2
]
);
mag
[
i
+
3
]
=
std
::
sqrt
(
m
[
3
]
);
vst1q_f32
(
m
ag
+
i
,
cv_vsqrtq_f32
(
vmlaq_f32
(
vmulq_f32
(
v_x
,
v_x
),
v_y
,
v_y
)));
}
for
(
;
i
<=
len
-
2
;
i
+=
2
)
{
float32x2_t
v_x
=
vld1_f32
(
x
+
i
),
v_y
=
vld1_f32
(
y
+
i
);
vst1_f32
(
mag
+
i
,
cv_vsqrt_f32
(
vmla_f32
(
vmul_f32
(
v_x
,
v_x
),
v_y
,
v_y
))
);
}
#endif
...
...
modules/imgproc/src/corner.cpp
浏览文件 @
d5f006ee
...
...
@@ -69,7 +69,7 @@ static void calcMinEigenVal( const Mat& _cov, Mat& _dst )
if
(
simd
)
{
__m128
half
=
_mm_set1_ps
(
0.5
f
);
for
(
;
j
<=
size
.
width
-
5
;
j
+=
4
)
for
(
;
j
<=
size
.
width
-
4
;
j
+=
4
)
{
__m128
t0
=
_mm_loadu_ps
(
cov
+
j
*
3
);
// a0 b0 c0 x
__m128
t1
=
_mm_loadu_ps
(
cov
+
j
*
3
+
3
);
// a1 b1 c1 x
...
...
@@ -90,6 +90,19 @@ static void calcMinEigenVal( const Mat& _cov, Mat& _dst )
_mm_storeu_ps
(
dst
+
j
,
a
);
}
}
#elif CV_NEON
float32x4_t
v_half
=
vdupq_n_f32
(
0.5
f
);
for
(
;
j
<=
size
.
width
-
4
;
j
+=
4
)
{
float32x4x3_t
v_src
=
vld3q_f32
(
cov
+
j
*
3
);
float32x4_t
v_a
=
vmulq_f32
(
v_src
.
val
[
0
],
v_half
);
float32x4_t
v_b
=
v_src
.
val
[
1
];
float32x4_t
v_c
=
vmulq_f32
(
v_src
.
val
[
2
],
v_half
);
float32x4_t
v_t
=
vsubq_f32
(
v_a
,
v_c
);
v_t
=
vmlaq_f32
(
vmulq_f32
(
v_t
,
v_t
),
v_b
,
v_b
);
vst1q_f32
(
dst
+
j
,
vsubq_f32
(
vaddq_f32
(
v_a
,
v_c
),
cv_vsqrtq_f32
(
v_t
)));
}
#endif
for
(
;
j
<
size
.
width
;
j
++
)
{
...
...
@@ -290,8 +303,24 @@ cornerEigenValsVecs( const Mat& src, Mat& eigenv, int block_size,
float
*
cov_data
=
cov
.
ptr
<
float
>
(
i
);
const
float
*
dxdata
=
Dx
.
ptr
<
float
>
(
i
);
const
float
*
dydata
=
Dy
.
ptr
<
float
>
(
i
);
j
=
0
;
for
(
j
=
0
;
j
<
size
.
width
;
j
++
)
#if CV_NEON
for
(
;
j
<=
size
.
width
-
4
;
j
+=
4
)
{
float32x4_t
v_dx
=
vld1q_f32
(
dxdata
+
j
);
float32x4_t
v_dy
=
vld1q_f32
(
dydata
+
j
);
float32x4x3_t
v_dst
;
v_dst
.
val
[
0
]
=
vmulq_f32
(
v_dx
,
v_dx
);
v_dst
.
val
[
1
]
=
vmulq_f32
(
v_dx
,
v_dy
);
v_dst
.
val
[
2
]
=
vmulq_f32
(
v_dy
,
v_dy
);
vst3q_f32
(
cov_data
+
j
*
3
,
v_dst
);
}
#endif
for
(
;
j
<
size
.
width
;
j
++
)
{
float
dx
=
dxdata
[
j
];
float
dy
=
dydata
[
j
];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录