Example #1
0
def srasm2(enhimgtf, edgeimgs, marks, orient, k, m, modes, maxiter):
    lms,_ = lm.procrustes(marks)
    mean, eigenvecs, eigenvals, lm_reduced = lm.pca_reduce(lms, modes)
    stdvar = np.std(lm_reduced, axis=1)
    
    croppedmarks = np.array([])
    for i in range(13):
        croppedmarks = np.append(croppedmarks,lm.transform_shape(np.reshape(marks[:,i],(marks[:,i].size,1)),-1150,-500,1,0))
    for i in range(13):
        croppedmarks = np.append(croppedmarks,lm.transform_shape(np.reshape(marks[:,i + 13],(marks[:,i + 13].size,1)),-1173,-500,1,0))
    croppedmarks = np.reshape(croppedmarks,(croppedmarks.size / 26,26),'F') 
    smallermarks = np.array([])
    for i in range(26):
        smallermarks = np.append(smallermarks,lm.transform_shape(np.reshape(croppedmarks[:,i],(croppedmarks[:,i].size,1)),0,0,1.0 / 2,0))
    smallermarks = np.reshape(smallermarks,(smallermarks.size / 26,26),'F') 
    
    itx, ity, isc, itheta = init.get_initial_transformation(enhimgtf,mean,orient)
    b = np.zeros((modes,1))
    
    imgtf = pp.apply_sobel(enhimgtf)
    imgtf = cv2.pyrDown(imgtf)
    edgies = np.array(map(lambda x: cv2.pyrDown(x),edgeimgs))
    means, covs = gl.get_statistical_model_new(edgies,smallermarks,k)
    b, ntx, nty, nsc, itheta = asm(imgtf, means, covs, b, itx / 2, ity / 2, isc / 2, itheta, k, m, stdvar, mean, eigenvecs, maxiter, orient)      
    return lm.transform_shape(lm.pca_reconstruct(b,mean,eigenvecs),ntx * 2,nty * 2,nsc * 2,itheta)
Example #2
0
def match_image(imgind, orientation = 2, showground = True, modes = 5, k = 5, m = 10, maxiter = 50, multires = True):
    img = io.get_enhanced_img(imgind)
    imges = io.get_all_gradient_img(imgind)
    colgradimg = io.greyscale_to_colour(io.get_img(imgind))
    #colgradimg = io.greyscale_to_colour(pp.apply_sobel(img))
    
    # Init evaluation
    upper = None
    upperground = None
    lower = None
    lowerground = None
    itervec = np.array([0,0,0,0])
    
    if orientation != 1:
        marks = io.read_all_landmarks_by_orientation(0,imgind)
        if multires:
            upper, itervec[0:2] = mrasm(img, imges, marks,0, k, m, modes, maxiter)
        else:
            upper = srasm2(img, imges, marks,0, k, m, modes, maxiter)
        draw.draw_contour(colgradimg,upper, thicc=1)
        
        allmarks = io.read_all_landmarks_by_orientation(0)
        upperground = None
        upperground = np.reshape(allmarks[:,imgind - 1],(allmarks[:,imgind - 1].size,1))
        upperground = lm.transform_shape(upperground,-1150,-500,1,0)
            
        if showground:
            draw.draw_contour(colgradimg,upperground,color=(0,255,0), thicc=1)

    if orientation != 0:
        marks = io.read_all_landmarks_by_orientation(1,imgind)
        if multires:
            lower, itervec[2:4] = mrasm(img, imges, marks,1, k, m, modes, maxiter)
        else:
            lower = srasm2(img, imges, marks,1, k, m, modes, maxiter)            
        draw.draw_contour(colgradimg,lower, thicc=1)
        
        allmarks = io.read_all_landmarks_by_orientation(1)
        lowerground = None
        lowerground = np.reshape(allmarks[:,imgind - 1],(allmarks[:,imgind - 1].size,1))
        lowerground = lm.transform_shape(lowerground,-1150,-500,1,0)
        if showground:
            draw.draw_contour(colgradimg,lowerground,color=(0,255,0), thicc=1)
    
    #io.show_on_screen(colgradimg,1)
    #cv2.imwrite("result_contour.png",colgradimg)
    
    dumpimg = io.greyscale_to_colour(io.get_img(imgind))
    # evaluate_results(upper, upperground, lower, lowerground, True, dumpimg)
    cv2.imwrite(str(imgind) + "i" + str(maxiter) + '.png',dumpimg)
    #io.show_on_screen(dumpimg,1)
    return itervec
