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))
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))
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 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)