Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
bd0732b1
O
Opencv
项目概览
Greenplum
/
Opencv
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
未验证
提交
bd0732b1
编写于
10月 15, 2021
作者:
N
Nicholas Ho
提交者:
GitHub
10月 15, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge pull request #20740 from Nicholas-Ho-arm:3.4_SymmColumnVec_32f8u
* Add SymmColumnVec_32f8u * Fix double to float warnings
上级
0b5cbcef
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
79 addition
and
2 deletion
+79
-2
modules/imgproc/src/filter.simd.hpp
modules/imgproc/src/filter.simd.hpp
+79
-2
未找到文件。
modules/imgproc/src/filter.simd.hpp
浏览文件 @
bd0732b1
...
...
@@ -1160,6 +1160,81 @@ struct SymmColumnVec_32s8u
Mat
kernel
;
};
struct
SymmColumnVec_32f8u
{
SymmColumnVec_32f8u
()
{
symmetryType
=
0
;
delta
=
0
;
}
SymmColumnVec_32f8u
(
const
Mat
&
_kernel
,
int
_symmetryType
,
int
,
double
_delta
)
{
symmetryType
=
_symmetryType
;
kernel
=
_kernel
;
delta
=
(
float
)
_delta
;
CV_Assert
(
(
symmetryType
&
(
KERNEL_SYMMETRICAL
|
KERNEL_ASYMMETRICAL
))
!=
0
);
}
int
operator
()(
const
uchar
**
_src
,
uchar
*
_dst
,
int
width
)
const
{
CV_INSTRUMENT_REGION
();
int
_ksize
=
kernel
.
rows
+
kernel
.
cols
-
1
;
if
(
_ksize
==
1
)
return
0
;
const
int
ksize2
=
_ksize
/
2
;
const
float
*
ky
=
kernel
.
ptr
<
float
>
()
+
ksize2
;
int
i
=
0
,
k
;
bool
symmetrical
=
(
symmetryType
&
KERNEL_SYMMETRICAL
)
!=
0
;
const
float
**
src
=
(
const
float
**
)
_src
;
if
(
symmetrical
)
{
for
(
;
i
<=
width
-
v_uint8
::
nlanes
;
i
+=
v_uint8
::
nlanes
)
{
v_float32
v_ky0
=
vx_setall_f32
(
ky
[
0
]);
v_float32
v32_delta
=
vx_setall_f32
(
delta
);
const
float
*
S
=
src
[
0
]
+
i
;
v_float32
s0
=
v_muladd
(
v_ky0
,
vx_load
(
S
),
v32_delta
);
v_float32
s1
=
v_muladd
(
v_ky0
,
vx_load
(
S
+
v_float32
::
nlanes
),
v32_delta
);
v_float32
s2
=
v_muladd
(
v_ky0
,
vx_load
(
S
+
2
*
v_float32
::
nlanes
),
v32_delta
);
v_float32
s3
=
v_muladd
(
v_ky0
,
vx_load
(
S
+
3
*
v_float32
::
nlanes
),
v32_delta
);
for
(
k
=
1
;
k
<=
ksize2
;
k
++
)
{
v_float32
v_kyk
=
vx_setall_f32
(
ky
[
k
]);
const
float
*
S0
=
src
[
k
]
+
i
;
const
float
*
S1
=
src
[
-
k
]
+
i
;
s0
=
v_muladd
(
v_kyk
,
vx_load
(
S0
)
+
vx_load
(
S1
),
s0
);
s1
=
v_muladd
(
v_kyk
,
vx_load
(
S0
+
v_float32
::
nlanes
)
+
vx_load
(
S1
+
v_float32
::
nlanes
),
s1
);
s2
=
v_muladd
(
v_kyk
,
vx_load
(
S0
+
2
*
v_float32
::
nlanes
)
+
vx_load
(
S1
+
2
*
v_float32
::
nlanes
),
s2
);
s3
=
v_muladd
(
v_kyk
,
vx_load
(
S0
+
3
*
v_float32
::
nlanes
)
+
vx_load
(
S1
+
3
*
v_float32
::
nlanes
),
s3
);
}
v_store
(
_dst
+
i
,
v_pack_u
(
v_pack
(
v_round
(
s0
),
v_round
(
s1
)),
v_pack
(
v_round
(
s2
),
v_round
(
s3
))));
}
}
else
{
for
(
;
i
<=
width
-
v_uint8
::
nlanes
;
i
+=
v_uint8
::
nlanes
)
{
v_float32
s0
=
vx_setall_f32
(
delta
);
v_float32
s1
=
vx_setall_f32
(
delta
);
v_float32
s2
=
vx_setall_f32
(
delta
);
v_float32
s3
=
vx_setall_f32
(
delta
);
for
(
k
=
1
;
k
<=
ksize2
;
k
++
)
{
v_float32
v_kyk
=
vx_setall_f32
(
ky
[
k
]);
const
float
*
S0
=
src
[
k
]
+
i
;
const
float
*
S1
=
src
[
-
k
]
+
i
;
s0
=
v_muladd
(
v_kyk
,
vx_load
(
S0
)
-
vx_load
(
S1
),
s0
);
s1
=
v_muladd
(
v_kyk
,
vx_load
(
S0
+
v_float32
::
nlanes
)
-
vx_load
(
S1
+
v_float32
::
nlanes
),
s1
);
s2
=
v_muladd
(
v_kyk
,
vx_load
(
S0
+
2
*
v_float32
::
nlanes
)
-
vx_load
(
S1
+
2
*
v_float32
::
nlanes
),
s2
);
s3
=
v_muladd
(
v_kyk
,
vx_load
(
S0
+
3
*
v_float32
::
nlanes
)
-
vx_load
(
S1
+
3
*
v_float32
::
nlanes
),
s3
);
}
v_store
(
_dst
+
i
,
v_pack_u
(
v_pack
(
v_round
(
s0
),
v_round
(
s1
)),
v_pack
(
v_round
(
s2
),
v_round
(
s3
))));
}
}
return
i
;
}
int
symmetryType
;
float
delta
;
Mat
kernel
;
};
struct
SymmColumnSmallVec_32s16s
{
...
...
@@ -2341,6 +2416,7 @@ typedef RowNoVec RowVec_32f;
typedef
SymmRowSmallNoVec
SymmRowSmallVec_8u32s
;
typedef
SymmRowSmallNoVec
SymmRowSmallVec_32f
;
typedef
ColumnNoVec
SymmColumnVec_32s8u
;
typedef
ColumnNoVec
SymmColumnVec_32f8u
;
typedef
ColumnNoVec
SymmColumnVec_32f16s
;
typedef
ColumnNoVec
SymmColumnVec_32f
;
typedef
SymmColumnSmallNoVec
SymmColumnSmallVec_32s16s
;
...
...
@@ -3031,8 +3107,9 @@ Ptr<BaseColumnFilter> getLinearColumnFilter(
(
kernel
,
anchor
,
delta
,
symmetryType
,
FixedPtCastEx
<
int
,
uchar
>
(
bits
),
SymmColumnVec_32s8u
(
kernel
,
symmetryType
,
bits
,
delta
));
if
(
ddepth
==
CV_8U
&&
sdepth
==
CV_32F
)
return
makePtr
<
SymmColumnFilter
<
Cast
<
float
,
uchar
>
,
ColumnNoVec
>
>
(
kernel
,
anchor
,
delta
,
symmetryType
);
return
makePtr
<
SymmColumnFilter
<
Cast
<
float
,
uchar
>
,
SymmColumnVec_32f8u
>
>
(
kernel
,
anchor
,
delta
,
symmetryType
,
Cast
<
float
,
uchar
>
(),
SymmColumnVec_32f8u
(
kernel
,
symmetryType
,
0
,
delta
));
if
(
ddepth
==
CV_8U
&&
sdepth
==
CV_64F
)
return
makePtr
<
SymmColumnFilter
<
Cast
<
double
,
uchar
>
,
ColumnNoVec
>
>
(
kernel
,
anchor
,
delta
,
symmetryType
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录