Skip to content

Commit

Permalink
testing correspondences
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlib committed Oct 7, 2023
1 parent 2c120e1 commit 1db47f1
Show file tree
Hide file tree
Showing 6 changed files with 263 additions and 108 deletions.
56 changes: 49 additions & 7 deletions liboptv/src/multimed.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ void multimed_nlay (Calibration *cal, mm_np *mm, vec3d pos,
{
double radial_shift;

radial_shift = multimed_r_nlay (cal, mm, pos);
radial_shift = multimed_r_nlay (cal, mm, pos);
// printf("radial shift is %f\n", radial_shift);

/* if radial_shift == 1.0, this degenerates to Xq = X, Yq = Y */
*Xq = cal->ext_par.x0 + (pos[0] - cal->ext_par.x0) * radial_shift;
Expand All @@ -60,14 +61,15 @@ double multimed_r_nlay (Calibration *cal, mm_np *mm, vec3d pos) {
int n_iter = 40;
double beta1, beta2[32], beta3, r, rbeta, rdiff, rq, mmf=1.0;
double X,Y,Z;
double zout;
double zout, zdiff;

/* 1-medium case */
if (mm->n1 == 1 && mm->nlay == 1 && mm->n2[0]== 1 && mm->n3 == 1)
return (1.0);

/* interpolation using the existing mmlut */
if (cal->mmlut.data != NULL) {
printf("going into get_mmf_from_mmlut\n");
mmf = get_mmf_from_mmlut(cal, pos);
if (mmf > 0) return (mmf);
}
Expand All @@ -83,11 +85,16 @@ double multimed_r_nlay (Calibration *cal, mm_np *mm, vec3d pos) {
zout += mm->d[i];

r = norm((X - cal->ext_par.x0), (Y - cal->ext_par.y0), 0);
// printf("r is %f\n", r);
rq = r;

do
{
beta1 = atan (rq/(cal->ext_par.z0 - Z));
zdiff = cal->ext_par.z0 - Z;
if (zdiff == 0) {
zdiff = 1.0;
}
beta1 = atan (rq / zdiff);
for (i = 0; i < mm->nlay; i++)
beta2[i] = asin (sin(beta1) * mm->n1/mm->n2[i]);
beta3 = asin (sin(beta1) * mm->n1/mm->n3);
Expand All @@ -102,6 +109,7 @@ double multimed_r_nlay (Calibration *cal, mm_np *mm, vec3d pos) {
}
while (((rdiff > 0.001) || (rdiff < -0.001)) && it < n_iter);

// printf("rq is %f\n", rq);

if (it >= n_iter) {
printf ("multimed_r_nlay stopped after %d iterations\n", n_iter);
Expand Down Expand Up @@ -261,45 +269,79 @@ void init_mmlut (volume_par *vpar, control_par *cpar, Calibration *cal) {

for (i = 0; i < 2; i ++) {
for (j = 0; j < 2; j++) {
// printf("i=%d, j=%d\n", i, j);
// printf("xc[i]=%f, yc[j]=%f\n", xc[i], yc[j]);
pixel_to_metric (&x, &y, xc[i], yc[j], cpar);
// printf("x=%f, y=%f\n", x, y);

x = x - cal->int_par.xh;
y = y - cal->int_par.yh;
x -= cal->int_par.xh;
y -= cal->int_par.yh;

correct_brown_affin (x, y, cal->added_par, &x,&y);
correct_brown_affin (x, y, cal->added_par, &x,&y);
// printf("x=%f, y=%f\n", x, y);
// printf("cal->ext_par.x0=%f, cal->ext_par.y0=%f\n", cal->ext_par.x0, cal->ext_par.y0);
// printf("cal->int_par.cc %f\n", cal->int_par.cc);
// printf("cpar->mm->nlay=%d\n", cpar->mm->nlay);


ray_tracing(x, y, cal, *(cpar->mm), pos, a);
// printf("pos[0]=%f, pos[1]=%f, pos[2]=%f\n", pos[0], pos[1], pos[2]);
// printf("a[0]=%f, a[1]=%f, a[2]=%f\n", a[0], a[1], a[2]);

move_along_ray(Zmin, pos, a, xyz);
// printf("xyz[0]=%f, xyz[1]=%f, xyz[2]=%f\n", xyz[0], xyz[1], xyz[2]);

trans_Cam_Point(cal->ext_par, *(cpar->mm), cal->glass_par, xyz, \
&(cal_t.ext_par), xyz_t, (double *)cross_p, (double *)cross_c);

// printf("xyz_t[0]=%f, xyz_t[1]=%f, xyz_t[2]=%f\n", xyz_t[0], xyz_t[1], xyz_t[2]);

if( xyz_t[2] < Zmin_t ) Zmin_t = xyz_t[2];
if( xyz_t[2] > Zmax_t ) Zmax_t = xyz_t[2];

R = norm((xyz_t[0] - cal_t.ext_par.x0), (xyz_t[1] - cal_t.ext_par.y0), 0);

// printf("before R: %f, %f\n", xyz_t[0] - cal_t.ext_par.x0, xyz_t[1] - cal_t.ext_par.y0);
// printf("R=%f\n", R);

if (R > Rmax)
Rmax = R;

// printf("Rmax=%f, Zmin_t=%f, Zmax_t=%f\n", Rmax, Zmin_t, Zmax_t);

move_along_ray(Zmax, pos, a, xyz);

// printf("xyz[0]=%f, xyz[1]=%f, xyz[2]=%f\n", xyz[0], xyz[1], xyz[2]);

trans_Cam_Point(cal->ext_par, *(cpar->mm), cal->glass_par, xyz,\
&(cal_t.ext_par), xyz_t, (double *)cross_p, (double *)cross_c);


// printf("xyz_t[0]=%f, xyz_t[1]=%f, xyz_t[2]=%f\n", xyz_t[0], xyz_t[1], xyz_t[2]);

if( xyz_t[2] < Zmin_t ) Zmin_t = xyz_t[2];
if( xyz_t[2] > Zmax_t ) Zmax_t = xyz_t[2];

R = norm((xyz_t[0] - cal_t.ext_par.x0), (xyz_t[1] - cal_t.ext_par.y0), 0);
// printf("R=%f\n", R);

if (R > Rmax)
Rmax = R;

// printf("Rmax=%f, Zmin_t=%f, Zmax_t=%f\n", Rmax, Zmin_t, Zmax_t);
}
}

/* round values (-> enlarge) */
Rmax += (rw - fmod (Rmax, rw));
// printf("inside init_mmlut: Rmax=%f, Zmin_t=%f, Zmax_t=%f\n", Rmax, Zmin_t, Zmax_t);

/* get # of rasterlines in r,z */
nr = (int)(Rmax/rw + 1);
nz = (int)((Zmax_t-Zmin_t)/rw + 1);


// printf("nr=%d, nz=%d\n", nr, nz);

/* create two dimensional mmlut structure */
vec_set(cal->mmlut.origin, cal_t.ext_par.x0, cal_t.ext_par.y0, Zmin_t);

Expand Down
130 changes: 66 additions & 64 deletions liboptv/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,50 +13,50 @@ add_custom_command(TARGET testing_data
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tests/testing_fodder/test_cavity/res/
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tests/testing_fodder/test_cavity/img/)

add_executable(check_fb EXCLUDE_FROM_ALL check_fb.c)
add_dependencies(check_fb optv testing_data)
# add_executable(check_fb EXCLUDE_FROM_ALL check_fb.c)
# add_dependencies(check_fb optv testing_data)

add_executable(check_calibration EXCLUDE_FROM_ALL check_calibration.c)
add_dependencies(check_calibration optv testing_data)
# add_executable(check_calibration EXCLUDE_FROM_ALL check_calibration.c)
# add_dependencies(check_calibration optv testing_data)

add_executable(check_parameters EXCLUDE_FROM_ALL check_parameters.c)
add_dependencies(check_parameters optv testing_data)
# add_executable(check_parameters EXCLUDE_FROM_ALL check_parameters.c)
# add_dependencies(check_parameters optv testing_data)

add_executable(check_lsqadj EXCLUDE_FROM_ALL check_lsqadj.c)
add_dependencies(check_lsqadj optv testing_data)
# add_executable(check_lsqadj EXCLUDE_FROM_ALL check_lsqadj.c)
# add_dependencies(check_lsqadj optv testing_data)

add_executable(check_ray_tracing EXCLUDE_FROM_ALL check_ray_tracing.c)
add_dependencies(check_ray_tracing optv testing_data)
# add_executable(check_ray_tracing EXCLUDE_FROM_ALL check_ray_tracing.c)
# add_dependencies(check_ray_tracing optv testing_data)

add_executable(check_trafo EXCLUDE_FROM_ALL check_trafo.c)
add_dependencies(check_trafo optv testing_data)
# add_executable(check_trafo EXCLUDE_FROM_ALL check_trafo.c)
# add_dependencies(check_trafo optv testing_data)

add_executable(check_vec_utils EXCLUDE_FROM_ALL check_vec_utils.c)
add_dependencies(check_vec_utils optv testing_data)
# add_executable(check_vec_utils EXCLUDE_FROM_ALL check_vec_utils.c)
# add_dependencies(check_vec_utils optv testing_data)

add_executable(check_image_proc EXCLUDE_FROM_ALL check_image_proc.c)
add_dependencies(check_image_proc optv testing_data)
# add_executable(check_image_proc EXCLUDE_FROM_ALL check_image_proc.c)
# add_dependencies(check_image_proc optv testing_data)

add_executable(check_multimed EXCLUDE_FROM_ALL check_multimed.c)
add_dependencies(check_multimed optv testing_data)
# add_executable(check_multimed EXCLUDE_FROM_ALL check_multimed.c)
# add_dependencies(check_multimed optv testing_data)

add_executable(check_imgcoord EXCLUDE_FROM_ALL check_imgcoord.c)
add_dependencies(check_imgcoord optv testing_data)
# add_executable(check_imgcoord EXCLUDE_FROM_ALL check_imgcoord.c)
# add_dependencies(check_imgcoord optv testing_data)

add_executable(check_sortgrid EXCLUDE_FROM_ALL check_sortgrid.c)
add_dependencies(check_sortgrid optv testing_data)
# add_executable(check_sortgrid EXCLUDE_FROM_ALL check_sortgrid.c)
# add_dependencies(check_sortgrid optv testing_data)

add_executable(check_orientation EXCLUDE_FROM_ALL check_orientation.c)
add_dependencies(check_orientation optv testing_data)
# add_executable(check_orientation EXCLUDE_FROM_ALL check_orientation.c)
# add_dependencies(check_orientation optv testing_data)

add_executable(check_epi EXCLUDE_FROM_ALL check_epi.c)
add_dependencies(check_epi optv testing_data)
# add_executable(check_epi EXCLUDE_FROM_ALL check_epi.c)
# add_dependencies(check_epi optv testing_data)

add_executable(check_segmentation EXCLUDE_FROM_ALL check_segmentation.c)
add_dependencies(check_segmentation optv testing_data)
# add_executable(check_segmentation EXCLUDE_FROM_ALL check_segmentation.c)
# add_dependencies(check_segmentation optv testing_data)

add_executable(check_track EXCLUDE_FROM_ALL check_track.c)
add_dependencies(check_track optv testing_data)
# add_executable(check_track EXCLUDE_FROM_ALL check_track.c)
# add_dependencies(check_track optv testing_data)

add_executable(check_correspondences EXCLUDE_FROM_ALL check_correspondences.c)
add_dependencies(check_correspondences optv testing_data)
Expand All @@ -73,56 +73,58 @@ if (APPLE)
set(LIBS ${LIBS} -L/usr/local/lib)
endif (APPLE)

target_link_libraries(check_fb ${LIBS})
add_test(check_fb ${CMAKE_CURRENT_BINARY_DIR}/check_fb)
# target_link_libraries(check_fb ${LIBS})
# add_test(check_fb ${CMAKE_CURRENT_BINARY_DIR}/check_fb)

target_link_libraries(check_vec_utils ${LIBS})
add_test(check_vec_utils ${CMAKE_CURRENT_BINARY_DIR}/check_vec_utils)
# target_link_libraries(check_vec_utils ${LIBS})
# add_test(check_vec_utils ${CMAKE_CURRENT_BINARY_DIR}/check_vec_utils)

target_link_libraries(check_calibration ${LIBS})
add_test(check_calibration ${CMAKE_CURRENT_BINARY_DIR}/check_calibration)
# target_link_libraries(check_calibration ${LIBS})
# add_test(check_calibration ${CMAKE_CURRENT_BINARY_DIR}/check_calibration)

target_link_libraries(check_parameters ${LIBS})
add_test(check_parameters ${CMAKE_CURRENT_BINARY_DIR}/check_parameters)
# target_link_libraries(check_parameters ${LIBS})
# add_test(check_parameters ${CMAKE_CURRENT_BINARY_DIR}/check_parameters)

target_link_libraries(check_lsqadj ${LIBS})
add_test(check_lsqadj ${CMAKE_CURRENT_BINARY_DIR}/check_lsqadj)
# target_link_libraries(check_lsqadj ${LIBS})
# add_test(check_lsqadj ${CMAKE_CURRENT_BINARY_DIR}/check_lsqadj)

target_link_libraries(check_ray_tracing ${LIBS})
add_test(check_ray_tracing ${CMAKE_CURRENT_BINARY_DIR}/check_ray_tracing)
# target_link_libraries(check_ray_tracing ${LIBS})
# add_test(check_ray_tracing ${CMAKE_CURRENT_BINARY_DIR}/check_ray_tracing)

target_link_libraries(check_trafo ${LIBS})
add_test(check_trafo ${CMAKE_CURRENT_BINARY_DIR}/check_trafo)
# target_link_libraries(check_trafo ${LIBS})
# add_test(check_trafo ${CMAKE_CURRENT_BINARY_DIR}/check_trafo)

target_link_libraries(check_image_proc ${LIBS})
add_test(check_image_proc ${CMAKE_CURRENT_BINARY_DIR}/check_image_proc)
# target_link_libraries(check_image_proc ${LIBS})
# add_test(check_image_proc ${CMAKE_CURRENT_BINARY_DIR}/check_image_proc)

target_link_libraries(check_multimed ${LIBS})
add_test(check_multimed ${CMAKE_CURRENT_BINARY_DIR}/check_multimed)
# target_link_libraries(check_multimed ${LIBS})
# add_test(check_multimed ${CMAKE_CURRENT_BINARY_DIR}/check_multimed)

target_link_libraries(check_imgcoord ${LIBS})
add_test(check_imgcoord ${CMAKE_CURRENT_BINARY_DIR}/check_imgcoord)
# target_link_libraries(check_imgcoord ${LIBS})
# add_test(check_imgcoord ${CMAKE_CURRENT_BINARY_DIR}/check_imgcoord)

target_link_libraries(check_sortgrid ${LIBS})
add_test(check_sortgrid ${CMAKE_CURRENT_BINARY_DIR}/check_sortgrid)
# target_link_libraries(check_sortgrid ${LIBS})
# add_test(check_sortgrid ${CMAKE_CURRENT_BINARY_DIR}/check_sortgrid)

target_link_libraries(check_orientation ${LIBS})
add_test(check_orientation ${CMAKE_CURRENT_BINARY_DIR}/check_orientation)
# target_link_libraries(check_orientation ${LIBS})
# add_test(check_orientation ${CMAKE_CURRENT_BINARY_DIR}/check_orientation)

target_link_libraries(check_epi ${LIBS})
add_test(check_epi ${CMAKE_CURRENT_BINARY_DIR}/check_epi)
# target_link_libraries(check_epi ${LIBS})
# add_test(check_epi ${CMAKE_CURRENT_BINARY_DIR}/check_epi)

target_link_libraries(check_segmentation ${LIBS})
add_test(check_segmentation ${CMAKE_CURRENT_BINARY_DIR}/check_segmentation)
# target_link_libraries(check_segmentation ${LIBS})
# add_test(check_segmentation ${CMAKE_CURRENT_BINARY_DIR}/check_segmentation)

target_link_libraries(check_correspondences ${LIBS})
add_test(check_correspondences ${CMAKE_CURRENT_BINARY_DIR}/check_correspondences)

target_link_libraries(check_track ${LIBS})
add_test(check_track ${CMAKE_CURRENT_BINARY_DIR}/check_track)
# target_link_libraries(check_track ${LIBS})
# add_test(check_track ${CMAKE_CURRENT_BINARY_DIR}/check_track)

add_custom_target(verify COMMAND ${CMAKE_CTEST_COMMAND})
add_dependencies(verify check_fb check_calibration check_parameters check_lsqadj
check_ray_tracing check_trafo check_vec_utils check_image_proc check_multimed
check_imgcoord check_orientation check_epi check_sortgrid check_segmentation
check_correspondences check_track)
# add_dependencies(verify check_fb check_calibration check_parameters check_lsqadj
# check_ray_tracing check_trafo check_vec_utils check_image_proc check_multimed
# check_imgcoord check_orientation check_epi check_sortgrid check_segmentation
# check_correspondences check_track)
# add_dependencies(verify check_multimed)
add_dependencies(verify check_correspondences)
11 changes: 8 additions & 3 deletions liboptv/tests/check_correspondences.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,15 +160,15 @@ frame *generate_test_set(Calibration *calib[4], control_par *cpar,
targ->pnr = cpt_ix;

vec_set(tmp, cpt_vert * 10, cpt_horz * 10, 0);
if (cpt_ix == 0){
if ((cpt_ix % 4) == 0){
printf("cam %d, cpt %d: %f %f %f\n", cam, cpt_ix, tmp[0], tmp[1], tmp[2]);
}
img_coord(tmp, calib[cam], cpar->mm, &(targ->x), &(targ->y));
if (cpt_ix == 0){
if ((cpt_ix % 4) == 0){
printf("cam %d, cpt %d: %f %f\n", cam, cpt_ix, targ->x, targ->y);
}
metric_to_pixel(&(targ->x), &(targ->y), targ->x, targ->y, cpar);
if (cpt_ix == 0){
if ((cpt_ix % 4) == 0){
printf("cam %d, cpt %d: %f %f\n", cam, cpt_ix, targ->x, targ->y);
}
/* These values work in check_epi, so used here too */
Expand Down Expand Up @@ -221,6 +221,10 @@ coord_2d **correct_frame(frame *frm, Calibration *calib[], control_par *cpar,

/* This is expected by find_candidate() */
quicksort_coord2d_x(corrected[cam], frm->num_targets[cam]);

for(part = 0; part < frm->num_targets[cam]; part++) {
printf("cam %d, cpt %d: %f %f\n", cam, part, corrected[cam][part].x, corrected[cam][part].y);
}
}
return corrected;
}
Expand Down Expand Up @@ -422,6 +426,7 @@ START_TEST(test_two_camera_matching)
corrected = correct_frame(frm, calib, cpar, 0.0001);
safely_allocate_adjacency_lists(list, cpar->num_cams, frm->num_targets);
match_pairs(list, corrected, frm, vpar, cpar, calib);


con = (n_tupel *) malloc(4*16*sizeof(n_tupel));
tusage = safely_allocate_target_usage_marks(cpar->num_cams);
Expand Down
Loading

0 comments on commit 1db47f1

Please sign in to comment.