Example #3
0
def mrasm(enhimgtf, edgeimgs, marks, orient, k, m, modes, maxiter, resdepth = 1):
    itervec = np.array([0,0])
    lms,_ = lm.procrustes(marks)
    mean, eigenvecs, eigenvals, lm_reduced = lm.pca_reduce(np.copy(lms), 26)
    coverage, modes_needed = lm.get_num_eigenvecs_needed(eigenvals)
    mean, eigenvecs, eigenvals, lm_reduced = lm.pca_reduce(lms, modes_needed)
    stdvar = np.std(lm_reduced, axis=1)
    
    croppedmarks = np.array([])
    for i in range(13):
        croppedmarks = np.append(croppedmarks,lm.transform_shape(np.reshape(marks[:,i],(marks[:,i].size,1)),-1150,-500,1,0))
    for i in range(13):
        croppedmarks = np.append(croppedmarks,lm.transform_shape(np.reshape(marks[:,i + 13],(marks[:,i + 13].size,1)),-1173,-500,1,0))
    croppedmarks = np.reshape(croppedmarks,(croppedmarks.size / 26,26),'F') 
    
    itx, ity, isc, itheta = init.get_initial_transformation(enhimgtf,mean,orient)
    b = np.zeros((modes_needed,1))
    
    print ''
    print 'Starting multi-resolution fitting procedure for orientation ' + str(orient)
    print '--------'
    imgtf = pp.apply_sobel(enhimgtf)
    for i in range(resdepth + 1):
        print 'Step ' + str(i) + ':'
        edgies = edgeimgs
        limgtf =  imgtf
        j = 0
        while resdepth - i > j:
            limgtf = cv2.pyrDown(limgtf)
            edgies = np.array(map(lambda x: cv2.pyrDown(x),edgies))
            smallermarks = np.array([])
            for l in range(26):
                smallermarks = np.append(smallermarks,lm.transform_shape(np.reshape(croppedmarks[:,l],(croppedmarks[:,l].size,1)),0,0,1.0 / 2,0))
            smallermarks = np.reshape(smallermarks,(smallermarks.size / 26,26),'F') 
            j += 1 
        
        means, covs = gl.get_statistical_model_new(edgies,smallermarks,k)
        b, ntx, nty, nsc, itheta, itervec[i] = asm(limgtf, means, covs, b, float(itx) / math.pow(2.0,(resdepth-i)), float(ity) / math.pow(2.0,(resdepth-i)), float(isc) / math.pow(2.0,(resdepth-i)), itheta, k, m, stdvar, mean, eigenvecs, maxiter, orient)
        itx = ntx * math.pow(2.0,(resdepth-i))
        ity = nty * math.pow(2.0,(resdepth-i))
        isc = nsc * math.pow(2.0,(resdepth-i))
        
    return lm.transform_shape(lm.pca_reconstruct(b,mean,eigenvecs),itx,ity,isc,itheta), itervec
Example #4
0
def asm(imgtf, means, covs, b, tx, ty, s, theta, k, m, stdvar, mean, eigenvecs, maxiter, orient):
    numit = -1
    for i in range(maxiter):                 
        shapetf = lm.pca_reconstruct(b,mean,eigenvecs)
        shapetf = lm.transform_shape(shapetf, tx, ty, s, theta)   
        approx, stop = find_new_points(imgtf, shapetf, means, covs, k, m, orient)
        
        if stop:
            numit = i+1
            print '  Stopped at iteration ' + str(i) + ' out of ' + str(maxiter) + ' maximum.'
            break
        b, tx, ty, s, theta = match_model_to_target(approx, mean, eigenvecs)
        
        #Check for plausible shapes
        for p in range(b.size):
            b[p, 0] = max(min(b[p, 0],3*stdvar[p]),-3*stdvar[p])
        
        if i == maxiter - 1:
            numit = maxiter
            print '  Completed max number of iterations: ' + str(i + 1)
            
    return b, tx, ty, s, theta, numit
Example #5
0
def make_object_space_visible(ls):
    return lms.transform_shape(ls, 350, 250, 2203, 0)