2013-10-09 64 views
-1

我有一個代碼:與OpenCV中的色彩噪聲的圖像比較?

def compare_frames(frame1, frame2): 
    # cropping ranges of two images 
    frame1, frame2 = similize(frame1, frame2) 

    sc = 0 
    h = numpy.zeros((300,256,3)) 
    frame1= cv2.cvtColor(frame1,cv2.COLOR_BGR2HSV) 
    frame2= cv2.cvtColor(frame2,cv2.COLOR_BGR2HSV) 
    bins = numpy.arange(256).reshape(256,1) 
    color = [ (255,0,0),(0,255,0),(0,0,255) ] 

    for ch, col in enumerate(color): 
     hist_item1 = cv2.calcHist([frame1],[ch],None,[256],[0,255]) 
     hist_item2 = cv2.calcHist([frame2],[ch],None,[256],[0,255]) 
     cv2.normalize(hist_item1,hist_item1,0,255,cv2.NORM_MINMAX) 
     cv2.normalize(hist_item2,hist_item2,0,255,cv2.NORM_MINMAX) 
     sc = sc + (cv2.compareHist(hist_item1, hist_item2, cv2.cv.CV_COMP_CORREL)/len(color)) 
    return sc 

它的工作原理,但如果圖像具有色噪聲(更多變暗/變亮色調),它不工作,並給相似度等於0.5。 (需要0.8)

image1

image2

2的圖像更加變暗比圖像1.

你建議我FAST比較algorythm忽略光,模糊,噪點上的圖像或修改?

注:

我有模板匹配algorythm太:

但工程進展緩慢比我更需要,雖然相似度0.95。

def match_frames(frame1, frame2): 
    # cropping ranges of two images 
    frame1, frame2 = similize(frame1, frame2) 

    result = cv2.matchTemplate(frame1,frame2,cv2.TM_CCOEFF_NORMED) 
    return numpy.amax(result) 

感謝

回答

0

像塊描述符(SIFT,SURF ...)通常是單色的,並期望黑色和白色圖像。因此,對於任何方法(點匹配,幀匹配...),我建議您先將色彩空間更改爲Lab或YUV,然後在亮度平面上工作。

FAST是一種(快速)角點檢測算法。角落顯然對噪音和對比度不敏感,但可能會受到模糊(例如位置不佳,角落反應不佳)影響。但是,FAST不包含描述符部分,因此您的匹配應該依賴於幾何鄰近。如果需要描述符部分,則需要切換到其他關鍵點描述符(SIFT,SURF,FAST + BRIEF/BRISK/ORB/FREAK ...)中的一個。

+0

任何示例或鏈接? – xercool

1

您的問題是計算機視覺和圖像處理中的經典問題之一。許多博士論文已經在會議和期刊中撰寫並發表了大量論文。

簡而言之,直接像素比較在這種情況下不起作用。需要某種變換將您帶到不同的特徵空間。根據您的要求,您可以做簡單或複雜的事情。你可以計算邊或角。已經提到的一個建議是FAST角點檢測。這將是一個不錯的選擇,就像SIFT等一樣......還有很多其他的你可以使用,但這取決於兩幅圖像可以變化多少以及以何種方式。例如,如果只有全局顏色變化,色調等,則該方法將不同於如果圖像可以被旋轉或者物體位置的大小改變(即,相機縮放),則該方法會不同。

嚴格來說,對於您提到的功能如FAST,SIFT,甚至邊緣都可以很好地工作。請查詢http://en.wikipedia.org/wiki/Feature_detection_%28computer_vision%29以獲取更多信息