• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: 其他
  • 标签: RBF  网格变形  

资源简介

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 < rowNum; i ++)
{
for (size_t j = 0; j < colNum; j ++)
{
cout << gsl_matrix_get(pMatrix i j) << “ “;
}
cout << endl;
}
cout << endl;
}

void printVertex(float *pointset int Num)
{
for(int ii = 0;ii < Num; ii++)
{
for(int jj = 0;jj < 3; jj++)
{
cout << *(pointset + ii*3 + jj) << “ “;
}
cout << endl;
}
cout << endl;
}

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 < featureNum; i++)
{
for(j = 0;j < 3; j++)
{
gsl_matrix_set(sourceTZsXYZ i j *(soureFeaturePoints + i*3 + j));
}
}

for(i = 0;i < featureNum; 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 < featureNum; 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 < featureNum; i++)
{
for(j = 0;j < featureNum; 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 < featureNum; 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 < featureNum; 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


评论

共有 条评论