MatchTemplate method based on cvMatchTemplate()

OpenCV里的cvMatchTemplate函数不能处理旋转变化,只能在模板和目标图像没有相对旋转的情况下才能正确匹配。而基于特征点的方法,如SIFT等,精度效果不是很理想。通过研究cognexckvision他们的匹配方法,应该是使用模板进行逐像素匹配的(?)。

通过使用cvGetQuadrangleSubPix()函数对Source Image进行亚像素精度的旋转,Template Image保持不变,将旋转后的Source Image和Template Image使用OpenCV的cvMatchTemplate()进行匹配,将所有的匹配结果中最优的一个作为匹配的结果。对于比较大的图像,首先使用cvPyrDown()函数对Source Image和Template Image进行金字塔处理,然后进行带旋转的初步定位,之后再将Source Image和Template Image恢复到原始尺寸进行精确定位,这样可以减少匹配的时间。

目前这个MatchTemplate方法不能解决仿射变化。速度还有提升的空间。看到大量论文中都是使用LSM进行精确的亚像素级匹配,目前还没有实现。不过简单的使用已经满足了。

源代码放到了github上面,获得源代码:

git clone git://github.com/BeanYoung/MatchTemplate.git

image


image


Face detection with OpenCV

在 facebook 上,你可以上傳一張照片,照片上如果有人像的話,facebook 會自動判斷,並且將人名標註上面。怎麼判斷人像屬於誰我還沒有研究,但是今天稍微研究了一下如何從照片或者 camera 影像中找到「人臉」的部份,然後發現作法 — 超簡單!其實就只是使用了 OpenCV 這個 library。

OpenCV 是一個將圖學各種應用集大成的 library,支援 Windows / Linux / Mac 等平台,是開放源碼,所以有無數的人貢獻了許多演算法於其中,所以當你裝好 OpenCV 之後,基本上就已經有了一些演算法的支援,其中人臉判斷經常會被用到的演算法 Haar Feature 也在其中,你只要在網路上找到一組 training set,便可以輕易的實作出來了。

我實作的平台是 Mac,使用的是 OpenCV 的 Python binding。

首先,用 brew 安裝 OpenCV library:

brew install opencv

當你安裝完之後,Python 語言的 binding 會被自動安裝在 /usr/local/lib/Python2.7/site-packages 底下,然後參考網路上別人的方法,底下是個簡單的範例:

執行的結果如下圖:

後來找了一下,也有人將 OpenCV port 到 iOS 平台上,所以也是可以直接寫個 app 來做人臉辨識(甚至作更多有趣的應用!)

此外,有一個線上的服務,提供類似 facebook 的人臉與人的辨識功能: http://face.com

Loading more posts...