@@ -114,153 +114,11 @@ void CvStatModel::write( CvFileStorage*, const char* ) const
114
114
OPENCV_ERROR ( CV_StsNotImplemented, " CvStatModel::write" , " " );
115
115
}
116
116
117
-
118
117
void CvStatModel::read ( CvFileStorage*, CvFileNode* )
119
118
{
120
119
OPENCV_ERROR ( CV_StsNotImplemented, " CvStatModel::read" , " " );
121
120
}
122
121
123
-
124
- /* Calculates upper triangular matrix S, where A is a symmetrical matrix A=S'*S */
125
- static void cvChol ( CvMat* A, CvMat* S )
126
- {
127
- int dim = A->rows ;
128
-
129
- int i, j, k;
130
- float sum;
131
-
132
- for ( i = 0 ; i < dim; i++ )
133
- {
134
- for ( j = 0 ; j < i; j++ )
135
- CV_MAT_ELEM (*S, float , i, j) = 0 ;
136
-
137
- sum = 0 ;
138
- for ( k = 0 ; k < i; k++ )
139
- sum += CV_MAT_ELEM (*S, float , k, i) * CV_MAT_ELEM (*S, float , k, i);
140
-
141
- CV_MAT_ELEM (*S, float , i, i) = (float )sqrt (CV_MAT_ELEM (*A, float , i, i) - sum);
142
-
143
- for ( j = i + 1 ; j < dim; j++ )
144
- {
145
- sum = 0 ;
146
- for ( k = 0 ; k < i; k++ )
147
- sum += CV_MAT_ELEM (*S, float , k, i) * CV_MAT_ELEM (*S, float , k, j);
148
-
149
- CV_MAT_ELEM (*S, float , i, j) =
150
- (CV_MAT_ELEM (*A, float , i, j) - sum) / CV_MAT_ELEM (*S, float , i, i);
151
-
152
- }
153
- }
154
- }
155
-
156
- /* Generates <sample> from multivariate normal distribution, where <mean> - is an
157
- average row vector, <cov> - symmetric covariation matrix */
158
- CV_IMPL void cvRandMVNormal ( CvMat* mean, CvMat* cov, CvMat* sample, CvRNG* rng )
159
- {
160
- int dim = sample->cols ;
161
- int amount = sample->rows ;
162
-
163
- CvRNG state = rng ? *rng : cvRNG ( cvGetTickCount () );
164
- cvRandArr (&state, sample, CV_RAND_NORMAL, cvScalarAll (0 ), cvScalarAll (1 ) );
165
-
166
- CvMat* utmat = cvCreateMat (dim, dim, sample->type );
167
- CvMat* vect = cvCreateMatHeader (1 , dim, sample->type );
168
-
169
- cvChol (cov, utmat);
170
-
171
- int i;
172
- for ( i = 0 ; i < amount; i++ )
173
- {
174
- cvGetRow (sample, vect, i);
175
- cvMatMulAdd (vect, utmat, mean, vect);
176
- }
177
-
178
- cvReleaseMat (&vect);
179
- cvReleaseMat (&utmat);
180
- }
181
-
182
-
183
- /* Generates <sample> of <amount> points from a discrete variate xi,
184
- where Pr{xi = k} == probs[k], 0 < k < len - 1. */
185
- static void cvRandSeries ( float probs[], int len, int sample[], int amount )
186
- {
187
- CvMat* univals = cvCreateMat (1 , amount, CV_32FC1);
188
- float * knots = (float *)cvAlloc ( len * sizeof (float ) );
189
-
190
- int i, j;
191
-
192
- CvRNG state = cvRNG (-1 );
193
- cvRandArr (&state, univals, CV_RAND_UNI, cvScalarAll (0 ), cvScalarAll (1 ) );
194
-
195
- knots[0 ] = probs[0 ];
196
- for ( i = 1 ; i < len; i++ )
197
- knots[i] = knots[i - 1 ] + probs[i];
198
-
199
- for ( i = 0 ; i < amount; i++ )
200
- for ( j = 0 ; j < len; j++ )
201
- {
202
- if ( CV_MAT_ELEM (*univals, float , 0 , i) <= knots[j] )
203
- {
204
- sample[i] = j;
205
- break ;
206
- }
207
- }
208
-
209
- cvFree (&knots);
210
- }
211
-
212
- /* Generates <sample> from gaussian mixture distribution */
213
- CV_IMPL void cvRandGaussMixture ( CvMat* means[],
214
- CvMat* covs[],
215
- float weights[],
216
- int clsnum,
217
- CvMat* sample,
218
- CvMat* sampClasses )
219
- {
220
- int dim = sample->cols ;
221
- int amount = sample->rows ;
222
-
223
- int i, clss;
224
-
225
- int * sample_clsnum = (int *)cvAlloc ( amount * sizeof (int ) );
226
- CvMat** utmats = (CvMat**)cvAlloc ( clsnum * sizeof (CvMat*) );
227
- CvMat* vect = cvCreateMatHeader (1 , dim, CV_32FC1);
228
-
229
- CvMat* classes;
230
- if ( sampClasses )
231
- classes = sampClasses;
232
- else
233
- classes = cvCreateMat (1 , amount, CV_32FC1);
234
-
235
- CvRNG state = cvRNG (-1 );
236
- cvRandArr (&state, sample, CV_RAND_NORMAL, cvScalarAll (0 ), cvScalarAll (1 ));
237
-
238
- cvRandSeries (weights, clsnum, sample_clsnum, amount);
239
-
240
- for ( i = 0 ; i < clsnum; i++ )
241
- {
242
- utmats[i] = cvCreateMat (dim, dim, CV_32FC1);
243
- cvChol (covs[i], utmats[i]);
244
- }
245
-
246
- for ( i = 0 ; i < amount; i++ )
247
- {
248
- CV_MAT_ELEM (*classes, float , 0 , i) = (float )sample_clsnum[i];
249
- cvGetRow (sample, vect, i);
250
- clss = sample_clsnum[i];
251
- cvMatMulAdd (vect, utmats[clss], means[clss], vect);
252
- }
253
-
254
- if ( !sampClasses )
255
- cvReleaseMat (&classes);
256
- for ( i = 0 ; i < clsnum; i++ )
257
- cvReleaseMat (&utmats[i]);
258
- cvFree (&utmats);
259
- cvFree (&sample_clsnum);
260
- cvReleaseMat (&vect);
261
- }
262
-
263
-
264
122
CvMat* icvGenerateRandomClusterCenters ( int seed, const CvMat* data,
265
123
int num_of_clusters, CvMat* _centers )
266
124
{
@@ -317,55 +175,6 @@ CvMat* icvGenerateRandomClusterCenters ( int seed, const CvMat* data,
317
175
return _centers ? _centers : centers;
318
176
} // end of icvGenerateRandomClusterCenters
319
177
320
- // By S. Dilman - begin -
321
-
322
- #define ICV_RAND_MAX 4294967296 // == 2^32
323
-
324
- // static void cvRandRoundUni (CvMat* center,
325
- // float radius_small,
326
- // float radius_large,
327
- // CvMat* desired_matrix,
328
- // CvRNG* rng_state_ptr)
329
- // {
330
- // float rad, norm, coefficient;
331
- // int dim, size, i, j;
332
- // CvMat *cov, sample;
333
- // CvRNG rng_local;
334
-
335
- // CV_FUNCNAME("cvRandRoundUni");
336
- // __BEGIN__
337
-
338
- // rng_local = *rng_state_ptr;
339
-
340
- // CV_ASSERT ((radius_small >= 0) &&
341
- // (radius_large > 0) &&
342
- // (radius_small <= radius_large));
343
- // CV_ASSERT (center && desired_matrix && rng_state_ptr);
344
- // CV_ASSERT (center->rows == 1);
345
- // CV_ASSERT (center->cols == desired_matrix->cols);
346
-
347
- // dim = desired_matrix->cols;
348
- // size = desired_matrix->rows;
349
- // cov = cvCreateMat (dim, dim, CV_32FC1);
350
- // cvSetIdentity (cov);
351
- // cvRandMVNormal (center, cov, desired_matrix, &rng_local);
352
-
353
- // for (i = 0; i < size; i++)
354
- // {
355
- // rad = (float)(cvRandReal(&rng_local)*(radius_large - radius_small) + radius_small);
356
- // cvGetRow (desired_matrix, &sample, i);
357
- // norm = (float) cvNorm (&sample, 0, CV_L2);
358
- // coefficient = rad / norm;
359
- // for (j = 0; j < dim; j++)
360
- // CV_MAT_ELEM (sample, float, 0, j) *= coefficient;
361
- // }
362
-
363
- // __END__
364
-
365
- // }
366
-
367
- // By S. Dilman - end -
368
-
369
178
static int CV_CDECL
370
179
icvCmpIntegers ( const void * a, const void * b )
371
180
{
0 commit comments