理論:
在上一節(jié)拘荡,我們看了Harris角點(diǎn)檢測员串,在1994年,J.Shi 和C.Tomasi 在他們的論文Good Features to Track 里對(duì)之作了小修改伶椿。比Harris角點(diǎn)檢測有更好結(jié)果再芋。Harris 角點(diǎn)檢測的得分函數(shù):
而Shi-Tomasi提出的:
如果高于閾值的菊霜,就被認(rèn)為是角。如果我們?cè)讦? - λ2空間里畫出來祝闻,得到的圖像是:
從圖里可以看到占卧,只有當(dāng)λ1和λ2高于最小值λmin遗菠,才是角(綠色區(qū)域)
代碼
OpenCV有個(gè)函數(shù)cv2.goodFeaturesToTrack()联喘。它會(huì)用Shi-Tomasi方法(或者Harris角點(diǎn)檢測,你可以指定)找到N個(gè)最強(qiáng)的角辙纬。輸入圖像仍然應(yīng)該是灰度圖豁遭。然后你指定你想找到的角的數(shù)量,接著指定質(zhì)量級(jí)別贺拣,值介于0和1之間蓖谢,指明了角的最小質(zhì)量捂蕴。之后我們提供角之間的最小歐幾里得距離。
通過所有這些信息闪幽,函數(shù)可以在圖像里找角啥辨。所有低于質(zhì)量級(jí)別的角被拒絕。然后它會(huì)根據(jù)質(zhì)量降序?qū)κO碌慕桥判蚨㈦纭H缓蠛瘮?shù)取第一個(gè)最強(qiáng)的角溉知,把周圍的最小距離內(nèi)的所有角都扔掉,然后返回N個(gè)最強(qiáng)的角腕够。
下面的例子级乍,我們會(huì)試圖找最好的25個(gè)角:
import numpy as np
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('simple.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)corners = cv2.goodFeaturesToTrack(gray,25,0.01,10)
corners = np.int0(corners)for i in corners:
? ? x,y = i.ravel()
? ? cv2.circle(img,(x,y),3,255,-1)plt.imshow(img),plt.show()
結(jié)果:
這個(gè)函數(shù)更適合跟蹤。