示例#1
0
def get_axes(pts):
    if MODE == TOWEL:
        y_axis = Vector2D.normalize(Vector2D.pt_diff(pts[1],pts[0]))
        
    elif MODE == PANTS:
        y_axis = Vector2D.normalize(Vector2D.pt_diff(Vector2D.pt_scale(Vector2D.pt_sum(pts[4],pts[3]),0.5),pts[0]))
    else:
        y_axis = Vector2D.normalize(Vector2D.pt_diff(pts[5],Vector2D.pt_scale(Vector2D.pt_sum(pts[0],pts[-1]),0.5)))
    x_axis = (-1*y_axis[1],y_axis[0])
    print (x_axis,y_axis)
    return (x_axis,y_axis)
    if MODE == SWEATER or MODE == TEE:
        check_points = (0,1,2,3,4,8,9,10,11,12)
    else:
        check_points = range(len(test_pts))
示例#2
0
def get_axes(pts):
    if MODE == TOWEL:
        y_axis = Vector2D.normalize(Vector2D.pt_diff(pts[1], pts[0]))

    elif MODE == PANTS:
        y_axis = Vector2D.normalize(
            Vector2D.pt_diff(
                Vector2D.pt_scale(Vector2D.pt_sum(pts[4], pts[3]), 0.5),
                pts[0]))
    else:
        y_axis = Vector2D.normalize(
            Vector2D.pt_diff(
                pts[5], Vector2D.pt_scale(Vector2D.pt_sum(pts[0], pts[-1]),
                                          0.5)))
    x_axis = (-1 * y_axis[1], y_axis[0])
    print(x_axis, y_axis)
    return (x_axis, y_axis)
    if MODE == SWEATER or MODE == TEE:
        check_points = (0, 1, 2, 3, 4, 8, 9, 10, 11, 12)
    else:
        check_points = range(len(test_pts))
示例#3
0
def visualize_errors(rel_pts):
    model_file = MODELS[MODE]
    model = pickle.load(open(model_file))
    white_image = cv.CreateImage((750, 500), 8, 3)
    cv.Set(white_image, cv.CV_RGB(255, 255, 255))
    model.translate((50, 0))
    model.draw_to_image(white_image, cv.CV_RGB(0, 0, 255))
    """
    for i,pt in enumerate(model.vertices_full()):
        ctr = (pt[0] + mean_x[i],pt[1] + mean_y[i])
        y_axis = std_y[i]
        x_axis = std_x[i]
        cv.Ellipse(white_image,ctr,(x_axis,y_axis),0,0,360,cv.CV_RGB(255,0,0))
    """

    for i, pt in enumerate(model.vertices_full()):
        print "Drawing model"
        absolute_pts = [Vector2D.pt_sum(pt, rel_pt) for rel_pt in rel_pts[i]]
        #for abs_pt in absolute_pts:
        #    cv.Circle(white_image,abs_pt,2,cv.CV_RGB(0,255,0),-1)
        angle = get_angle(rel_pts[i])

        x_axis = (cos(angle), -1 * sin(angle))
        y_axis = (sin(angle), cos(angle))
        mean_x = lst_avg([x for (x, y) in rel_pts[i]]) + pt[0]
        mean_y = lst_avg([y for (x, y) in rel_pts[i]]) + pt[1]
        std_dev_x = lst_std(
            [Vector2D.dot_prod(rel_pt, x_axis) for rel_pt in rel_pts[i]])
        std_dev_y = lst_std(
            [Vector2D.dot_prod(rel_pt, y_axis) for rel_pt in rel_pts[i]])
        cv.Ellipse(white_image, (mean_x, mean_y), (std_dev_x, std_dev_y),
                   angle * 360 / (2 * pi), 0, 360, cv.CV_RGB(255, 0, 0), 2)
        """
        newmat = cv.CreateMat(1,len(absolute_pts),cv.CV_32SC2)
        for i in range(len(absolute_pts)):
            newmat[0,i] = absolute_pts[i]
        fit_ellipse = cv.FitEllipse2(newmat)
        cv.EllipseBox(white_image,fit_ellipse,cv.CV_RGB(255,0,0))
        """

    cv.SaveImage("comparison.png", white_image)
