<p>Given a matrix <span class="math-container">$D \in \mathbb{R}^{3N\times k}$</span> where each column is normalized <span class="math-container">$D_i$</span>, You can get <span class="math-container">$W = D^TS_i$</span>, and later it can be used to reconstruct the shape with <span class="math-container">$S_i = DW$</span> (With some error if you truncated some basis). The acquisition of weights is equivalent to calculating dot products between each PCA basis and <span class="math-container">$S_i$</span>. What is done here is you project <span class="math-container">$S_i$</span> onto each orthogonal basis <span class="math-container">$D_i$</span>, and calculate the length of the projected vector, so you are basically calculating the required contribution of each basis to construct the given <span class="math-container">$S_i$</span>.</p>

<p>If you are using unnormalized PCA basis, you can decompose the unnormalized PCA basis matrix into a diagonal matrix an an orthonormal matrix (Say, <span class="math-container">$\Lambda D$</span>), then use a similar approach to obtain the contribution of each basis. In this case, you'll have to use <span class="math-container">$\Lambda^{-1}D^T$</span> instead of <span class="math-container">$D^T$</span>.</p>

CC BY-SA 4.0
2020-06-10T10:27:28.267Z
2020-06-10T10:39:21.743Z
2020-06-10T10:39:21.743Z
intergula
<p>Given a set of human body mesh {S_i}, for each S_i, the points are N*3, we can do PCA on that. We can use PCA to reduce the dimension of {S_i}, for example to k dimension. Let the main direction of PCA be [D1, D2, ..., Dk], then the body geometry can be represented by S = W1 * D1 + W2 * D2 + ... + Wk * Dk, where W = [W1, W2, ..., W3] is the weights.</p>

<p>But how can we get the weight W of one specific mesh S_i in {S_i}?</p>

<mesh><processing>
How to use PCA to reconstruct 3D Mesh？
Frank
# How to use PCA to reconstruct 3D Mesh？

(Asked by: username_0 on 2020-06-07)

Given a set of human body mesh {S\_i}, for each S\_i, the points are N\*3, we can do PCA on that. We can use PCA to reduce the dimension of {S\_i}, for example to k dimension. Let the main direction of PCA be [D1, D2, ..., Dk], then the body geometry can be represented by S = W1 \* D1 + W2 \* D2 + ... + Wk \* Dk, where W = [W1, W2, ..., W3] is the weights.

But how can we get the weight W of one specific mesh S\_i in {S\_i}?

**Tags:** mesh, processing


---

## 1 answers

### Answer by username_1 on 2020-06-10. Score: 1

Given a matrix $D \in \mathbb{R}^{3N\times k}$ where each column is normalized $D\_i$, You can get $W = D^TS\_i$, and later it can be used to reconstruct the shape with $S\_i = DW$ (With some error if you truncated some basis). The acquisition of weights is equivalent to calculating dot products between each PCA basis and $S\_i$. What is done here is you project $S\_i$ onto each orthogonal basis $D\_i$, and calculate the length of the projected vector, so you are basically calculating the required contribution of each basis to construct the given $S\_i$.

If you are using unnormalized PCA basis, you can decompose the unnormalized PCA basis matrix into a diagonal matrix an an orthonormal matrix (Say, $\Lambda D$), then use a similar approach to obtain the contribution of each basis. In this case, you'll have to use $\Lambda^{-1}D^T$ instead of $D^T$.


---

