mooch443 / trex

TRex, a fast multi-animal tracking system with markerless identification, and 2D estimation of posture and visual fields.
https://trex.run
GNU General Public License v3.0
82 stars 8 forks source link

Additional info on blob values in raw mode #191

Open aperkes opened 1 year ago

aperkes commented 1 year ago

Is your feature request related to a problem? Please describe. This is some what minor complaint, but it would be very helpful to have some more options in the raw view to make parameter tuning easier. Specifically:

  1. I wish I knew the difference value of each blob (from background subtraction), so that I could set the threshold accordingly
  2. I would like to know the pixel intensity values, so that I could use that as an additional threshold
  3. The current first two values are obtuse, but I assume it's a blob identifier and the x,y coordinates, neither of which are actually very useful, I wish I could turn those off to reduce clutter.
  4. Similarly, when there are a lot of small blobs, they can clutter the screen and make it hard to read the info. An option to only show candidate blobs, or only show values during mouse over or something would be useful.

I'm guessing the easiest solution to implement would be to have an option in the little pop up window to "print additional information" when clicking a blob in raw view. Alternatively parameters that set the appearance of raw view could work.

Thanks for creating and continuing to improve this amazing tool!

This request was brought to you by a somewhat noisy background and very small fish.

mooch443 commented 1 year ago
  1. I am not sure what you mean by that - there isn't really one difference value of each blob. Do you mean the minimum?
  2. As an additional threshold how? Pixel intensity values are used instead of difference values if you disable enable_difference, in case that's what you mean. Again, the same issue as 1., but of course it's possible to include some additional info in the description line.
  3. Yes, although I do look at the identifier and XY positions quite frequently. It's quite difficult to find defaults that suit everybody, but that's why you need options, yes :)
  4. Blob labels are hidden if they are less than 0.5 the minimum size in blob_size_ranges. Additionally, you can usually use a combination of zooming in on already tracked objects, and moving the mouse to a different position. There's a "hole" in the transparency curve, so if you're close by it displays the labels, then when you get farther away it hides them, before it displays them again. It's pretty difficult to find a perfect combination of when to display/hide, as you can probably appreciate. I will add a todo for an option that shows info only on mouse-over (although for very dense objects this might not help much?).

I'll have a think about this. Thanks for your suggestions! If you are dealing with very noisy backgrounds, you might like the 2.0 version that will appear at some point :)

aperkes commented 1 year ago
  1. Ah good point, presumably minimum is usually going to be the threshold difference, so I guess maximum would actually be most helpful, since it would let you know the max threshold value you could have taken to still include (parts of) this blob, or maybe median, so you would keep at least half that blob. As long as I'm dreaming, a heatmap showing the difference for each pixel would be sweet.
  2. My understanding is the track_intensity_range excludes blobs with mean pixel intensity outside your range you set, but without knowing the mean intensity of each blob it's difficult to choose that range other than by trial and error. But maybe I'm not understanding what track_intensity_range is doing.

Ooo, looking forward to 2.0!

mooch443 commented 1 year ago

As an update for this issue - I have tried some stuff, especially regarding the ability the see all independent blobs even if they overlap, and all of their info in a more structured way. This means that blobs that are closeby each other will be summarized when the mouse gets close. Currently its still a bit janky, but I'm sure it'll turn out good:

Screenshot 2023-07-07 at 20 51 37

Finally what I want to do is a simple template functionality so you can set the max. detail / blob manually (e.g. mean_intensity). So there's a default and then you can do:

gui_blob_detail = "<key>{blob_id}</key> {blob_bounds} intensity:{mean_intensity} num_pixels:{num_pixels}"

This isn't too far away, since (except for the specific string parsing) all the functionality is essentially already there. What do you think?

PS: There is a gui_fish_color, if you set it to viridis it will show the pixel value in viridis color scheme - especially if you hide display->blobs :-)