em_read.diff

mr.pppoe -, 2012-01-27 05:18 pm

Download (2.3 kB)

 
modules/ml/src/em.cpp (working copy)
141 141
    CvFileNode* em_node = 0;
142 142
    CvFileNode* tmp_node = 0;
143 143
    CvSeq* seq = 0;
144
    CvMat **tmp_covs = 0;
145
    CvMat **tmp_cov_rotate_mats = 0;
146 144

  
147 145
    read_params( fs, node );
148 146

  
......
156 154
    CV_CALL( inv_eigen_values = (CvMat*)cvReadByName( fs, em_node, "inv_eigen_values" ));
157 155

  
158 156
    // Size of all the following data
159
    data_size = params.nclusters*2*sizeof(CvMat*);
157
    data_size = params.nclusters*sizeof(CvMat*);
160 158

  
161
    CV_CALL( tmp_covs = (CvMat**)cvAlloc( data_size ));
162
    memset( tmp_covs, 0, data_size );
163

  
164
    tmp_cov_rotate_mats = tmp_covs + params.nclusters;
165

  
159
    CV_CALL( covs = (CvMat**)cvAlloc( data_size ));
160
    memset( covs, 0, data_size );
166 161
    CV_CALL( tmp_node = cvGetFileNodeByName( fs, em_node, "covs" ));
167 162
    seq = tmp_node->data.seq;
168 163
    if( !CV_NODE_IS_SEQ(tmp_node->tag) || seq->total != params.nclusters)
......
170 165
    CV_CALL( cvStartReadSeq( seq, &reader, 0 ));
171 166
    for( int i = 0; i < params.nclusters; i++ )
172 167
    {
173
        CV_CALL( tmp_covs[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr ));
168
        CV_CALL( covs[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr ));
174 169
        CV_NEXT_SEQ_ELEM( seq->elem_size, reader );
175 170
    }
176 171

  
172
    CV_CALL( cov_rotate_mats = (CvMat**)cvAlloc( data_size ));
173
    memset( cov_rotate_mats, 0, data_size );
177 174
    CV_CALL( tmp_node = cvGetFileNodeByName( fs, em_node, "cov_rotate_mats" ));
178 175
    seq = tmp_node->data.seq;
179 176
    if( !CV_NODE_IS_SEQ(tmp_node->tag) || seq->total != params.nclusters)
180
        CV_ERROR( CV_StsParseError, "Missing or invalid sequence of rotated cov. matrices" );
177
        CV_ERROR( CV_StsParseError, "Missing or invalid sequence of covariance matrices" );
181 178
    CV_CALL( cvStartReadSeq( seq, &reader, 0 ));
182 179
    for( int i = 0; i < params.nclusters; i++ )
183 180
    {
184
        CV_CALL( tmp_cov_rotate_mats[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr ));
181
        CV_CALL( cov_rotate_mats[i] = (CvMat*)cvRead( fs, (CvFileNode*)reader.ptr ));
185 182
        CV_NEXT_SEQ_ELEM( seq->elem_size, reader );
186 183
    }
187 184

  
188
    covs = tmp_covs;
189
    cov_rotate_mats = tmp_cov_rotate_mats;
190

  
191 185
    ok = true;
192 186
    __END__;
193 187