示例#4
0
def visualize_errors(rel_pts):
    model_file = MODELS[MODE]
    model = pickle.load(open(model_file))
    white_image = cv.CreateImage((750,500),8,3)
    cv.Set(white_image,cv.CV_RGB(255,255,255))
    model.translate((50,0))
    model.draw_to_image(white_image,cv.CV_RGB(0,0,255))
    """
    for i,pt in enumerate(model.vertices_full()):
        ctr = (pt[0] + mean_x[i],pt[1] + mean_y[i])
        y_axis = std_y[i]
        x_axis = std_x[i]
        cv.Ellipse(white_image,ctr,(x_axis,y_axis),0,0,360,cv.CV_RGB(255,0,0))
    """
    
    for i,pt in enumerate(model.vertices_full()):
        print "Drawing model"
        absolute_pts = [Vector2D.pt_sum(pt,rel_pt) for rel_pt in rel_pts[i]]
        #for abs_pt in absolute_pts:
        #    cv.Circle(white_image,abs_pt,2,cv.CV_RGB(0,255,0),-1)
        angle = get_angle(rel_pts[i])
        
        x_axis = (cos(angle),-1*sin(angle))
        y_axis = (sin(angle),cos(angle))
        mean_x = lst_avg([x for (x,y) in rel_pts[i]]) + pt[0]
        mean_y = lst_avg([y for (x,y) in rel_pts[i]]) + pt[1]
        std_dev_x = lst_std([Vector2D.dot_prod(rel_pt,x_axis) for rel_pt in rel_pts[i]])
        std_dev_y = lst_std([Vector2D.dot_prod(rel_pt,y_axis) for rel_pt in rel_pts[i]])
        cv.Ellipse(white_image,(mean_x,mean_y),(std_dev_x,std_dev_y),angle*360/(2*pi),0,360,cv.CV_RGB(255,0,0),2)
        """
        newmat = cv.CreateMat(1,len(absolute_pts),cv.CV_32SC2)
        for i in range(len(absolute_pts)):
            newmat[0,i] = absolute_pts[i]
        fit_ellipse = cv.FitEllipse2(newmat)
        cv.EllipseBox(white_image,fit_ellipse,cv.CV_RGB(255,0,0))
        """
        
    cv.SaveImage("comparison.png",white_image)
 def extract_samples(self,nearest_pts,cv_image,contour):
     [center,b_l,t_l,t_r,b_r] = nearest_pts
     l_line = Vector2D.make_seg(center,t_l)
     r_line = Vector2D.make_seg(center,t_r)
     
     l_side = Vector2D.make_seg(b_l,t_l)
     bl_side = Vector2D.make_seg(b_l,center)
     br_side = Vector2D.make_seg(b_r,center)
     r_side = Vector2D.make_seg(b_r,t_r)
     t_side = Vector2D.make_seg(t_l,t_r)
     l_crop_br = Vector2D.extrapolate_pct(bl_side,0.5)
     l_crop_bl = Vector2D.intercept(l_side,Vector2D.horiz_ln(l_crop_br[1]))
     l_crop_tr = Vector2D.intercept(Vector2D.vert_ln(l_crop_br[0]),l_line)
     l_crop_tl = Vector2D.pt_sum(l_crop_bl,Vector2D.pt_diff(l_crop_tr,l_crop_br))
     l_rect = (l_crop_bl,l_crop_br,l_crop_tr,l_crop_tl)
     r_crop_bl = Vector2D.extrapolate_pct(br_side,0.5)
     r_crop_br = Vector2D.intercept(r_side,Vector2D.horiz_ln(r_crop_bl[1]))
     r_crop_tl = Vector2D.intercept(Vector2D.vert_ln(r_crop_bl[0]),r_line)
     r_crop_tr = Vector2D.pt_sum(r_crop_br,Vector2D.pt_diff(r_crop_tl,r_crop_bl))
     r_rect = (r_crop_bl,r_crop_br,r_crop_tr,r_crop_tl)
     t_crop_bl = Vector2D.extrapolate_pct(l_line,0.5)
     t_crop_br = Vector2D.intercept(Vector2D.horiz_ln(t_crop_bl[1]),r_line)
     if t_l[1] > t_r[1]:
         t_crop_tl = Vector2D.intercept(Vector2D.vert_ln(t_crop_bl[0]),t_side)
         t_crop_tr = Vector2D.pt_sum(t_crop_br,Vector2D.pt_diff(t_crop_tl,t_crop_bl))
     else:
         t_crop_tr = Vector2D.intercept(Vector2D.vert_ln(t_crop_br[0]),t_side)
         t_crop_tl = Vector2D.pt_sum(t_crop_bl,Vector2D.pt_diff(t_crop_tr,t_crop_br))
     
     """
     t_rect_old = (t_crop_bl,t_crop_br,t_crop_tr,t_crop_tl)
     
     (orig_t_width,orig_t_height) = Vector2D.rect_size(t_rect_old)
     while cv.PointPolygonTest(contour,Vector2D.pt_scale(Vector2D.pt_sum(t_crop_tl,t_crop_tr),0.5),0) < 0:
         t_crop_tl = (t_crop_tl[0],t_crop_tl[1]+0.05*orig_t_height)
         t_crop_tr = (t_crop_tr[0],t_crop_tr[1]+0.05*orig_t_height)
         print "shrinking t_height"
     """
     t_rect = (t_crop_bl,t_crop_br,t_crop_tr,t_crop_tl)
     
     (l_width,l_height) = Vector2D.rect_size(l_rect)
     (r_width,r_height) = Vector2D.rect_size(r_rect)
     (t_width,t_height) = Vector2D.rect_size(t_rect)
     #print "Height difference:%f"%(t_height - orig_t_height)
     
     width = min(l_width,r_width,t_width) * 0.9
     height = min(l_height,r_height,t_height) * 0.9
     if width < 5:
         width = 5
         print "Hit min"
     if height < 5:
         height = 5
         print "Hit min"
     l_rect_scaled = Vector2D.scale_rect(l_rect,width,height)
     r_rect_scaled = Vector2D.scale_rect(r_rect,width,height)
     t_rect_scaled = Vector2D.scale_rect(t_rect,width,height)
     filenames = ("l_part.png","r_part.png","t_part.png")
     for i,r in enumerate((l_rect_scaled,r_rect_scaled,t_rect_scaled)):
         
         image_temp = cv.CloneImage(cv_image)
         cv.SetImageROI(image_temp,Vector2D.rect_to_cv(r))
         cv.SaveImage("%s/%s"%(self.save_dir,filenames[i]),image_temp)
     return (l_line,r_line)