Giter VIP home page Giter VIP logo

borda / birl Goto Github PK

View Code? Open in Web Editor NEW
89.0 12.0 26.0 8.7 MB

BIRL: Benchmark on Image Registration methods with Landmark validations

Home Page: http://borda.github.io/BIRL

License: BSD 3-Clause "New" or "Revised" License

Python 92.82% Dockerfile 3.10% R 1.61% Shell 1.21% ImageJ Macro 1.13% Makefile 0.13%
image-registration benchmark evaluation-framework medical-imaging pathology-image landmarks image-pair dataset registration-methods cima

birl's Introduction

Hi there ๐Ÿ‘‹ Visit counter

I have been working in Machine learning and Data science for several years. I have done my Ph.D. in Medical Imaging. I have gained practical experience working for a few IT companies as a consultant, data scientist, or research engineer. I focus on exploring interesting world problems and solving them with state-of-the-art techniques.

Academic track: I have published several journal articles and papers on international conferences such as ISBI, ICIP, ACCV, and MICCAI workshops. I am also a reviewer for these conferences and other IEEE journals. I was the main organizer of the ANHIR challenge.

ORCID ResearchGate

Developer track: I have created several open-source Python packages, and I am a leading contributor to PyTorch-Lightning and other Lightning projects. I also actively participate in other well-known projects like auto-sklearn, yolov5, dipy, etc., with writing code, reporting issues, building CI/CD, and reviewing PRs.

Manager track: I led a small team while developing a video analysis tool. I have been leading & managing the Lightning team responsible for our open-source projects.

simple GH stats

competition dataset notebook discussion

๐ŸŒ Get in Touch:

JirkaBorovec in/jirka-borovec jirkaborovec @jborovec jirka

Metrics

birl's People

Contributors

arrmunoz avatar borda avatar deepsource-autofix[bot] avatar pre-commit-ci[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

birl's Issues

evaluate experiments

evaluate already finished experiment and recompute all required metrics from the input information

  • refactor benchmark class
  • ensamble evaluation script

method: ASSAR

transfer registration methods once used in previous registration benchmarks

  • ASSAR affine
  • ASSAR bSpline

method: jlSegReg

transfer registration methods once used in previous registration benchmarks

  • jlSegReg affine
  • jlSegReg elastic

method: RNiftyReg

transfer registration methods once used in previous registration benchmarks

  • RNiftyReg linear
  • RNiftyReg nonlinear

method: TrakEM

transfer registration methods once used in previous registration benchmarks

  • TrakEM affine
  • TrakEM bSpline

match landmarks in moving-regist. image

In case we have registration method that does not provide transformed landmarks we want to detect then by our-self. We take the list of landmarks in the moving image and try to detest those landmarks in the registered image. Assumption: the deformation between these two images is not large.

  • find reasonable descriptors
  • match landmarks
  • robustness: run in multiscale

Problem in executing creating synthesis data create_real_synth_dataset.py

Traceback (most recent call last):
  File "bm_dataset/create_real_synth_dataset.py", line 329, in <module>
    main(arg_params)
  File "bm_dataset/create_real_synth_dataset.py", line 313, in main
    for _ in mproc_pool.imap_unordered(wrapper_deform_export, range(params['nb_samples'])):
  File "/usr/lib/python3.7/multiprocessing/pool.py", line 748, in next
    raise value
  File "/usr/lib/python3.7/multiprocessing/pool.py", line 121, in worker
    result = (True, func(*args, **kwds))
  File "bm_dataset/create_real_synth_dataset.py", line 263, in perform_deform_export
    image_out, points_out = deform_image_landmarks(image_out, points, max_deform)
  File "bm_dataset/create_real_synth_dataset.py", line 163, in deform_image_landmarks
    zip(x.ravel(), y.ravel()), image.reshape(-1, 3), (x + x_deform, y + y_deform), method='linear', fill_value=1.
  File "/usr/local/lib/python3.7/dist-packages/scipy/interpolate/ndgriddata.py", line 221, in griddata
    rescale=rescale)
  File "interpnd.pyx", line 245, in scipy.interpolate.interpnd.LinearNDInterpolator.__init__
  File "interpnd.pyx", line 80, in scipy.interpolate.interpnd.NDInterpolatorBase.__init__
  File "interpnd.pyx", line 190, in scipy.interpolate.interpnd._check_init_shape
