/************************************************************************************** Func: 触摸屏校准 Time: 2014-6-18 Ver.: V1.0 Note; **************************************************************************************/ void TouchScreen_Correct() { uint8 TOUCH_Index=0; if(Cheak_Correct()){ #ifdef COMPILE_MODE_DEBUG DeBug("Load Touch Configs Ok!",Infor_Infor); #endif return;} LCD_Clear_Screen(Color_Black); TOUCH_Correct_TaskID=Tos_TaskCurrent; TOUCH_DrawRound(TOUCH_Index); DeBug_Get(); while(TOUCH_Index<5) { TOUCH_DrawRound(TOUCH_Index); TouchScreen_GetTouch(TOUCH_Index); Draw_Cross(TOUCH_CROSS_ADDR[TOUCH_Index][0],TOUCH_CROSS_ADDR[TOUCH_Index][1],5,Color_White,TOUCH_Index); TOUCH_Index++; } if(Cheak_Correct())Save_Touch_Configs(); DeBug_Drop(); }
void process_image() { int i, j; int *inliers_index; CvSize ellipse_axis; CvPoint gaze_point; static int lost_frame_num = 0; Grab_Camera_Frames(); cvZero(ellipse_image); cvSmooth(eye_image, eye_image, CV_GAUSSIAN, 5, 5); Reduce_Line_Noise(eye_image); if (save_image == 1) { printf("save image %d\n", image_no); sprintf(eye_file, "./Eye/Eye_%05d.jpg", image_no); image_no++; cvSaveImage(eye_file, eye_image); } //corneal reflection remove_corneal_reflection(eye_image, threshold_image, (int)start_point.x, (int)start_point.y, cr_window_size, (int)eye_image->height/10, corneal_reflection.x, corneal_reflection.y, corneal_reflection_r); printf("corneal reflection: (%d, %d)\n", corneal_reflection.x, corneal_reflection.y); Draw_Cross(ellipse_image, corneal_reflection.x, corneal_reflection.y, 15, 15, Yellow); //starburst pupil contour detection starburst_pupil_contour_detection((UINT8*)eye_image->imageData, eye_image->width, eye_image->height, edge_threshold, rays, min_feature_candidates); inliers_num = 0; inliers_index = pupil_fitting_inliers((UINT8*)eye_image->imageData, eye_image->width, eye_image->height, inliers_num); ellipse_axis.width = (int)pupil_param[0]; ellipse_axis.height = (int)pupil_param[1]; pupil.x = (int)pupil_param[2]; pupil.y = (int)pupil_param[3]; Draw_Cross(ellipse_image, pupil.x, pupil.y, 15, 15, Red); cvLine(eye_image, pupil, corneal_reflection, Red, 4, 8); cvLine(ellipse_image, pupil, corneal_reflection, Red, 4, 8); printf("ellipse a:%lf; b:%lf, cx:%lf, cy:%lf, theta:%lf; inliers_num:%d\n\n", pupil_param[0], pupil_param[1], pupil_param[2], pupil_param[3], pupil_param[4], inliers_num); bool is_inliers = 0; for (int i = 0; i < edge_point.size(); i++) { is_inliers = 0; for (int j = 0; j < inliers_num; j++) { if (i == inliers_index[j]) is_inliers = 1; } stuDPoint *edge = edge_point.at(i); if (is_inliers) Draw_Cross(ellipse_image, (int)edge->x,(int)edge->y, 5, 5, Green); else Draw_Cross(ellipse_image, (int)edge->x,(int)edge->y, 3, 3, Yellow); } free(inliers_index); if (ellipse_axis.width > 0 && ellipse_axis.height > 0) { start_point.x = pupil.x; start_point.y = pupil.y; //printf("start_point: %d,%d\n", start_point.x, start_point.y); Draw_Cross(eye_image, pupil.x, pupil.y, 10, 10, Green); cvEllipse(eye_image, pupil, ellipse_axis, -pupil_param[4]*180/PI, 0, 360, Red, 2); cvEllipse(ellipse_image, pupil, ellipse_axis, -pupil_param[4]*180/PI, 0, 360, Green, 2); diff_vector.x = pupil.x - corneal_reflection.x; diff_vector.y = pupil.y - corneal_reflection.y; if (do_map2scene) { gaze_point = homography_map_point(diff_vector); printf("gaze_point: (%d,%d)\n", gaze_point.x, gaze_point.y); Draw_Cross(scene_image, gaze_point.x, gaze_point.y, 60, 60, Red); } lost_frame_num = 0; } else { lost_frame_num++; } if (lost_frame_num > 5) { start_point.x = FRAMEW/2; start_point.y = FRAMEH/2; } Draw_Cross(ellipse_image, (int)start_point.x, (int)start_point.y, 7, 7, Blue); Draw_Cross(eye_image, (int)start_point.x, (int)start_point.y, 7, 7, Blue); if (save_ellipse == 1) { printf("save ellipse %d\n", ellipse_no); sprintf(ellipse_file, "./Ellipse/Ellipse_%05d.jpg", ellipse_no); ellipse_no++; cvSaveImage(ellipse_file, ellipse_image); fprintf(ellipse_log, "%.3f\t %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n", Time_Elapsed(), pupil_param[0], pupil_param[1], pupil_param[2], pupil_param[3], pupil_param[4]); } printf("Time elapsed: %.3f\n", Time_Elapsed()); fprintf(logfile,"%.3f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", Time_Elapsed(), pupil.x, pupil.y, corneal_reflection.x, corneal_reflection.y, diff_vector.x, diff_vector.y, gaze_point.x, gaze_point.y); if (view_cal_points) Show_Calibration_Points(); }
void Show_Calibration_Points() { int i; for (i=0;i<CALIBRATIONPOINTS;i++) Draw_Cross(scene_image, scenecalipoints[i].x, scenecalipoints[i].y, 25, 25, CV_RGB(255,255,255)); }