2012/08/04

统计自己的拍摄习惯

年初买了单反,550D+18-55的狗头,折腾了一阵子,拍了四千张照片,主要是公园里的花花草草还有我侄子,照片可以去我的picasa或者lofter上看。现在想买个定焦头玩玩,提升一下画质。看到这篇文章《性价比最高的镜头》 中提到的几个镜头:35mm f/2, 50mm f/1.4, 85mm f/1.8觉得都还不错,换成rmb大概在2k-3k间,于是准备在这几个镜头中选择一个。
选择镜头,出了看别人的评论外,我觉得最重要的还是看自己的使用习惯,哪个焦段用的最顺手,就选哪个。既然照片都存在硬盘里,为什么不研究一下自己的拍摄习惯呢。于是折腾了一个晚上写了一个读文件夹列表然后提取其中图像文件exif信息并进行统计的小程序。使用到了这个exif提取的库metadata-extractor
总共统计了242张照片,因为主力电脑只有一块64G的SSD,照片大都在另一台电脑上。用google doc做了一个图表:

很明显的是18, 55, 34, 35这四个焦距上拍了很多照片。但其实34,35完全就是一个焦段,有什么办法能把相似的焦段聚合起来么?正好前段时间看到过kmeans这种方法,就试试吧。
kmeans是一种聚类算法,可以将数据分成k个蔟,蔟之间的数据具有相似性,而簇与蔟之间差异较大。我用的是最基础的kmeans,还没有任何优化。先给定k个随机点(焦距)做为种子点。将每张照片分配到与其距离(在这里,就是焦距差的绝对值)最近的种子点的蔟中。分配完后,计算每个蔟的平均数,更新种子点。不断重复这个过程,直到种子点稳定。聚类就完成了。
如果k=3, 起始种子为{23,33,40}的话,
最终结果是:
19 : 18 20 25 24 , sum=78
34 : 34 35 32 33 39 36 42 43 44 27 29 28 30 , sum=115
55 : 55 , sum=49
如果k=4,起始种子为{18,23,33,50}的话,
最终结果是:
18 : 18 20 , sum=66
26 : 25 24 27 29 28 30 , sum=23
35 : 34 35 32 33 39 36 42 43 44 , sum=104
55 : 55 , sum=49
聚合后的图表:

从数据上来说,我还是比较喜欢35mm的焦段,毕竟半幅上使用35mm可以获得标准镜头的视角。做完数据分析,感觉还是挺好的。以后加上时间维度,做二维的聚集,这样可以反映拍摄习惯的演变。如果是google的话应该还可以对图片进行识别和分类吧。这样的话,分析出来的结果可能更有趣。