mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.8 KiB
72 lines
1.8 KiB
#! /usr/bin/env octave |
|
cv; |
|
highgui; |
|
MAX_CLUSTERS=5; |
|
|
|
function ret = randint(v1, v2) |
|
ret = int32(rand() * (v2 - v1) + v1); |
|
end |
|
|
|
color_tab = { \ |
|
CV_RGB(255,0,0), \ |
|
CV_RGB(0,255,0), \ |
|
CV_RGB(100,100,255), \ |
|
CV_RGB(255,0,255), \ |
|
CV_RGB(255,255,0)}; |
|
img = cvCreateImage( cvSize( 500, 500 ), 8, 3 ); |
|
rng = cvRNG(-1); |
|
|
|
cvNamedWindow( "clusters", 1 ); |
|
|
|
while (true), |
|
cluster_count = randint(2, MAX_CLUSTERS); |
|
sample_count = randint(1, 1000); |
|
points = cvCreateMat( sample_count, 1, CV_32FC2 ); |
|
clusters = cvCreateMat( sample_count, 1, CV_32SC1 ); |
|
|
|
## generate random sample from multigaussian distribution |
|
for k=0:cluster_count-1, |
|
center = CvPoint(); |
|
center.x = mod(cvRandInt(rng), img.width); |
|
center.y = mod(cvRandInt(rng), img.height); |
|
first = k*sample_count/cluster_count; |
|
last = sample_count; |
|
if (k != cluster_count) |
|
last = (k+1)*sample_count/cluster_count; |
|
endif |
|
|
|
point_chunk = cvGetRows(points, first, last); |
|
|
|
cvRandArr( rng, point_chunk, CV_RAND_NORMAL, \ |
|
cvScalar(center.x,center.y,0,0), \ |
|
cvScalar(img.width*0.1,img.height*0.1,0,0)); |
|
endfor |
|
|
|
|
|
## shuffle samples |
|
cvRandShuffle( points, rng ); |
|
|
|
cvKMeans2( points, cluster_count, clusters, \ |
|
cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0 )); |
|
|
|
cvZero( img ); |
|
|
|
for i=0:sample_count-1, |
|
cluster_idx = clusters(i); |
|
pt = points(i); |
|
cvCircle( img, pt, 2, color_tab{cluster_idx + 1}, CV_FILLED, CV_AA, 0 ); |
|
|
|
cvCircle( img, pt, 2, color_tab{cluster_idx + 1}, CV_FILLED, CV_AA, 0 ); |
|
endfor |
|
|
|
|
|
cvShowImage( "clusters", img ); |
|
|
|
key = cvWaitKey(0); |
|
if( key == 27 || key == 'q' || key == 'Q' ) |
|
break; |
|
endif |
|
endwhile |
|
|
|
|
|
cvDestroyWindow( "clusters" );
|
|
|