[vtkusers] vtkPCAStatistics for vectors
gregthom
gregthom99 at yahoo.com
Thu Jul 16 05:22:12 EDT 2009
Hi Wes, thanks for pointing out the vtkPCAAnalysis filter. It looks indeed
more like what I want to achieve however I have two question.
!) How exactly do I use GetParameterisedShape method for my case ? say I
want to generate 100 new shapes. What b should I use ?
2) concerning my last post, does doing PCA on the n polydatas themselfs
differ from doing PCA on the differences (vectors) of all n-1 polydatas with
respect to one reference polydata ?
Thank you
G
Wes Turner wrote:
>
> Greg,
> It looks like you are trying to calculate positional variation from a set
> of
> polydatas and synthesize other members of the family. Look at
> vtkPCAAnalysis filter.
>
> - Wes
>
> On Tue, Jul 14, 2009 at 10:26 AM, gregthom <gregthom99 at yahoo.com> wrote:
>
>>
>> Hello VTK users
>>
>> I was wondering if vtkPCAStatistics can be used for vectors instead of
>> scalars as in the example at:
>>
>> TestPCAStatistics.cxx.
>>
>> When looking at this example I see that scalar datas are added to a table
>> before adding to the pca filter, ie
>>
>> const char m0Name[] = "M0";
>> vtkDoubleArray* dataset1Arr = vtkDoubleArray::New();
>> dataset1Arr->SetNumberOfComponents( 1 );
>> dataset1Arr->SetName( m0Name );
>>
>> const char m1Name[] = "M1";
>> vtkDoubleArray* dataset2Arr = vtkDoubleArray::New();
>> dataset2Arr->SetNumberOfComponents( 1 );
>> dataset2Arr->SetName( m1Name );
>>
>> const char m2Name[] = "M2";
>> vtkDoubleArray* dataset3Arr = vtkDoubleArray::New();
>> dataset3Arr->SetNumberOfComponents( 1 );
>> dataset3Arr->SetName( m2Name );
>>
>> for ( int i = 0; i < nVals; ++ i )
>> {
>> int ti = i << 1;
>> dataset1Arr->InsertNextValue( mingledData[ti] );
>> dataset2Arr->InsertNextValue( mingledData[ti + 1] );
>> dataset3Arr->InsertNextValue( i != 12 ? -1. : -1.001 );
>> }
>>
>> vtkTable* datasetTable = vtkTable::New();
>> datasetTable->AddColumn( dataset1Arr );
>> dataset1Arr->Delete();
>> datasetTable->AddColumn( dataset2Arr );
>> dataset2Arr->Delete();
>> datasetTable->AddColumn( dataset3Arr );
>> dataset3Arr->Delete();
>>
>> vtkPCAStatistics* pcas = vtkPCAStatistics::New();
>> pcas->SetInput( vtkStatisticsAlgorithm::INPUT_DATA, datasetTable );
>> pcas->SetNormalizationSchemeByName( normScheme );
>> pcas->SetBasisSchemeByName( "FixedBasisEnergy" );
>> pcas->SetFixedBasisEnergy( 1. - 1e-8 );
>>
>>
>> In my case, I have 10 polydata sets and I want to do PCA on these
>> polydata
>> with the end result of producing other polydatas by taking linea
>> combinations of the eigen vectors from PCA analysis.
>>
>> Here is my approach,
>>
>>
>> 1) use one polydata as reference (P0)
>> 2) get differences between the points of P0 and each of the other 9
>> polydatas
>> these vectors are stored as
>> vtkDoubleArray* vectorsP0toP1array = vtkDoubleArray::New();
>> vectorsP0toP1array->SetNumberOfComponents( 3 );
>> vectorsP0toP1array->SetName( "vectorsP0toP1" );
>>
>> (...)
>>
>> vtkDoubleArray* vectorsP0toP9array = vtkDoubleArray::New();
>> vectorsP0toP9array->SetNumberOfComponents( 3 );
>> vectorsP0toP9array->SetName( "vectorsP0toP9" );
>>
>> 3) run PCA on the vectors
>>
>> 4) obtain a new vector by taking combinations of the PCA eigen vectors
>> Add new vector to P0 polydata points to obtain a new polydata model
>>
>> Does anyone with experience think this will work ? Could you also please
>> help with pseudocode for 3) and 4) ? That is where I am stuck right now.
>> Will adding the vectors columns in a table as in the example work ?
>>
>> ie
>> vtkTable* datasetTable = vtkTable::New();
>> datasetTable->AddColumn( vectorsP0toP1array );
>> ...
>> datasetTable->AddColumn( vectorsP0toP9array );
>>
>> then
>> vtkPCAStatistics* pcas = vtkPCAStatistics::New();
>> pcas->SetInput( vtkStatisticsAlgorithm::INPUT_DATA, datasetTable );
>> ????
>>
>>
>>
>> Thanks for your help in advance
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/vtkPCAStatistics-for-vectors-tp24480622p24480622.html
>> Sent from the VTK - Users mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
>
>
>
> --
> Wesley D. Turner, Ph.D.
> Kitware, Inc.
> R&D Engineer
> 28 Corporate Drive
> Clifton Park, NY 12065-8662
> Phone: 518-371-3971 x120
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
--
View this message in context: http://www.nabble.com/vtkPCAStatistics-for-vectors-tp24480622p24513104.html
Sent from the VTK - Users mailing list archive at Nabble.com.
More information about the vtkusers
mailing list