Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft PR that targets the work done towards TrackMate v8. #263

Draft
wants to merge 264 commits into
base: master
Choose a base branch
from
Draft
This pull request is big! We’re only showing the most recent 250 commits.

Commits on Jul 7, 2024

  1. The Labkit editor can be launched on all time-points at once.

    Shift-click on the button.
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    e263f83 View commit details
    Browse the repository at this point in the history
  2. Add tooltip for the editor button.

    And remove debug code.
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    3757a83 View commit details
    Browse the repository at this point in the history
  3. In Labkit editor, labels receive name and color from spots.

    I am not so sure it is a good idea for the color...
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    f9c0b73 View commit details
    Browse the repository at this point in the history
  4. Better editor frame title.

    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    ee3b86a View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    8aaf763 View commit details
    Browse the repository at this point in the history
  6. Always start the editor in FUSED mode,

    and use the white LUT when the imp is not displayed as a Composite.
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    544b3df View commit details
    Browse the repository at this point in the history
  7. Don't crash when editing on images with 1 channel.

    Noticed by @MiniMiette
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    48594c2 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    a788cf1 View commit details
    Browse the repository at this point in the history
  9. Store labels on ints, not on shorts.

    Otherwise we get crashes when we have more than 4k labels. Which is not
    what Labkit is optimized for but we will see that in a second time.
    In case we change our minds on the backing integer type, right now
    the labkit launcher and importer classes are generic.
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    b503a63 View commit details
    Browse the repository at this point in the history
  10. Fix reimporting labels with large IDs in 2D.

    The re-importing of labels from Tabkit to TrackMate could fail for
    2D images and labels with a large index. For instance, it failed
    consistently when trying to re-import labels with an index larger
    than 65643.
    
    This problem roots in the getSpots() method of LabkitImporter. It
    relies on a trick: We get the new label image, and create spots from
    this label image. But we want the new spots to keep track of the index
    in the label image they were generated from.
    
    For this, in 2D, we use the MaskUtils.fromLabelingWithRoi()
    method. These methods accept an image as last argument used to
    read a value in the label image within the spot, that is normally
    used for the quality value of the new spot.
    
    But the SpotRoiUtils.from2DLabelingWithRoi() method converted the
    extra image to ImagePlus (because I was lazy). So the label image
    was effectively cast on ushort for an IntegerType image, hence
    the problem with the max label being 65453.
    
    The solution is to rewrite the from2DLabelingWithRoi() so that
    it does not rely on converting to ImagePlus, but on good old
    iteration with imglib2.
    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    4d3a326 View commit details
    Browse the repository at this point in the history
  11. Fix javadoc errors.

    tinevez committed Jul 7, 2024
    Configuration menu
    Copy the full SHA
    39e16fc View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    2d9edce View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    e4eb1bc View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    8c9961b View commit details
    Browse the repository at this point in the history

Commits on Jul 9, 2024

  1. setFont() utility.

    tinevez committed Jul 9, 2024
    Configuration menu
    Copy the full SHA
    e65687c View commit details
    Browse the repository at this point in the history
  2. The detection preview is cancelable.

    Provided that the detector that is called is cancelable.
    tinevez committed Jul 9, 2024
    Configuration menu
    Copy the full SHA
    1d95bea View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    0bd86ec View commit details
    Browse the repository at this point in the history
  4. Detection preview panel tweak.

    Make sure the detection preview panel is slanted at the bottom of its display.
    tinevez committed Jul 9, 2024
    Configuration menu
    Copy the full SHA
    d6fdfb5 View commit details
    Browse the repository at this point in the history

Commits on Jul 10, 2024

  1. Configuration menu
    Copy the full SHA
    3b93eed View commit details
    Browse the repository at this point in the history
  2. Fixed a difficult bug with the LabKit editor reimporter.

    The bug was causing weird issues with unedited spots being deleted,
    unedited spots being duplicated etc.
    
    It took me really long to understand the cause. It was hidden in the
    step where we go from a label image to a collection of spots. Because
    spots are polygons, with simplified contours, there might be some pixels
    on the edges of the object that are not strictly inside the label.
    
    In this importer, we read the label value in one go, by storing it
    in the QUALITY value of the spot, in the MaskUtils class. But since
    the spots have simplified contours, and since the QUALITY value is
    the maximal value iterated over, our approach might fail on border cases:
    - when the contout is approximated and include pixels from another
    object
    - and when this object has a label value higher than the lael of
    the spot.
    
    This commit include a temporary fix: we reiterate over the spot
    but takes the median value iterated over, to make sure we read
    the correct value for the label.
    
    Other attempts will follow, for reference. But a true fix involves
    making a method that returns a map from label value to spot.
    tinevez committed Jul 10, 2024
    Configuration menu
    Copy the full SHA
    de5de59 View commit details
    Browse the repository at this point in the history
  3. Another fix for the LabKit reimporter bug.

    This time we fix it by creating spots that do not have a simplified
    contours. In that case we strictly iterate over the pixels inside
    label and get the correct value.
    However the created spots have a pixelated aspect (contours are
    not simplified), which might not be what the user wants. We should
    let them choose.
    
    Still not the perfect solution, as mentionned in the previous
    commmit.
    tinevez committed Jul 10, 2024
    Configuration menu
    Copy the full SHA
    2c56943 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    fc19713 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    f886b65 View commit details
    Browse the repository at this point in the history

Commits on Jul 11, 2024

  1. Simplify the LabKit importer.

    Use the new label immg to spot method to get spots AND the
    label they come from.
    tinevez committed Jul 11, 2024
    Configuration menu
    Copy the full SHA
    d1ca968 View commit details
    Browse the repository at this point in the history
  2. In LabKit editor, offer to simplify the contour of modified spots.

    Also better message when closing the editor.
    tinevez committed Jul 11, 2024
    Configuration menu
    Copy the full SHA
    aa9dc52 View commit details
    Browse the repository at this point in the history

Commits on Jul 12, 2024

  1. Let the user edit a ROI in the image with the LabKit editor.

    If a ROI exists in the input image when launching the LabKit editor,
    only the image and the spots present in the ROI are sent to the
    editor. Spots touching the borders are not imported.
    tinevez committed Jul 12, 2024
    Configuration menu
    Copy the full SHA
    73c85db View commit details
    Browse the repository at this point in the history

Commits on Jul 17, 2024

  1. Fix panning not working when the TrackMate tool is selected.

    Normally pressing space and dragging should move the view, as
    for normal ImageJ tools. The removed line was preventing it.
    tinevez committed Jul 17, 2024
    Configuration menu
    Copy the full SHA
    186520e View commit details
    Browse the repository at this point in the history

