Core

Main functionality

source

clahe_img

def clahe_img(
    rgb
):

Call self as a function.


source

CorrespondenceAnnotator

def CorrespondenceAnnotator(
    img_pair_list, save_on_next, corrs_save_name:str='corrs.txt', max_pts:int=100, error_to_show_index:float=5.0
):

Initialize self. See help(type(self)) for accurate signature.

Let’s test our annotator on a sample project. It needs a list of triplets: path_to_img1, path_to_img2, path_to_corrs_to_save.

import os
rootdir = 'sample_project'
pairs = os.listdir(rootdir)
img_pairs_list = []
for p in pairs:
    if p == '.DS_Store':
        continue
    cur_dir = os.path.join(rootdir, p)
    img_pairs_list.append((os.path.join(cur_dir, '01.png'),
                           os.path.join(cur_dir, '02.png'),
                           os.path.join(cur_dir, 'corrs.txt')))

print (img_pairs_list)
[('sample_project/ministry/01.png', 'sample_project/ministry/02.png', 'sample_project/ministry/corrs.txt'), ('sample_project/petrzin/01.png', 'sample_project/petrzin/02.png', 'sample_project/petrzin/corrs.txt')]

Now we are ready to initialize CorrespondenceAnnotator. Don’t forget to declare %matplotlib widget (or %matplotlib notebook on classic notebook 6 with matplotlib < 3.5).

You also should explicitly specify, if you want to save (and possibly over-write previous better annotation) current correspondences automatically when clicking on prev and next buttons for going to the next pair.

CA = CorrespondenceAnnotator(img_pairs_list, save_on_next=False)
/opt/homebrew/Caskroom/miniforge/base/envs/python39/lib/python3.9/site-packages/ipykernel/ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.
  and should_run_async(code)

Now we can run the annotation.

Left-click on the image to add a point

right-click – to remove the point from both images.

Matplotlib shortcuts:

  • o for zoom
  • p for pan (move)
from IPython.display import display, HTML
display(HTML("<style>.container { width:95% !important; }</style>"))
CA.start(figsize=(12,7))
/opt/homebrew/Caskroom/miniforge/base/envs/python39/lib/python3.9/site-packages/ipykernel/ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above.
  and should_run_async(code)