| 3044 | } |
| 3045 | |
| 3046 | void PCA::project(InputArray _data, OutputArray result) const |
| 3047 | { |
| 3048 | Mat data = _data.getMat(); |
| 3049 | CV_Assert( mean.data && eigenvectors.data && |
| 3050 | ((mean.rows == 1 && mean.cols == data.cols) || (mean.cols == 1 && mean.rows == data.rows))); |
| 3051 | Mat tmp_data, tmp_mean = repeat(mean, data.rows/mean.rows, data.cols/mean.cols); |
| 3052 | int ctype = mean.type(); |
| 3053 | if( data.type() != ctype || tmp_mean.data == mean.data ) |
| 3054 | { |
| 3055 | data.convertTo( tmp_data, ctype ); |
| 3056 | subtract( tmp_data, tmp_mean, tmp_data ); |
| 3057 | } |
| 3058 | else |
| 3059 | { |
| 3060 | subtract( data, tmp_mean, tmp_mean ); |
| 3061 | tmp_data = tmp_mean; |
| 3062 | } |
| 3063 | if( mean.rows == 1 ) |
| 3064 | gemm( tmp_data, eigenvectors, 1, Mat(), 0, result, GEMM_2_T ); |
| 3065 | else |
| 3066 | gemm( eigenvectors, tmp_data, 1, Mat(), 0, result, 0 ); |
| 3067 | } |
| 3068 | |
| 3069 | Mat PCA::project(InputArray data) const |
| 3070 | { |