Commits on Jul 18, 2024

  1. Configuration menu
    Copy the full SHA
    28666c3 View commit details
    Browse the repository at this point in the history
  2. Fix bug in LabKit editor: avoid spot ID and label conflicts.

    When editing a sub-portion of the image, the spots outside the ROI
    are not imported in the editor. It is possible that the user creates
    a new label in LabKit that will have the same id that an existing
    spot outside the ROI.
    Before this fix, the spots in that case were replaced by the new ones,
    creating a mess.
    The fix consists in reminding what spots are imported in the LabKit
    editor, then compariing to this list the new ids when reimporting
    from the editor.
    tinevez committed Jul 18, 2024
    Configuration menu
    Copy the full SHA
    faa87b9 View commit details
    Browse the repository at this point in the history

Commits on Jul 19, 2024

  1. Custom LabKit frame and segmentation component.

    Simplified, removing the menu, the segmentation features and the
    segmenter features.
    Somply done by copy-pasting Matthias classes and removing the lines
    with the features to prune.
    tinevez committed Jul 19, 2024
    Configuration menu
    Copy the full SHA
    8ccd3ee View commit details
    Browse the repository at this point in the history
  2. Fix another bug with the LabKit importer.

    This time it was due to confusion between a map from spot ID to spots,
    and a map from label value to spot.
    I fixed it by rewriting everything in terms of label values in the
    labeling. So we do not need to keep track of the spot ID anymore. The
    labels could be anything. They are still equal to spot ID + 1, because
    it is convenient to debug.
    tinevez committed Jul 19, 2024
    Configuration menu
    Copy the full SHA
    2f9583e View commit details
    Browse the repository at this point in the history

