Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
ca0956a7
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,发现更多精彩内容 >>
提交
ca0956a7
编写于
9月 30, 2013
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
this is rewrite of the github patch #674 by chouclee; the goal is to improve polyfit accuracy
上级
4b203f7b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
18 deletion
+29
-18
modules/contrib/src/polyfit.cpp
modules/contrib/src/polyfit.cpp
+29
-18
未找到文件。
modules/contrib/src/polyfit.cpp
浏览文件 @
ca0956a7
...
...
@@ -47,26 +47,37 @@
#include "precomp.hpp"
typedef
double
polyfit_type
;
void
cv
::
polyfit
(
const
Mat
&
src_x
,
const
Mat
&
src_y
,
Mat
&
dst
,
int
order
)
{
CV_Assert
((
src_x
.
rows
>
0
)
&&
(
src_y
.
rows
>
0
)
&&
(
src_x
.
cols
==
1
)
&&
(
src_y
.
cols
==
1
)
&&
(
dst
.
cols
==
1
)
&&
(
dst
.
rows
==
(
order
+
1
))
&&
(
order
>=
1
));
Mat
X
;
X
=
Mat
::
zeros
(
src_x
.
rows
,
order
+
1
,
CV_32FC1
);
Mat
copy
;
for
(
int
i
=
0
;
i
<=
order
;
i
++
)
const
int
wdepth
=
DataType
<
polyfit_type
>::
depth
;
int
npoints
=
src_x
.
checkVector
(
1
);
int
nypoints
=
src_y
.
checkVector
(
1
);
CV_Assert
(
npoints
==
nypoints
&&
npoints
>=
order
+
1
);
Mat
srcX
=
Mat_
<
polyfit_type
>
(
src_x
),
srcY
=
Mat_
<
polyfit_type
>
(
src_y
);
Mat
X
=
Mat
::
zeros
(
order
+
1
,
npoints
,
wdepth
);
polyfit_type
*
pSrcX
=
(
polyfit_type
*
)
srcX
.
data
;
polyfit_type
*
pXData
=
(
polyfit_type
*
)
X
.
data
;
int
stepX
=
(
int
)(
X
.
step
/
X
.
elemSize1
());
for
(
int
y
=
0
;
y
<
order
+
1
;
++
y
)
{
copy
=
src_x
.
clone
();
pow
(
copy
,
i
,
copy
);
Mat
M1
=
X
.
col
(
i
);
copy
.
col
(
0
).
copyTo
(
M1
);
for
(
int
x
=
0
;
x
<
npoints
;
++
x
)
{
if
(
y
==
0
)
pXData
[
x
]
=
1
;
else
if
(
y
==
1
)
pXData
[
x
+
stepX
]
=
pSrcX
[
x
];
else
pXData
[
x
+
y
*
stepX
]
=
pSrcX
[
x
]
*
pXData
[
x
+
(
y
-
1
)
*
stepX
];
}
}
Mat
X_t
,
X_inv
;
transpose
(
X
,
X_t
);
Mat
temp
=
X_t
*
X
;
Mat
temp2
;
invert
(
temp
,
temp2
);
Mat
temp3
=
temp2
*
X_t
;
Mat
W
=
temp3
*
src_y
;
W
.
copyTo
(
dst
);
Mat
A
,
b
,
w
;
mulTransposed
(
X
,
A
,
false
);
b
=
X
*
srcY
;
solve
(
A
,
b
,
w
,
DECOMP_SVD
);
w
.
convertTo
(
dst
,
std
::
max
(
std
::
max
(
src_x
.
depth
(),
src_y
.
depth
()),
CV_32F
));
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录