讨论invert函数的效率。
来源:互联网 发布:java访问修饰符等级 编辑:程序博客网 时间:2024/06/07 17:02
由于图像识别针对于视频处理,对于效率十分看重。
我通过计算3*3的矩阵转换成逆矩阵,发现invert函数效率并不高。而且CV_LU的效率比CV_SVD高一倍,因为用的高斯消除法。
但用我自己写的转换程序之后,竟然速度比CV_LU快三倍。
下面是普通的3*3矩阵逆矩阵求法,想换成别的逆矩阵,下面函数的3换成形参(维数)就行。
void cvInvert(const double src[3][3],double dst[3][3])
{
double y=1.0;
double a[3][2*3];
double b[3][2*3];
double t,x;
int k,i,j;
for(i = 0;i<3;i++)
for (j = 0;j<3;j++)
b[i][j] = src[i][j];
/*
printf("原矩阵为:/n");
for (i=0;i<3;i++)
{
for (j = 0;j<3;j++)
printf("%f,",b[i][j]);
printf("/n");
}
*/
for(i=0;i<3;i++)
for(j = 0;j<(2*3);j++)
{
if (j<3)
a[i][j]=b[i][j];
else if (j==3+i)
a[i][j]=1.0;
else
a[i][j]=0.0;
}
for(i = 0;i<3;i++)
{
for(k = 0;k<3;k++)
{
if(k!=i)
{
t = a[k][i]/a[i][i];
for(j = 0;j<(2*3);j++)
{
x = a[i][j]*t;
a[k][j] = a[k][j]-x;
}
}
}
}
for(i=0;i<3;i++)
{
t = a[i][i];
for(j = 0;j<(2*3);j++)
a[i][j] = a[i][j]/t;
}
for(i=0;i<3;i++)
y = y*a[i][i];
if(y==0)
printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。/n");
else
{
for(i = 0;i<3;i++)
for(j = 0;j<3;j++)
dst[i][j] = a[i][j+3];
/*
printf("逆矩阵为:/n");
for (i=0;i<3;i++)
{
for (j = 0;j<3;j++)
printf("%-10lf",dst[i][j]);
printf("/n");
}
*/
}
}
来csdn是学习的,不是扯淡的。
- 讨论invert函数的效率。
- SQL查询效率的讨论
- HashMap的遍历效率讨论
- HashMap的遍历效率讨论
- 以下3个函数实现的功能一样,哪个效率更高呢,路过的讨论下!
- 算法讨论,求效率的问题!
- 关于LinuxThreads线程库的效率讨论
- cvInRangeS对于多通道效率的讨论
- 关于hibernate效率问题讨论的整理
- 函数的效率
- 函数调用的效率
- 函数调用的效率
- 函数参数的效率
- strtotime的函数效率
- 函数调用的效率
- C#构造函数的讨论
- 关于printf函数的讨论
- 归一化函数mapminmax的讨论
- 关于位域习题和知识整理
- THU – team players 合作精神
- System.out输出到txt文档
- 2月3号
- oracle中关于substr()函数的一点问题
- 讨论invert函数的效率。
- 各位高手帮我看看这个清屏程序
- C语言练习(2)
- Java基础:第三十七讲 成员方法的继承与覆盖
- 养成好习惯
- 让招聘官最头疼的面试
- DIV+CSS布局之HTML中的段落
- 我回来啦
- DIV+CSS布局之HTML超链接