Commits on Jul 22, 2024

  1. Configuration menu
    Copy the full SHA
    72d60f3 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    64bc4b4 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    d88b61e View commit details
    Browse the repository at this point in the history
  4. WIP: Iterative intersection with a plane.

    Still not good enough, the vertices are not iterated in a monotonic
    manner.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    d768bd1 View commit details
    Browse the repository at this point in the history
  5. Unother attempt, using an edge and a face map.

    Better but still not good enough: some points on the contours
    are repeated.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c82ef9e View commit details
    Browse the repository at this point in the history
  6. We actually don't need the vertex list. The edge list is sufficient.

    Also do not add duplicate points on the contour (happens often
    when there is no smoothing).
    Still not good: there are some cases where the loop breaks
    too early.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    d290e93 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    b86e7dc View commit details
    Browse the repository at this point in the history
  8. Rework the demo of mesh intersection.

    Much cleaner. Still does not work for not simple meshes.
    Probably because of border cases where we have vertices that lie
    exactly on the plane we are interesecting with.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    0141aa7 View commit details
    Browse the repository at this point in the history
  9. A simple data structure to store a 3D mesh in a Spot object.

    This class is the 3D counterpart of SpotRoi. It stores the object
    shape as a mesh, and has (for now) a few methods to facilitate
    painting it and creating it.
    The mesh are stored with coordinates relative to the spot center
    (mesh center is at 0,0,0). The same for the bounding box. The
    mesh coordinates are expected to be in physical coordinates, not
    pixel coordinates.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    8eccba4 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    72ed47f View commit details
    Browse the repository at this point in the history
  11. Utility method for SpotRoi: generate XY coordinates

    and write them in holders provided by the user.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    6b99872 View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    1f215f2 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    2d46afb View commit details
    Browse the repository at this point in the history
  14. Paint 3D meshes in the HyperStackViewer.

    We simply reslice the mesh at the Z slice currently displayed,
    and paint the intersection as a collection of segments.
    
    I also took the opportunity to refactor a bit the SpotOverlay.
    
    Right now this works but is not optimal:
    1/ There are weird stuff happening at the *top* of the mesh: it's
    like we miss some part of it.
    2/ The slice routine generates a list of disconnected segments. It
    does not show when we paint them, but maybe would be nice to
    reconstruct the collection of contours resulting from the intersection
    of a mesh with a plane.
    3/ We could optimize the slice() routinemaybe  by having an index
    that sorts triangles by their minZ value, and another index that
    sorts them by their maxZ value. This way we could quickly retrieve
    the triangles to sort by two binary-search and one set intersection.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    7bab2dc View commit details
    Browse the repository at this point in the history
  15. Outdated interactive tests.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    f0118a2 View commit details
    Browse the repository at this point in the history
  16. Fix javadoc.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    0302c28 View commit details
    Browse the repository at this point in the history
  17. Temporary store meshes in absolute physical coordinates.

    While we try to make better slices.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    7aebecd View commit details
    Browse the repository at this point in the history
  18. Configuration menu
    Copy the full SHA
    01f6eaa View commit details
    Browse the repository at this point in the history
  19. Non working version of a pixel iterator.

    It is working for simple meshes but the ones we have have too
    many border cases and make it fail.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    9007614 View commit details
    Browse the repository at this point in the history
  20. Configuration menu
    Copy the full SHA
    94d9f4a View commit details
    Browse the repository at this point in the history
  21. Configuration menu
    Copy the full SHA
    c7a420d View commit details
    Browse the repository at this point in the history
  22. Utility to sort Trove arrays.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    68590ff View commit details
    Browse the repository at this point in the history
  23. Demo simple mesh.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c72231f View commit details
    Browse the repository at this point in the history
  24. Configuration menu
    Copy the full SHA
    e848698 View commit details
    Browse the repository at this point in the history
  25. Update the demo with Toby + JY ideas.

    Not good enough yet.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    e44c9fa View commit details
    Browse the repository at this point in the history
  26. Yeaaahh! Working version of a pixel iterator.

    At least on star-convex objects, but does not assume they are.
    Still very tiny final border cases, where the iteration stops
    early at the poles of an object, but it's nothing unsurmontable.
    Tomorrow.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    da9e346 View commit details
    Browse the repository at this point in the history
  27. Configuration menu
    Copy the full SHA
    b2b4ade View commit details
    Browse the repository at this point in the history
  28. Configuration menu
    Copy the full SHA
    3e0b212 View commit details
    Browse the repository at this point in the history
  29. Update the interactive demo.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    81b5b6a View commit details
    Browse the repository at this point in the history
  30. Configuration menu
    Copy the full SHA
    2717711 View commit details
    Browse the repository at this point in the history
  31. Implement quality measurement on the 3D object.

    Without using the mesh actually, we use the bitmask provided.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1406b8d View commit details
    Browse the repository at this point in the history
  32. Configuration menu
    Copy the full SHA
    8cafcc5 View commit details
    Browse the repository at this point in the history
  33. Iterable for a spot mesh.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    e6ac80e View commit details
    Browse the repository at this point in the history
  34. Add methods to SpotUtil to return suitable iterables in 2D and 3D.

    With this simple change we get intensity measurements in 3D in a
    mesh for free.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    3de035b View commit details
    Browse the repository at this point in the history
  35. Configuration menu
    Copy the full SHA
    90de0ff View commit details
    Browse the repository at this point in the history
  36. Configuration menu
    Copy the full SHA
    1dc136b View commit details
    Browse the repository at this point in the history
  37. Temporary couple to imagej-mesh-io 0.1.3-SNAPSHOT.

    So that we can have reading from an input stream.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    67c8352 View commit details
    Browse the repository at this point in the history
  38. Serialization and deserialization of spot meshes to file.

    The meshes are saved in a ZIP file next to the TrackMate XML file.
    If the TrackMate file is called: trackmate-file.xml, then the file
    that stores the meshes for the model are in a zip file called
    trackmate-file.xml.meshes
    
    This zip file just contains the meshes as PLY files, named with the
    spots ID. If a spot has an ID equal to 1234, then the PLY file that
    stores its mesh is named 1234.ply in the zip file. If the zip file
    does not contain such a file then it means that this spot does not
    have a mesh. If there is not .meshes file, it means that no spot
    have a mesh.
    
    Possible improvement: read all meshes at once, instead of opening and
    closing the zip file for every spot.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    e5c9232 View commit details
    Browse the repository at this point in the history
  39. Configuration menu
    Copy the full SHA
    d157924 View commit details
    Browse the repository at this point in the history
  40. Recompute face normals after loading mesh.

    They are not saved not retrieved by the PLY file reader. Should they?
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    15ebfde View commit details
    Browse the repository at this point in the history
  41. Configuration menu
    Copy the full SHA
    4fb0e59 View commit details
    Browse the repository at this point in the history
  42. WIP: Rework the Z-slicing of meshes.

    Try to build actual contours across Z sections of the object,
    reusing the ray casting things we have for the iteration.
    Very preliminary and has cases where it does not work.
    Also has a lot of room for optimization and refactoring.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    0ecf26d View commit details
    Browse the repository at this point in the history
  43. Tweak interactive tests.

    When everything is bugged, they are important.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    17584f7 View commit details
    Browse the repository at this point in the history
  44. Configuration menu
    Copy the full SHA
    28b1da2 View commit details
    Browse the repository at this point in the history
  45. Configuration menu
    Copy the full SHA
    3f2d8d4 View commit details
    Browse the repository at this point in the history
  46. Configuration menu
    Copy the full SHA
    9334c9c View commit details
    Browse the repository at this point in the history
  47. Rework painting meshes a bit.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    ddab834 View commit details
    Browse the repository at this point in the history
  48. Update interactive tests.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4d7f326 View commit details
    Browse the repository at this point in the history
  49. Configuration menu
    Copy the full SHA
    5815d27 View commit details
    Browse the repository at this point in the history
  50. Configuration menu
    Copy the full SHA
    23ded95 View commit details
    Browse the repository at this point in the history
  51. Tweak painting of meshes.

    Not important, will go away.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    61b665d View commit details
    Browse the repository at this point in the history
  52. Update interactive tests.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    591b0e1 View commit details
    Browse the repository at this point in the history
  53. Configuration menu
    Copy the full SHA
    6a95a39 View commit details
    Browse the repository at this point in the history
  54. Update interactive tests.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    6969ba4 View commit details
    Browse the repository at this point in the history
  55. Rework spot mesh iteration.

    Use the contours we got from the ZSlicer. Perform ray cast along
    the X axis. Count how many intersection we crosses to determine
    whether we are inside or outside.
    Works when the slice has several disjoint contours and when some
    contours are surrounding the exterior of the mesh (holes inside
    the slice).
    
    Relatively optimized:
    - Once per spot: get all the Z slices. Involves iterating once through
    all the triangles, sorting 2 arrays and a few binary search.
    - Once per X line: compute intersections of a ray along the X axis
    with all the contours.
    - Once per pixel: binary search against intersection to know how
    many of them we crossed.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1c57081 View commit details
    Browse the repository at this point in the history
  56. Remove unused classes.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    6ea2074 View commit details
    Browse the repository at this point in the history
  57. Update mesh demos.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    3670974 View commit details
    Browse the repository at this point in the history
  58. Meshes are stored centered at (0,0,0)

    They and translated on the fly when iterating over pixels,
    saving and diplaying.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1b1a323 View commit details
    Browse the repository at this point in the history
  59. Create a proper mask from the input before using the mask detector.

    A small routine builds a view of the input (that should be a mask)
    where all pixels greater than 0 are set to 1 and to 0 otherwise.
    In the case of meshes, this allows using the marching cube algorithm
    on real type, interpolating at 0.5 between 0 and 1, and having
    smoother meshes than when using the marching cube on boolean types.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    f6f8552 View commit details
    Browse the repository at this point in the history
  60. Configuration menu
    Copy the full SHA
    a7ca064 View commit details
    Browse the repository at this point in the history
  61. Mesh slices can be painted filled.

    Holes in slices are properly handled.
    But only in the case of contours generated by meshes that are
    manifold and two-manifold.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    bee190f View commit details
    Browse the repository at this point in the history
  62. Code style changes.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    7acabe5 View commit details
    Browse the repository at this point in the history
  63. Precompute and store a cache of Z-slices for meshes.

    We don't want to recompute them every time we have to paint the
    spot-meshes, or iterate through their pixel. And we have an
    optimized version of the ZSlicer that computes Z-slices in batch
    with several Zs. This makes the display and iteration in the
    TrackMate app much much faster for large meshes.
    
    The difficulty is that we need to specify a scale in XY and in
    Z (to simplify the  contours, and compute the Z positions of
    the intersections with the image stack slices). But we don't
    want to store these scales - which are the pixel size typically -
    in the model, that should be independent of a reference to an image.
    
    The solution in this commit consists in receiving these
    scales when we require the precomputed Z-slices: the cache is
    then recomputed if needed, and we have these scales in the code
    when we require the Z-slices
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    b44d73b View commit details
    Browse the repository at this point in the history
  64. Configuration menu
    Copy the full SHA
    55ada3b View commit details
    Browse the repository at this point in the history
  65. Can manually scale meshes in size.

    Not sure it is useful, but we can do it for normal spots, rois
    and now meshes.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    34f314e View commit details
    Browse the repository at this point in the history
  66. Configuration menu
    Copy the full SHA
    b559b28 View commit details
    Browse the repository at this point in the history
  67. Fix mistake with mesh cursor.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    0c39749 View commit details
    Browse the repository at this point in the history
  68. Configuration menu
    Copy the full SHA
    5352cf0 View commit details
    Browse the repository at this point in the history
  69. Configuration menu
    Copy the full SHA
    5766a3b View commit details
    Browse the repository at this point in the history
  70. Support making single spots with possibly hollow meshes.

    That is: we do not rely on connected components to separate mesh,
    but instead simply use the ImgLib2 regions.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    abf748f View commit details
    Browse the repository at this point in the history
  71. Configuration menu
    Copy the full SHA
    617150a View commit details
    Browse the repository at this point in the history
  72. Update demo.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    f017db6 View commit details
    Browse the repository at this point in the history
  73. Configuration menu
    Copy the full SHA
    9d90aae View commit details
    Browse the repository at this point in the history
  74. Recompute the Z-slices when changing the radius.

    Nevermind the XY changes optimization.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c468c42 View commit details
    Browse the repository at this point in the history
  75. Rename 2D morphology analyzers.

    To make room for the 3D analyzers.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    b3cf8b5 View commit details
    Browse the repository at this point in the history
  76. Add flag for detectors that can return 3D shape,

    and interfaces for analyzers that can exploit it.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    dc9a6d9 View commit details
    Browse the repository at this point in the history
  77. Add ops as a dependency.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    036ddc6 View commit details
    Browse the repository at this point in the history
  78. Add VOLUME as a dimension.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    fa44f79 View commit details
    Browse the repository at this point in the history
  79. Add basic 3D shape analyzers.

    TODO: Ellipsoid fitting, boxity.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    0c39513 View commit details
    Browse the repository at this point in the history
  80. Remove unused class.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    03d63e1 View commit details
    Browse the repository at this point in the history
  81. WIP: Ellipsoid fitter.

    Fit an ellipsoid to the convex-Hull of a 3D mesh.
    Adapted from Yury Petrov's EllipsoidFit MATLAB function
    and KalebKE ellipsoidfit (Apache license)
    TODO: Test!
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    b05ed56 View commit details
    Browse the repository at this point in the history
  82. Configuration menu
    Copy the full SHA
    20c2cbf View commit details
    Browse the repository at this point in the history
  83. JUnit test for the ellipsoid fitter.

    Contains a routine to generate the mesh of an ellipsoid
    programmatically.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    e1c3e31 View commit details
    Browse the repository at this point in the history
  84. Configuration menu
    Copy the full SHA
    6b54c96 View commit details
    Browse the repository at this point in the history
  85. Configuration menu
    Copy the full SHA
    59ad971 View commit details
    Browse the repository at this point in the history
  86. Spot is now an interface, with 3 derived class.

    Spot -> the main interface, used by default in trackers. Define
    basic methods to get and store feature values.
    SpotBase -> Plain spots, like for TrackMate v<7
    SpotRoi -> spot has a polygon as a contour in 2D
    SpotMesh -> spot has a 3D mesh
    
    More elegant and extensible to app consuming TrackMate trackers
    with special objects.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c26debe View commit details
    Browse the repository at this point in the history
  87. Fix some javadoc errors.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    0edbc1e View commit details
    Browse the repository at this point in the history
  88. Configuration menu
    Copy the full SHA
    d048129 View commit details
    Browse the repository at this point in the history
  89. Remove unused interfaces.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c217b23 View commit details
    Browse the repository at this point in the history
  90. Configuration menu
    Copy the full SHA
    fba3747 View commit details
    Browse the repository at this point in the history
  91. Configuration menu
    Copy the full SHA
    075bbd7 View commit details
    Browse the repository at this point in the history
  92. Rework the SpotRoi class.

    - Make fields private, replace by public methods.
    - Review iteration over coordinates.
    - More sensible convenience methods.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    5447f63 View commit details
    Browse the repository at this point in the history
  93. Configuration menu
    Copy the full SHA
    77c3603 View commit details
    Browse the repository at this point in the history
  94. Rework the SpotMesh class.

    Simply make the mesh field private, accessible via a public method.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4e2769b View commit details
    Browse the repository at this point in the history
  95. WIP: An action to export all the meshes in a model to a PLY file series.

    So that they can be opened as a time series in ParaView.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1155b5e View commit details
    Browse the repository at this point in the history
  96. Fix loading of SpotMeshes.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    d3cdbc6 View commit details
    Browse the repository at this point in the history
  97. Configuration menu
    Copy the full SHA
    0aaf302 View commit details
    Browse the repository at this point in the history
  98. Configuration menu
    Copy the full SHA
    b07d1c6 View commit details
    Browse the repository at this point in the history
  99. Fix meshh series exporter.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1966635 View commit details
    Browse the repository at this point in the history
  100. Make a utility method public.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    cd07ac3 View commit details
    Browse the repository at this point in the history
  101. Rework the 2D and 3D detection utils.

    We have now 3D meshes that we get via the marching cubes. This
    algorithm behaves slightly differently for grayscale + threshold
    and mask images, so we have to implement that in TrackMate.
    
    First: split the shape-related methods of MaskUtils in two
    utility classes SpotRoiUtils and SpotMeshUtils so as to avoid
    having a single gigantic class.
    
    With grayscale thresholded image, the marching cube algorithm can
    return nice, smooth, interpolated meshes, which is what we want
    in a biological context. So there is now in SpotMeshUtils a method
    that exploits this in the following manner:
    
    The grayscale marching-cube algorithm is used to create one big mesh
    from the source image. It is then split in connected-components to
    create single spot objects. However, to deal with possible holes
    in objects, meshes are possibly re-merged based on full inclusion
    of their bounding-box. For instance, a hollow sphere would be
    represented by two connected-components, yielding two meshes.
    But because the small one isincluded in the big one, they are
    merged in this method so that the hole is properly included in the
    shape representation.
    
    When dealing with masks as inputs, we want to generate a mesh that
    can retrieve the exact pixel content of the mask when iterated. So
    a separate method convert the mask into a label image, and each
    of its connected-component is treated separately to generate a mesh.
    We will use the grayscale marching-cube algorithm, using a threshold
    value of 0.5 on the bit-masks resulting from connected-component
    analysis of the label image generated from the mask.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    8d7bb4c View commit details
    Browse the repository at this point in the history
  102. Configuration menu
    Copy the full SHA
    c78002e View commit details
    Browse the repository at this point in the history
  103. Configuration menu
    Copy the full SHA
    ed99c4b View commit details
    Browse the repository at this point in the history
  104. Two new icons.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    04a1b56 View commit details
    Browse the repository at this point in the history
  105. Configuration menu
    Copy the full SHA
    260f871 View commit details
    Browse the repository at this point in the history
  106. A UI tool to build a selection of feature analyzers and save it to disk.

    Later we will make the GUI sessions use the saved selection, so that
    users can choose what they want to compute or not.
    Might be handy for some features that are long to compute.
    Contrast and SNR I am looking at you. And actually you are deselected
    by default now.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    47bfbf1 View commit details
    Browse the repository at this point in the history
  107. Configuration menu
    Copy the full SHA
    af4d012 View commit details
    Browse the repository at this point in the history
  108. Configuration menu
    Copy the full SHA
    0f4bf9b View commit details
    Browse the repository at this point in the history
  109. Configuration menu
    Copy the full SHA
    00ebafa View commit details
    Browse the repository at this point in the history
  110. Also abides to user spot analyser selection after detection step.

    Because morphology analyzers (2D or 3D) are added only after detection
    step (they are added at this moment, because we need to know whether
    the detector can return the spot shape).
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    14d7ca6 View commit details
    Browse the repository at this point in the history
  111. Configuration menu
    Copy the full SHA
    bde9aef View commit details
    Browse the repository at this point in the history
  112. Convenience class to run 2D+Z segmentation algos in 3D.

    A SpotDetector for 3D images that work by running a spot
    segmentation algorithm on 2D slices, and merging results
    using a tracker. This yield a label image that is then
    converted to 3D meshes using the LabelImageDetector.
    
    This is a convenience class, made to be used in
    specialized SpotDetectorFactory with specific choices
    of detector and merging strategy.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    f8fca46 View commit details
    Browse the repository at this point in the history
  113. Fix bug in analyzer selection.

    When using the configure(Settings) method, the morphology analyzers
    were not added to the Settings object, even when selected.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1c2bc75 View commit details
    Browse the repository at this point in the history
  114. The GUI honors the user selection when computing spot features.

    The spot feature analyzer factories are directly read from
    the user selection.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    abc68b5 View commit details
    Browse the repository at this point in the history
  115. Use again the custom 2D iteration routine for SpotRoi.

    I was using it before and trash it in the overhaul. But this one
    is about 30x faster. So let's put it back, with some adapting.
    Noticed by @Mini-Miette
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    8be3b4e View commit details
    Browse the repository at this point in the history
  116. Tweak javadoc.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    9bfeed9 View commit details
    Browse the repository at this point in the history
  117. Configuration menu
    Copy the full SHA
    4986865 View commit details
    Browse the repository at this point in the history
  118. Make sure the user selection of analyzers are added in priority order.

    This is crucial, as some analyzers depend on others to have been
    computed. This is implemented following the priority of the analyzer
    factories, which is known by the provider. The provider returns a list
    of keys, in priority order, so we must make sure to reproduce this
    order with the user selection.
    Hence the gymnastic in the configure(Settings) method.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    d1994b8 View commit details
    Browse the repository at this point in the history
  119. Implement quality measurement on the 3D object.

    Without using the mesh actually, we use the bitmask provided.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    a3b4587 View commit details
    Browse the repository at this point in the history
  120. Spot is now an interface, with 3 derived class.

    Spot -> the main interface, used by default in trackers. Define
    basic methods to get and store feature values.
    SpotBase -> Plain spots, like for TrackMate v<7
    SpotRoi -> spot has a polygon as a contour in 2D
    SpotMesh -> spot has a 3D mesh
    
    More elegant and extensible to app consuming TrackMate trackers
    with special objects.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    edd086c View commit details
    Browse the repository at this point in the history
  121. simplify TMUtils.rawWraps

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    592ac97 View commit details
    Browse the repository at this point in the history
  122. Configuration menu
    Copy the full SHA
    e684cc4 View commit details
    Browse the repository at this point in the history
  123. Add jogl deps.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4667f14 View commit details
    Browse the repository at this point in the history
  124. Configuration menu
    Copy the full SHA
    fe5692d View commit details
    Browse the repository at this point in the history
  125. WIP: A new viewer for TrackMate based on the BVV.

    Adapting the demo from Tobias. This currently requires the 'mesh' branch
    in the bvv repo to work. Right now it can display the 3D image (possibly
    multi-channel) over time, along with the meshes in spots (if there is
    no mesh, nothing is shown).
    There is still so much to do but this is cool!
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    800bf01 View commit details
    Browse the repository at this point in the history
  126. Copy of Tobias 'StupidMesh'.

    Modified so that the color of individual meshes can be changed at
    runtime. We also add a white halo so that object contours are visible
    over the black background.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4f8a301 View commit details
    Browse the repository at this point in the history
  127. The BVV view abides to the spot color settings.

    Can be changed live using TrackMate display settings panels.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    30008d4 View commit details
    Browse the repository at this point in the history
  128. Configuration menu
    Copy the full SHA
    c3c5213 View commit details
    Browse the repository at this point in the history
  129. Configuration menu
    Copy the full SHA
    6a36f12 View commit details
    Browse the repository at this point in the history
  130. Configuration menu
    Copy the full SHA
    a5a5dd5 View commit details
    Browse the repository at this point in the history
  131. Fix OverlapTracker not working if the first frame was devoid of visib…

    …le spots.
    
    Noticed by Laura Xénard  @Mini-Miette
    Fix #260
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    5311e4a View commit details
    Browse the repository at this point in the history
  132. Put a test drive in a try/catch block so that we can get exceptions.

    One bug of my Eclipse installation results in not having exceptions
    shown in the console.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    ed2b1af View commit details
    Browse the repository at this point in the history
  133. Minor tweak of the demo.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    584494c View commit details
    Browse the repository at this point in the history
  134. Configuration menu
    Copy the full SHA
    03f2635 View commit details
    Browse the repository at this point in the history
  135. Configuration menu
    Copy the full SHA
    cef0048 View commit details
    Browse the repository at this point in the history
  136. Configuration menu
    Copy the full SHA
    39be943 View commit details
    Browse the repository at this point in the history
  137. Configuration menu
    Copy the full SHA
    bba11ef View commit details
    Browse the repository at this point in the history
  138. Tweak error messages.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    ccf59da View commit details
    Browse the repository at this point in the history
  139. Configuration menu
    Copy the full SHA
    6f71df7 View commit details
    Browse the repository at this point in the history
  140. Configuration menu
    Copy the full SHA
    3c21ae7 View commit details
    Browse the repository at this point in the history
  141. Configuration menu
    Copy the full SHA
    1e7b473 View commit details
    Browse the repository at this point in the history
  142. WIP: on Process2DZ, assign quality, work well with ROIs.

    Does not work yet, if the zmin is not 0.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    098be7a View commit details
    Browse the repository at this point in the history
  143. Configuration menu
    Copy the full SHA
    6b20fe8 View commit details
    Browse the repository at this point in the history
  144. Simplify StupidMesh.

    Remove unneeded fields.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    2a695e7 View commit details
    Browse the repository at this point in the history
  145. Configuration menu
    Copy the full SHA
    a0ecff5 View commit details
    Browse the repository at this point in the history
  146. Configuration menu
    Copy the full SHA
    3bf50b1 View commit details
    Browse the repository at this point in the history
  147. Configuration menu
    Copy the full SHA
    0bbb6e6 View commit details
    Browse the repository at this point in the history
  148. Configuration menu
    Copy the full SHA
    70b968a View commit details
    Browse the repository at this point in the history
  149. Configuration menu
    Copy the full SHA
    27eee1d View commit details
    Browse the repository at this point in the history
  150. Configuration menu
    Copy the full SHA
    708c9d9 View commit details
    Browse the repository at this point in the history
  151. Update to non-SNAPSHOT version of bigvolumeviewer.

    This version is deployed on maven.imagej.net.
    Tobias made a special branch for TrackMate, and the difference I
    could identify is the presence of a method that returns the camera
    view. See the diff in TrackMateBVV.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4706120 View commit details
    Browse the repository at this point in the history
  152. WIP: Trying to implement transparency of meshes.

    Right now we don't "see through" the meshes. They simply get darker.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    00b889d View commit details
    Browse the repository at this point in the history
  153. Fix cast error

    ?! How did it get there unnoticed?
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    829de7e View commit details
    Browse the repository at this point in the history
  154. Spot is now an interface, with 3 derived class.

    Spot -> the main interface, used by default in trackers. Define
    basic methods to get and store feature values.
    SpotBase -> Plain spots, like for TrackMate v<7
    SpotRoi -> spot has a polygon as a contour in 2D
    SpotMesh -> spot has a 3D mesh
    
    More elegant and extensible to app consuming TrackMate trackers
    with special objects.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    19042fa View commit details
    Browse the repository at this point in the history
  155. Rework the 2D and 3D detection utils.

    We have now 3D meshes that we get via the marching cubes. This
    algorithm behaves slightly differently for grayscale + threshold
    and mask images, so we have to implement that in TrackMate.
    
    First: split the shape-related methods of MaskUtils in two
    utility classes SpotRoiUtils and SpotMeshUtils so as to avoid
    having a single gigantic class.
    
    With grayscale thresholded image, the marching cube algorithm can
    return nice, smooth, interpolated meshes, which is what we want
    in a biological context. So there is now in SpotMeshUtils a method
    that exploits this in the following manner:
    
    The grayscale marching-cube algorithm is used to create one big mesh
    from the source image. It is then split in connected-components to
    create single spot objects. However, to deal with possible holes
    in objects, meshes are possibly re-merged based on full inclusion
    of their bounding-box. For instance, a hollow sphere would be
    represented by two connected-components, yielding two meshes.
    But because the small one isincluded in the big one, they are
    merged in this method so that the hole is properly included in the
    shape representation.
    
    When dealing with masks as inputs, we want to generate a mesh that
    can retrieve the exact pixel content of the mask when iterated. So
    a separate method convert the mask into a label image, and each
    of its connected-component is treated separately to generate a mesh.
    We will use the grayscale marching-cube algorithm, using a threshold
    value of 0.5 on the bit-masks resulting from connected-component
    analysis of the label image generated from the mask.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    31468ec View commit details
    Browse the repository at this point in the history
  156. Configuration menu
    Copy the full SHA
    a2c4252 View commit details
    Browse the repository at this point in the history
  157. Depend on imglib2-mesh preview, not on net-imagej-mesh.

    Still a WIP: several utility methods in TrackMate about meshes are now
    in the imglib2-mesh dep.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    3a985a9 View commit details
    Browse the repository at this point in the history
  158. Use the scale method of the spot interface.

    We don't have SpotShape anymore.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    d5a96e4 View commit details
    Browse the repository at this point in the history
  159. Configuration menu
    Copy the full SHA
    10182e2 View commit details
    Browse the repository at this point in the history
  160. Try to do without deprecated method.

    Given the message, we might see an error depending on the
    java JRE that runs. Using the Zulu one, this passes.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c881229 View commit details
    Browse the repository at this point in the history
  161. Remove debug main method.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    cb1027b View commit details
    Browse the repository at this point in the history
  162. Configuration menu
    Copy the full SHA
    fdf16db View commit details
    Browse the repository at this point in the history
  163. Configuration menu
    Copy the full SHA
    80b27ba View commit details
    Browse the repository at this point in the history
  164. Fix all javadoc warnings.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    2b5b26b View commit details
    Browse the repository at this point in the history
  165. Configuration menu
    Copy the full SHA
    8e7c24b View commit details
    Browse the repository at this point in the history
  166. Make the mesh of a SpotMesh setable.

    Also stop exposing the bounding-box.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    bafff8b View commit details
    Browse the repository at this point in the history
  167. Return the actual BufferMesh class when we expose the mesh of a SpotM…

    …esh.
    
    TODO: use this in dependent methods.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    7e25850 View commit details
    Browse the repository at this point in the history
  168. Configuration menu
    Copy the full SHA
    9c2c176 View commit details
    Browse the repository at this point in the history
  169. Configuration menu
    Copy the full SHA
    83925c2 View commit details
    Browse the repository at this point in the history
  170. Configuration menu
    Copy the full SHA
    346f5d1 View commit details
    Browse the repository at this point in the history
  171. Improve smoothing action.

    - Actually run the tasks in multithreaded fashion (forgot to
    shutdown the executor service).
    - Notify the views that the spots have changed, including the 3D
    view. Takes a little delay but it's fine.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    536089f View commit details
    Browse the repository at this point in the history
  172. Configuration menu
    Copy the full SHA
    9a7e46a View commit details
    Browse the repository at this point in the history
  173. Configuration menu
    Copy the full SHA
    03411c9 View commit details
    Browse the repository at this point in the history
  174. Configuration menu
    Copy the full SHA
    06eeb95 View commit details
    Browse the repository at this point in the history
  175. Configuration menu
    Copy the full SHA
    71dae84 View commit details
    Browse the repository at this point in the history
  176. Add a 'basic' setting panel to the mesh smoother.

    It filters with mu = 1., lambda -0, which is like applying heavy
    Laplace smoothing.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c515e9c View commit details
    Browse the repository at this point in the history
  177. Configuration menu
    Copy the full SHA
    7cf06fe View commit details
    Browse the repository at this point in the history
  178. WIP: Smooth mask or label before generating mesh to smooth it.

    Incomplete: miss the 2D case.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    bb97d01 View commit details
    Browse the repository at this point in the history
  179. Configuration menu
    Copy the full SHA
    6a8ecf5 View commit details
    Browse the repository at this point in the history
  180. Optionally check for the presence of a parameter in a settings map.

    Does not return an error if the parameter is not there, but
    if it is, checks that it is of the expected class.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    c6d9b63 View commit details
    Browse the repository at this point in the history
  181. Tweak the slider panels.

    - Mouse wheel listener.
    - Method to dis/enable all sub component.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    3366157 View commit details
    Browse the repository at this point in the history
  182. fix the PanelSmoothContour.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    596c57e View commit details
    Browse the repository at this point in the history
  183. Implement smoothing of images before segmentation.

    Changes in the core methods in MaskUtils, SpotMeshUtils and
    SpotRoiUtils:
    
    - They take a smoothingScale double parameter.
    
    - If negative, it is ignored, and the segmentation (by mask, threshold
    and label image) processes directly on the input image.
    
    - Otherwise, the inputs are filtered by a Gaussian filter with sigmas
    derived from the specified scale. In 2D and 3D. Even for the bitmasks
    of the label image. This yields much smoother meshes and contour,
    of a smoothness controlled by the scale.
    
    - This is different from the 'simplify' flag, that prunes the contour
    and the mesh, but still 'sticks' to the shape in the input without
    filtering.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1b27485 View commit details
    Browse the repository at this point in the history
  184. Configuration menu
    Copy the full SHA
    65789e2 View commit details
    Browse the repository at this point in the history
  185. Configuration menu
    Copy the full SHA
    f79151e View commit details
    Browse the repository at this point in the history
  186. Fix incorrect documentation.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    81d4650 View commit details
    Browse the repository at this point in the history
  187. Configuration menu
    Copy the full SHA
    c78f094 View commit details
    Browse the repository at this point in the history
  188. Move the shader files to the resources folder.

    So that they are properly included when compiling with maven.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    949ad61 View commit details
    Browse the repository at this point in the history
  189. Configuration menu
    Copy the full SHA
    ca5790b View commit details
    Browse the repository at this point in the history
  190. Configuration menu
    Copy the full SHA
    ef67b22 View commit details
    Browse the repository at this point in the history
  191. Configuration menu
    Copy the full SHA
    e021eab View commit details
    Browse the repository at this point in the history
  192. Add a button to launch LabKit in the configure views panel of the wiz…

    …ard.
    
    But because the other table, trackscheme and bvv buttons take
    too much place, we don't see it without resizing the window.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    a2f899d View commit details
    Browse the repository at this point in the history
  193. Rework and improve the import method of the spot editor.

    - We don't depend on labels anymore, but directly operate and compare
    the index images (before modification and after). Because the index
    is directly related to the spot ID, we can get a match from previous
    spot to novel spot in an easy manner.
    
    - The spots from the edited version are created directly from the
    novel index image, using something adapted from the label image
    detector code, so again, just one pass. We use the fact that we can
    provide it with a 'quality' image, and read the index of the label
    image 'under' the spot and write it into its quality value.
    This way we can retrieve the id of the matching previous
    spot in an easy manner.
    
    - The price to pay for not working with labels anymore
    is that we don't have access to the label name, but that's life.
    
    - We make only one pass over the image to collect the ids of the spots
    that have been modified, instead of one pass per spot. Also, this
    pass is multithreaded (thanks LoopBuilder).
    
    - I have also learned that I should not use weakListeners() if I
    am doing something with threads inside the listener. Using listeners()
    instead works, but I do not know why the other one does not.
    Probably something arcane with Java WeakReferences being collected.
    
    - As a result of all this the performance is much better than before
    and the 'return to TrackMate' should happen without the user noticing
    the process.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    1d2f2f9 View commit details
    Browse the repository at this point in the history
  194. Try to fix LegacyService error.

    This test fails because of the LegacyService, see the stack trace
    below.
    
    If I add the
    
    static
    {
    	net.imagej.patcher.LegacyInjector.preinit();
    }
    
    initializer block as suggested here:
    https://forum.image.sc/t/imagej-legacy-error/23013
    
    then the test passes in Eclipse, but still fails in Maven.
    
    So this commit at least adds the initializer so that it works
    in Eclipse. Note that it still fails on Maven, and proably
    with deploy actions too.
    
    
    
    
    [INFO] Running fiji.plugin.trackmate.TrackMatePluginTest
    [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.787 s <<< FAILURE! -- in fiji.plugin.trackmate.TrackMatePluginTest
    [ERROR] fiji.plugin.trackmate.TrackMatePluginTest.testTrackMateRegistration -- Time elapsed: 0.787 s <<< ERROR!
    java.lang.ExceptionInInitializerError
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:250)
    	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:260)
    	at org.junit.runners.BlockJUnit4ClassRunner$2.runReflectiveCall(BlockJUnit4ClassRunner.java:309)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:306)
    	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
    	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
    	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
    	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
    Caused by: java.lang.RuntimeException: Found incompatible ImageJ class
    	at net.imagej.patcher.LegacyEnvironment.initialize(LegacyEnvironment.java:112)
    	at net.imagej.patcher.LegacyEnvironment.applyPatches(LegacyEnvironment.java:494)
    	at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:400)
    	at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:379)
    	at fiji.plugin.trackmate.TrackMatePluginTest.<clinit>(TrackMatePluginTest.java:40)
    	... 28 more
    Caused by: java.lang.RuntimeException: Cannot load class: ij.gui.ImageWindow (loader: sun.misc.Launcher$AppClassLoader@18b4aac2)
    It appears that this class was already defined in the class loader!
    Please make sure that you initialize the LegacyService before using
    any ImageJ 1.x class. You can do that by adding this static initializer:
    
    	static {
    		LegacyInjector.preinit();
    	}
    
    To debug this issue, start the JVM with the option:
    
    	-javaagent:/Users/tinevez/.m2/repository/net/imagej/ij1-patcher/1.2.6/ij1-patcher-1.2.6.jar
    
    To enforce pre-initialization, start the JVM with the option:
    
    	-javaagent:/Users/tinevez/.m2/repository/net/imagej/ij1-patcher/1.2.6/ij1-patcher-1.2.6.jar=init
    
    	at net.imagej.patcher.CodeHacker.javaAgentHint(CodeHacker.java:826)
    	at net.imagej.patcher.CodeHacker.loadClass(CodeHacker.java:805)
    	at net.imagej.patcher.CodeHacker.loadClasses(CodeHacker.java:853)
    	at net.imagej.patcher.LegacyInjector.injectHooks(LegacyInjector.java:114)
    	at net.imagej.patcher.LegacyEnvironment.initialize(LegacyEnvironment.java:100)
    	... 32 more
    Caused by: java.lang.ClassFormatError: loader (instance of  sun/misc/Launcher$AppClassLoader): attempted  duplicate class definition for name: "ij/gui/ImageWindow"
    	at javassist.util.proxy.DefineClassHelper$Java7.defineClass(DefineClassHelper.java:182)
    	at javassist.util.proxy.DefineClassHelper.toClass(DefineClassHelper.java:260)
    	at javassist.ClassPool.toClass(ClassPool.java:1240)
    	at javassist.CtClass.toClass(CtClass.java:1392)
    	at net.imagej.patcher.CodeHacker.loadClass(CodeHacker.java:799)
    	... 35 more
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    8f1731a View commit details
    Browse the repository at this point in the history
  195. Fix reimporting labels with large IDs in 2D.

    The re-importing of labels from Tabkit to TrackMate could fail for
    2D images and labels with a large index. For instance, it failed
    consistently when trying to re-import labels with an index larger
    than 65643.
    
    This problem roots in the getSpots() method of LabkitImporter. It
    relies on a trick: We get the new label image, and create spots from
    this label image. But we want the new spots to keep track of the index
    in the label image they were generated from.
    
    For this, in 2D, we use the SpotRoiUtils.from2DLabelingWithRoi()
    method. These methods accept an image as last argument used to
    read a value in the label image within the spot, that is normally
    used for the quality value of the new spot.
    
    But the SpotRoiUtils.from2DLabelingWithRoi() method converted the
    extra image to ImagePlus (because I was lazy). So the label image
    was effectively cast on ushort for an IntegerType image, hence
    the problem with the max label being 65453.
    
    The solution is to rewrite the from2DLabelingWithRoi() so that
    it does not rely on converting to ImagePlus, but on good old
    iteration with imglib2.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    6acda1e View commit details
    Browse the repository at this point in the history
  196. Configuration menu
    Copy the full SHA
    408c55a View commit details
    Browse the repository at this point in the history
  197. Fix the legacy error issue?

    Moving the plugin implementation out of the test class and
    removing the legacy injector make the test pass in maven.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4af96fe View commit details
    Browse the repository at this point in the history
  198. Configuration menu
    Copy the full SHA
    550acd2 View commit details
    Browse the repository at this point in the history
  199. All labeling methods now use the double[] origin to reposition spots.

    Instead of the interval, so that this is consistent across
    TrackMate.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    eaacf0d View commit details
    Browse the repository at this point in the history
  200. Update license blurbs.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    ec838c8 View commit details
    Browse the repository at this point in the history
  201. Temporarily disable enforcer checks.

    For the beta phase.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    fad1317 View commit details
    Browse the repository at this point in the history
  202. Configuration menu
    Copy the full SHA
    1e7f026 View commit details
    Browse the repository at this point in the history
  203. Keep imagej-legacy out of the dependency tree

    This works around a test failure in TrackMatePluginTest caused by the
    original ImageJ classes being loaded too soon. There are other ways of
    working around this problem, such as creating a SciJava context more
    eagerly, but it's a distraction from the business of testing TrackMate,
    and anyway we don't need imagej-legacy on the classpath.
    
    The only reason labkit-ui has imagej-legacy as a dependency is for one
    line of code, which can be refactored to avoid it, so hopefully the
    exclusion will be able to disappear later after labkit-ui is updated.
    ctrueden authored and tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    6096c52 View commit details
    Browse the repository at this point in the history
  204. POM: fix the dependencies

    * Avoid SNAPSHOT versions.
    * Factor out version pins to properties.
    * Avoid jogamp *-main uber-JARs.
    ctrueden authored and tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    3a84a1b View commit details
    Browse the repository at this point in the history
  205. Fix Javadoc errors

    ctrueden authored and tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4365b76 View commit details
    Browse the repository at this point in the history
  206. Configuration menu
    Copy the full SHA
    7a6a291 View commit details
    Browse the repository at this point in the history
  207. Fix minor Eclipse warnings.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    4f55ac0 View commit details
    Browse the repository at this point in the history
  208. Configuration menu
    Copy the full SHA
    8c178da View commit details
    Browse the repository at this point in the history
  209. Clamp slider widget values.

    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    093f273 View commit details
    Browse the repository at this point in the history
  210. Configuration menu
    Copy the full SHA
    3431b7d View commit details
    Browse the repository at this point in the history
  211. Add required methods in SpotRoiUtils.

    We want to retrieve spots as a map feom labels to corresponding
    spots.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    b4ebc58 View commit details
    Browse the repository at this point in the history
  212. Configuration menu
    Copy the full SHA
    b2207c1 View commit details
    Browse the repository at this point in the history
  213. Configuration menu
    Copy the full SHA
    19e981a View commit details
    Browse the repository at this point in the history
  214. Fixed one more bug with the labkit importer.

    When editing the whole movie, if the label of a new spot was using
    the label of an existing spot in another time-point, the existing
    one was removed. Because the new spot was identified as a modification
    of the existing one.
    The solution is to pass to the importer only the list of existing
    spots in the current time-frame.
    tinevez committed Jul 22, 2024
    Configuration menu
    Copy the full SHA
    ddd2520 View commit details
    Browse the repository at this point in the history

