Révision 10 bin/image2geometry/bib_sepals.py
bib_sepals.py (revision 10) | ||
---|---|---|
456 | 456 |
plt.gca().imshow(np.transpose(matrix), interpolation='none') |
457 | 457 |
fig.savefig(filename) |
458 | 458 |
return |
459 |
|
|
460 |
|
|
461 |
|
|
462 |
def register_objects(img_flo, img_ref, preregisterd=True, ph=6, pl=2, es=5, fs=3, save_files=True, iterations=2): |
|
463 |
# -- "Specify paths to image files" -- |
|
464 |
# ------------------------------------------------ |
|
465 |
sequence_name = "register_" |
|
466 |
file_times = [1, 2] |
|
467 |
filenames = [sequence_name + str(t).zfill(2) for t in file_times] |
|
468 |
list_images = [img_flo, img_ref] |
|
469 |
|
|
470 |
images = {} |
|
471 |
for i in [0,1]: |
|
472 |
images[filenames[i]] = list_images[i] |
|
473 |
|
|
474 |
rigid_images = {} |
|
475 |
rigid_transformations = {} |
|
476 |
affine_images = {} |
|
477 |
affine_transformations = {} |
|
478 |
registered_images = {} |
|
479 |
non_linear_transformations = {} |
|
480 |
[reference_filename, floating_filename, reference_time, floating_time] = [ filenames[0], filenames[1], file_times[0], file_times[1]] |
|
481 |
#for reference_filename, floating_filename, reference_time, floating_time, in zip(filenames[1:],filenames[:-1],file_times[1:],file_times[:-1]): |
|
482 |
print("================================") |
|
483 |
print("Registering ", floating_time, " on ", reference_time) |
|
484 |
print("================================") |
|
485 |
|
|
486 |
################################################### |
|
487 |
# Output structure |
|
488 |
################################################### |
|
489 |
|
|
490 |
namestring = "_ph"+str(ph)+"_pl"+str(pl)+"_es"+str(es)+"_fs"+str(fs) |
|
491 |
|
|
492 |
output_dirname = dirname + '/' + sequence_name + "_" + str(floating_time).zfill(2) + "_on_" + str(reference_time).zfill(2) + "" + namestring |
|
493 |
if not os.path.exists(output_dirname): |
|
494 |
os.makedirs(output_dirname) |
|
495 |
|
|
496 |
reference_img = images[reference_filename] |
|
497 |
floating_img = images[floating_filename] |
|
498 |
|
|
499 |
#################################################################### |
|
500 |
|
|
501 |
# Registration of the floating images on ref |
|
502 |
# ----------------------------------------------------- |
|
503 |
|
|
504 |
if (not preregistered) : |
|
505 |
# A. Find optimised rigid transformations |
|
506 |
rigid_img, rigid_trsf = find_rigid_transfo2(reference_img, floating_img) |
|
507 |
rigid_images[floating_filename] = rigid_img |
|
508 |
rigid_transformations[floating_filename] = rigid_trsf |
|
509 |
|
|
510 |
if save_files: |
|
511 |
# rigid-registered images |
|
512 |
rigid_filename = output_dirname + '/' + floating_filename + "_rigid_on_" + str(reference_time).zfill(2) + ".inr.gz" |
|
513 |
imsave(rigid_filename, rigid_img) |
|
514 |
|
|
515 |
# optimised (with block-matching) rigid transformations |
|
516 |
rigid_trsf_filename = output_dirname + '/tr_' + floating_filename + '_rigid.txt' |
|
517 |
tfsave(rigid_trsf_filename, rigid_trsf) |
|
518 |
|
|
519 |
# B. Find optimised affine transformations (initialised by the rigid tfs computed above) |
|
520 |
affine_img, affine_trsf = find_affine_transfo(reference_img, floating_img, init_trsf=rigid_trsf) |
|
521 |
affine_images[floating_filename] = affine_img |
|
522 |
affine_transformations[floating_filename] = affine_trsf |
|
523 |
|
|
524 |
if save_files: |
|
525 |
# affine-registered images |
|
526 |
affine_filename = output_dirname + '/' + floating_filename + "_affine_on_" + str(reference_time).zfill(2) + ".inr.gz" |
|
527 |
imsave(affine_filename, affine_img) |
|
528 |
|
|
529 |
# optimised (with block-matching) affine transformations |
|
530 |
affine_trsf_filename = output_dirname + '/tr_' + floating_filename + '_affine.txt' |
|
531 |
tfsave(affine_filename, affine_trsf) |
|
532 |
floating_img0=affine_img |
|
533 |
else : |
|
534 |
floating_img0=floating_img |
|
535 |
# C. Find nonlinear transformations which register the affine-transformed images |
|
536 |
#registered_img, nl_trsf = find_nl_transfo(reference_img, affine_img, ph=ph, pl=pl, es=es, fs=fs) |
|
537 |
for it in range(iterations): |
|
538 |
registered_img, nl_trsf = find_nl_transfo(reference_img, floating_img0, ph=ph, pl=pl, es=es, fs=fs) |
|
539 |
registered_images[floating_filename] = registered_img |
|
540 |
non_linear_transformations[floating_filename] = nl_trsf |
|
541 |
|
|
542 |
# paths to nonlinearly registered images |
|
543 |
registered_filename = output_dirname + '/' + floating_filename + "_registered_on_" + str(reference_time).zfill(2) + "_it"+str(it)+".inr.gz" |
|
544 |
imsave(registered_filename, registered_img) |
|
545 |
floating_img0=registered_img |
|
546 |
|
|
547 |
if save_files: |
|
548 |
# non-linear transformations |
|
549 |
nl_trsf_filename = output_dirname + '/' + floating_filename + "_it"+str(it)+"_vectorfield.inr.gz" |
|
550 |
save_trsf(nl_trsf, nl_trsf_filename, compress=True) |
|
551 |
return registered_img |
|
552 |
|
Formats disponibles : Unified diff