資源簡介
RBF徑向基函數網格變形算法源程序,用于人臉等三維模型的網格變形

代碼片段和文件信息
#include?“StdAfx.h“
#include?“all.hpp“
#include?“RBF.hpp“
#include?“math.h“
float?Points_Distance(float?x1?float?y1?float?z1?float?x2?float?y2?float?z2)
{
return?sqrt(?(x1?-?x2)*(x1?-?x2)?+?(y1?-?y2)*(y1?-?y2)?+?(z1?-?z2)*(z1?-?z2)?);
}
void?print(gsl_matrix?*?pMatrix)
{
size_t?rowNum?=?pMatrix->size1;
size_t?colNum?=?pMatrix->size2;
for?(size_t?i?=?0;?i? {
for?(size_t?j?=?0;?j? {
cout?< }
cout?< }
cout?<}
void?printVertex(float?*pointset?int?Num)
{
for(int?ii?=?0;ii? {
for(int?jj?=?0;jj?3;?jj++)
{
cout?<*(pointset?+?ii*3?+?jj)?<“?“;
}
cout?< }
cout?<}
void?RBF(float?*pointset?int?Num?float?*soureFeaturePoints?float?*targetFeaturePoints?int?featureNum)
{
freopen(“c:\\dataa.txt“?“w+“?stdout);
gsl_matrix?*?sourceTZsXYZ??=?gsl_matrix_alloc?(featureNum?3);
gsl_matrix?*?targetTZsXYZ??=?gsl_matrix_alloc?(featureNum?3);
int?i?j;
for(i?=?0;i? {
for(j?=?0;j?3;?j++)
{
gsl_matrix_set(sourceTZsXYZ?i?j?*(soureFeaturePoints?+?i*3?+?j));
}
}
for(i?=?0;i? {
for(j?=?0;j?3;?j++)
{
gsl_matrix_set(targetTZsXYZ?i?j?*(targetFeaturePoints?+?i*3?+?j));
}
}
//? print(sourceTZsXYZ);
//? print(targetTZsXYZ);
//////?賦值給b數組/////////////////////////////////////////////////////////
gsl_matrix?*?b?=?gsl_matrix_calloc(featureNum?+?4?1);
for(i?=?0;i? {
gsl_matrix_set(b?i?0?gsl_matrix_get(targetTZsXYZ?i?0));
}
////////////////////////////////////////////////////////////////////////////
////////////////////?初始化矩陣A?//////////////////////////////////
gsl_matrix?*?A??=?gsl_matrix_calloc?(featureNum+4?featureNum+4);
for(i?=?0;i? {
for(j?=?0;j? {
gsl_matrix_set(A?i?j?Points_Distance(?
*(soureFeaturePoints?+?i*3)?*(soureFeaturePoints?+?i*3?+?1)?*(soureFeaturePoints?+?i*3?+?2)
*(soureFeaturePoints?+?j*3)?*(soureFeaturePoints?+?j*3?+?1)?*(soureFeaturePoints?+?j*3?+?2)));
}
}
for(i?=?0;i? {
gsl_matrix_set(A?i?featureNum???1);
gsl_matrix_set(A?i?featureNum+1?gsl_matrix_get(sourceTZsXYZ?i?0));
gsl_matrix_set(A?i?featureNum+2?gsl_matrix_get(sourceTZsXYZ?i?1));
gsl_matrix_set(A?i?featureNum+3?gsl_matrix_get(sourceTZsXYZ?i?2));
}
for(i?=?0;i? {
gsl_matrix_set(A?featureNum???i?1);
gsl_matrix_set(A?featureNum+1?i?gsl_matrix_get(sourceTZsXYZ?i?0));
gsl_matrix_set(A?featureNum+2?i?gsl_matrix_get(sourceTZsXYZ?i?1));
gsl_matrix_set(A?featureNum+3?i?gsl_matrix_get(sourceTZsXYZ?i?2));
}
print(A);
////////?解方程?////////////////////////////////////////////////////////////////
int?s;?float?sum;
///////////////////////?解X
gsl_matrix?*?A_c?=?gsl_matri
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6726??2008-11-02?17:15??RBF算法的c++實現版本\RBF.cpp
?????文件????????154??2008-10-28?10:21??RBF算法的c++實現版本\RBF.hpp
?????目錄??????????0??2011-06-08?16:01??RBF算法的c++實現版本
-----------?---------??----------?-----??----
?????????????????6880????????????????????3
- 上一篇:匯編寫的時鐘程序,很好用,值得研究
- 下一篇:背景差分人體檢測
評論
共有 條評論