Commits on Jul 23, 2024

  1. Add a methods to return the map of label to spots in a labeling image.

    Counterpart to the same one in SpotRoiUtils.
    Nota: the methods signature order should be harmonized between the
    two utility classes.
    tinevez committed Jul 23, 2024
    Configuration menu
    Copy the full SHA
    c2823c6 View commit details
    Browse the repository at this point in the history
  2. Support editing in 3D in the LabKit editor.

    There is one discrepancy with the 2D part, linked to TrackMate:
    In 2D, one connected components will give one spot, even if several
    connected components belong to the same label.
    In 3D, it is possible to have one spot made of several disconnected
    components. Will have to document this.
    tinevez committed Jul 23, 2024
    Configuration menu
    Copy the full SHA
    9535eae View commit details
    Browse the repository at this point in the history
  3. Minor typo.

    tinevez committed Jul 23, 2024
    Configuration menu
    Copy the full SHA
    cb3fc83 View commit details
    Browse the repository at this point in the history
  4. Add the smoothing scale param to the 2D labeling methods as well.

    Not implemented yet, but at least symmetric with the 2D case.
    tinevez committed Jul 23, 2024
    Configuration menu
    Copy the full SHA
    12dcb90 View commit details
    Browse the repository at this point in the history
  5. Remove unused methods.

    tinevez committed Jul 23, 2024
    Configuration menu
    Copy the full SHA
    c075ffc View commit details
    Browse the repository at this point in the history