I'm trying to cluster around 16000 images into ~200 clusters, using kmeans with metric as euclidean distance or cosine distance. I understand that i need to extract keypoint descriptors to compute features for each image. I'm looking at SIFT as an option but, SIFT outputs different number of keypoints for each image that i have. How can i use these keypoint descriptors generated by SIFT to make a uniform sized feature vector for every image, so that i can feed these vectors to kmeans. Or should i use any other feature descriptor apart from SIFT?
I don't know how to do it that way. I would suggest you do it a different way:
Define a distance metric that measures the dissimilarity between two metrics. In particular, if $I,J$ are two images, $d(I,J)$ should quantify how dissimilar $I,J$ are -- large values indicate they are very different, small values indicate they are very similar.
Use a different clustering algorithm that only needs a distance metric.
For #1, there are many ways of measuring/computing image similarity. If you want to use SIFT as your starting point, you can align the two images and compute some metric based upon the number of keypoints that are well-matched ("inliers") vs the number that aren't ("outliers).
For #2, there are many options. One option is to use hierarchical clustering.
I recommend you spend some time reading through the research literature on measuring image similarity in the computer vision literature. There's lots of work, and many methods proposed and evaluated.