最快的Python方法来评估haar特征值

时间:2013-10-10 13:56:35

标签: python haar-wavelet viola-jones

您好我是python的新手,并使用python实现Viola-Jones面部检测算法。在使用Adaboost进行haar-feature选择时,我的代码需要花费极长的时间(大约18个小时)才能在每轮增强中选择一个haar-feature。不知怎的,我发现评估haar功能所花费的时间是我代码中最耗时的工作。我将在下面展示python代码:

列表:积分图像列表

(x,y,h,w,f,p):位置(x,y)处的哈尔特征。 h和w是一个矩形的高度和宽度 在haar特征中,暗示两个矩形(| ---- | ---- |)的haar特征的总高度为h,总宽度为2 * w。 f是haar要素类型,p是奇偶校验。

def EvaluateHaar(List,(x,y,h,w,f,p)):       

    def Zero():        

        if x==0 and y==0:       
           bright = (i[x+h-1,y+w-1]+0)-(0+0)       
           dark = (i[x+2*h-1,y+w-1]+0)-(i[x+h-1,y+w-1]+0)       

        elif y==0:       
           bright = (i[x+h-1,y+w-1]+0)-(i[x-1,y+w-1]+0)      
           dark = (i[x+2*h-1,y+w-1]+0)-(i[x+h-1,y+w-1]+0)      

        elif x==0:       
           bright = (i[x+h-1,y+w-1]+0)-(0+i[x+h-1,y-1])     
           dark = (i[x+2*h-1,y+w-1]+i[x+h-1,y-1])-(i[x+h-1,y+w-1]+i[x+2*h-1,y-1])     

        else:    
           bright = (i[x+h-1,y+w-1]+i[x-1,y-1])-(i[x-1,y+w-1]+i[x+h-1,y-1])       
           dark = (i[x+2*h-1,y+w-1]+i[x+h-1,y-1])-(i[x+h-1,y+w-1]+i[x+2*h-1,y-1])

        return bright, dark 

    def One():

         if x==0 and y==0:     
            bright = (i[x+h-1,y+2*w-1]+0)-(0+i[x+h-1,y+w-1])      
            dark = (i[x+h-1,y+w-1]+0)-(0+0)     

         elif y==0:     
             bright = (i[x+h-1,y+2*w-1]+i[x-1,y+w-1])-(i[x-1,y+2*w-1]+i[x+h-1,y+w-1])    
             dark = (i[x+h-1,y+w-1]+0)-(i[x-1,y+w-1]+0)     

         elif x==0:       
              bright = (i[x+h-1,y+2*w-1]+0)-(0+i[x+h-1,y+w-1])     
              dark = (i[x+h-1,y+w-1]+0)-(0+i[x+h-1,y-1])     

         else:     
              bright = (i[x+h-1,y+2*w-1]+i[x-1,y+w-1])-(i[x-1,y+2*w-1]+i[x+h-1,y+w-1])     
              dark = (i[x+h-1,y+w-1]+i[x-1,y-1])-(i[x-1,y+w-1]+i[x+h-1,y-1])    

         return bright, dark 

    options = {0 : Zero, 
               1 : One,   
    }
    R = []     
    append1 = R.append     

    for i in List:      

        bright,dark = options[f]()     
        if p == 1:     
           hf = (dark-bright)      
        else:     
           hf = (bright-dark)     
        append1(hf)
    return R

以上代码评估两个haar要素类型两个矩形水平haar-feature和两个矩形垂直haar功能。

有没有最快的方法来使用python评估haar-features? 任何建议改进上面的代码,以便我可以处理时间因素。 在这里,我最关心的是时间因素而不是其他任何因素。

谢谢!

0 个答案:

没有答案