IndexError: tuple index out of range

Issue

While creating synthesis data by executing bm_dataset/create_real_synth_dataset.py I am facing the above error .I think it might be because of the scipy version issue.
I am using scipy==1.4.1 and also tried with scipy 1.1.10
I am using python version 3.7.13 in google colab
Please guide me and help me to solve issue

affine landmarks analyses

Add some extra landmarks validation, more then just distance

  • estimate affine transformation for init pair
  • compare the affine registration of GT
  • compare difference after subtraction of affine transform
  • decompose the affine transform to shift, rotation, scale

bUnwarpJ: imprecise warping landmarks

Asked (reported) to ImageJ: I have a case - register two images together, then warp the source image to target image and in the end generate the raw transformation to be able show some important points in the warped image according their positions in source image. (In this moment I don't race much about quality of the registration.) This perfectly works when both image are the same size but in following case the source image is smaller then the target one.

See an example if correctly transformed landmarks
registration_landmarks
bad points warping in the warped image
registration_landmarks
and some more visualization where it should be
registration_visual

  • macro I used for registration, warping image and converting raw transformation

method: DROP

transfer registration methods once used in previous registration benchmarks

DROP2 registration and RGB output

Hello @Borda
I have followed your advice in regards to running DROP2 through BIRL and I have a couple of questions. The code generates these images and I'm not sure which one is aligned to which one? And I believe the output.jpeg file is the output from DROP2 before applying the transformations onto the RGB?
registration_visual_landmarks
output
image_refence-warped
image_ref_landmarks_warped

I tried finding the code for the transformation on the RGB image and found the following, which appears to apply a shift on the landmarks. Can you point me out to the specific code performing the transformation on the original RGB image given output_field_x.nii.gz and output_field_y.nii.gz?
shift = self.extract_landmarks_shift_from_nifty(path_deform_x, path_deform_y, lnds_)

Finally, if the application of the transformation on the RGB image ends up being difficult to resolve on my end given the info you provide above (I hope not, but I'm new to image analysis so it is possible), can I just use the BIRL functions to perform the registration and transformations on the image, without providing any landmark information?

Thanks

method: ANTs

transfer registration methods once used in previous registration benchmarks

  • ANTs-affine
  • ANTs-elastic

experimental Docker

๐Ÿš€ Feature

Create a Docker containing all mentioned SOTA installed and upload to docker hub

Motivation

just out-of-the-box for any experimenting

Pitch

we could use this image even for testing all listed methods

annotation new images (landmarks)

write a short tutorial how to annotate the landmarks using ImageJ and add set of tools for validation of this landmarks

  • visualize the landmarks change between each two images
  • merge annotation from myltiple users (the same file names in different folders)
  • scaling images and landmarks into specific scale
  • compute the internal landmarks distances for each image and assume that this graph should not change much among images

blank Experiment

create experiment with no registration method which would serve as test case
this experiment would serve as baseline for all experiments, just override perform method

  • parsing inputs
  • loading cover csv file
  • run sequential experiments
  • run experiments in parallel
  • evaluate experiment
  • summarize results
  • visualize: reference - registered image
  • visualize: moving - registered image

method: RVSS

transfer registration methods once used in previous registration benchmarks

  • RVSS affine
  • RVSS elastic

converting large SVS images

Description

there is a certain issue with converting SVS image using convert_tiff2png
the images mooks like shifted and incomplete...

visualize methods comparison

create a ipython notebook with loading finished benchmarks and do some simple comparison

  • simple bar chart or error bar for each comaprison subject (like time, inaccuracy, ...)
  • create n-shape diagram with edges as comparison subject (like time, inaccuracy, ...)

method: elastixOpenCV

transfer registration methods once used in previous registration benchmarks

  • elastix-OpenCV bspline
  • elastix-OpenCV affine
  • openCV-SURF

method: bUnwarpJ

transfer registration methods once used in previous registration benchmarks

weighted landmarks analyses

For evaluation use a weight which would assign a high weight to "alone" landmarks compare to a group of landmarks would have a smaller weight. This will make the evaluation more uniform for any landmark placement. For landmarks ompute the minimal distance to the nearest landmark and normalize this distance by mean of this distances.

general Experiment

Create a parent class for all experiment that in its base evaluates statistic on unregistered image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.