| function coef = object2coef(obj, mu, pc, ev, segbin) | |
| %OBJECT2COEF projects a shape or texture to the MM yielding its coefficients. | |
| % COEF = OBJECT2COEF(OBJ, MU, PC, EV) projects a shape or texture vector OBJ to the MM | |
| % given by the mean MU, the principal components PC and their strandard deviation EV. | |
| % | |
| % COEF = OBJECT2COEF(OBJ, MU, PC, EV, SEGBIN) performs a segmented projection. SEGBIN | |
| % is a matrix that specifies which vertex belongs to a segment. The number of segment | |
| % is equal to the number of columns of SEGBIN, and its number of rows is equal to the | |
| % number of vertex in the MM. Each column of SEGBIN is a binary vector (vertex with 0 do | |
| % not belong to the segment). The number of columns of COEF is equal to the number of | |
| % segments. Note that the SAME model is used for all segments (a PCA was not performed | |
| % for each segment). Hence, the projection requires four matrix inversion. | |
| % | |
| %See also COEF2OBJECT IDX2INTL | |
| %% AUTHOR : Sami Romdhani | |
| %% EMAIL : Sami.Romdhani@unibas.ch | |
| %% URL : http://informatik.unibas.ch/personen/romdhani_sami/ | |
| %% CREATION : 18-Jul-2008 11:08:33 $ | |
| %% DEVELOPED : 7.6.0.324 (R2008a) | |
| %% FILENAME : coef2object.m | |
| %------------- BEGIN CODE -------------- | |
| % Arguments checking | |
| if nargin ~= 4 && nargin ~= 5 | |
| error('Inappropriate number of arguments') | |
| end | |
| if nargout ~= 1 | |
| error('One output argument required') | |
| end | |
| if nargin > 4 | |
| n_seg = size(segbin, 2); | |
| else | |
| n_seg = 1; | |
| end | |
| obj = obj - mu; | |
| if n_seg == 1 | |
| % Projection to PCA space | |
| coef = (pc' * obj) ./ ev; | |
| else | |
| % Projection to a segmented PCA space | |
| coef = zeros( size(pc,2), n_seg, class(pc) ); | |
| for i=1:n_seg | |
| idx = idx2intl( find(segbin(:,i)), 3 ); | |
| coef(:, i) = (pc( idx, : ) \ obj(idx)) ./ ev; | |
| end | |
| end | |
| %------------- END OF CODE -------------- | |