Python OpenCV中彩色噪声的图像比较?

Python OpenCV中彩色噪声的图像比较?,python,image,opencv,compare,Python,Image,Opencv,Compare,我有一个密码: 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(fr

我有一个密码:

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)

图像2比图像1更暗

你能建议我快速比较算法忽略图像上的光、模糊、噪声或修改它们吗

注意:

我也有模板匹配算法:

但它的工作速度比我需要的慢,尽管相似性为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)
谢谢

图像补丁描述符(SIFT、SURF…)通常是单色的,需要黑白图像。因此,对于任何方法(点匹配、帧匹配…),我建议您首先将颜色空间更改为Lab或YUV,然后在亮度平面上工作


FAST是一种(快速)角点检测算法。角点显然对噪声和对比度不敏感,但可能会受到模糊的影响(例如,位置不好,角点响应不好)。然而,FAST不包括描述符部分,所以您的匹配应该依赖于几何邻近性。如果您需要描述符部分,则需要切换到许多其他关键点描述符(SIFT、SURF、FAST+BRIENT/BRISK/ORB/FRANK…)中的一个。您的问题是计算机视觉和图像处理中的经典问题之一。撰写了许多博士论文,并在会议和期刊上发表了数十篇论文

简而言之,直接像素比较在这种情况下不起作用。需要进行某种转换才能将您带到不同的要素空间。你可以做一些简单或复杂的事情,这取决于你心中的需求。您可以计算边或角。已经提到的一个建议是快速角点检测。这将是一个很好的选择,因为将筛选等。。。还有许多其他的你可以使用,但这将取决于有多少两个图像可以不同,在什么样的方式

例如,如果只会出现全局颜色变化、色调等,则方法将不同于图像可以旋转或对象位置大小变化(即相机变焦)

严格地说,对于您提到的情况,快速、筛选、甚至边缘等功能都可以很好地工作。查看更多信息