Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 27 20:02

    ctrueden on roitree-to-mask-converters

    (compare)

  • Jun 27 20:02

    ctrueden on master

    First cut: ROITree to SuperElli… Fill out ROITree <-> single mas… Add RealMask support and 9 more (compare)

  • Jun 27 20:02
    ctrueden closed #101
  • Jun 27 20:01
    ctrueden commented #101
  • Jun 27 19:11
    gselzer commented #101
  • Jun 27 19:03
    ctrueden synchronize #101
  • Jun 27 19:03

    ctrueden on roitree-to-mask-converters

    First cut: ROITree to SuperElli… Fill out ROITree <-> single mas… Add RealMask support and 8 more (compare)

  • Jun 27 18:36
    gselzer commented #101
  • Jun 27 13:44
    imagesc-bot commented #26
  • Jun 26 20:40

    ctrueden on master

    POM: add main-class for quick t… (compare)

  • Jun 23 19:12
    hinerm commented #644
  • Jun 23 18:01
    gselzer commented #644
  • Jun 23 17:32
    gselzer commented #644
  • Jun 23 17:07
    hinerm commented #644
  • Jun 23 08:44

    tinevez on dev

    Add Vlado as a contributor Merge pull request #178 from xu… (compare)

  • Jun 23 08:44
    tinevez closed #178
  • Jun 22 22:26
    xulman opened #178
  • Jun 22 21:57
    ctrueden synchronize #644
  • Jun 22 21:57

    ctrueden on opSearchResult-improvements

    Use stream(), not parallelStrea… OpListingInfo: ensure OpService… OpList: improve equals implemen… (compare)

  • Jun 22 19:43
    ctrueden synchronize #644
Igor Pisarev
@igorpisarev
@tischi the n5 downsampling code is in n5-spark, but you can run it on your machine. Take a look at n5-spark repo, there are scripts for building the shaded jar and running it on a local machine. When you run locally, Spark emulates the cluster environment by using threads, and it comes as a self-contained maven dependency so you don't need to install anything extra. You can also run it in your IDE by supplying the following JVM variable: -Dspark.master=local[1] that sets the number of threads to use, or -Dspark.master=local[*] for using all cores
Christian Tischer
@tischi
@igorpisarev Check! I will try asap. Thanks again!!
Jan Eglinger
@imagejan
An imglib2-roi question: is it possible to sample (random) points on a sphere by taking some GeomMasks.closedSphere(...).xor(GeomMasks.openSphere(…))? And/or to get a full list of points representing the sphere surface by some Bresenham-like algorithm?
Or is using imglib2-roi for this a bad idea, and I should rather take a math function of a sphere and sample points “manually” ?
(I was thinking in the direction of ImgLib2 Example 4a, but taking a sphere surface instead of the full volume…)
Ghost
@ghost~5bed4252d73408ce4faeffb7
@axtimwalde must be tomancak-srv1. It is not available outside MPI-CBG. I can see CATMAID in /srv/www .
I am due to retire this machine, after moving some stuff over to bds.mpi-cbg.de and archiving the rest. Tell me where I can upload your stuff and I can get a tarball of your dir to you
Stephan Saalfeld
@axtimwalde
oh---that's great
Stephan Preibisch
@StephanPreibisch
@turekg would be great to have this of my directory as well … shouldn’t be too big, maybe just put it on google drive or so? Thank you so much!!
Ghost
@ghost~5bed4252d73408ce4faeffb7
@StephanPreibisch will put in on ownCloud and send you a link. It’s 39G so it will have to wait until @axtimwalde grabs his last directory off it. I’ll let you know when ready
Jean-Yves Tinevez
@tinevez
Hi all.
Does someone made Bessel functions for ImgLib2 already?
Stephan Preibisch
@StephanPreibisch
@turekg, thanks, I did not expect this amount of data … if you want you can check what the biggest things are and send me a directory listing, maybe we can delete most of it … or we have a look together via shared screen
Christian Tischer
@tischi
@igorpisarev May I ask couple of questions related to n5-s3?
  1. Are you using BigDataViewer to view the n5-s3 data?
  2. Do you have some experience what the optimal block size is for streaming n5-s3 data through the internet into some viewer such as Bdv?
  3. Is it possible to work with compressed n5-s3 blocks and decompress on the client side? Would this give you a better performance because you need to send less data through the web?
Igor Pisarev
@igorpisarev
Hi @tischi, for browsing I created N5 Viewer which is a BDV-based plugin that supports AWS and Google cloud: https://github.com/saalfeldlab/n5-viewer
2 - I've only used streaming through cloud platforms for smaller test projects, but I assume that the same guidelines for choosing the block size would apply there, and something like 64x64x64 would be good. I think both S3 and Google Cloud Storage charge not only for the data throughput, but also for the number of I/O requests, so you would probably want to avoid having too many tiny block files.
3 - if you use any N5 compression scheme such as GzipCompression, the blocks are always stored and sent in the compressed form
Christian Tischer
@tischi
hi @igorpisarev, thanks a lot for the informative answers!
Tobias Pietzsch
@tpietzsch
@NicoKiaru it should also be super easy to start a BigDataServer locally. See https://imagej.net/BigDataServer
Basically, just download the bigdataviewer.jar
and java -jar bigdataserver.jar myName myDataset.xml
@NicoKiaru regarding CacheControl and SharedQueue
CacheControl has only one method: prepareNextFrame()
This is called by BDV whenever the timepoint is changed, the viewer transformation is changed, etc
Tobias Pietzsch
@tpietzsch
It is a hint to the asynchronous loading infrastructure in the background: Data that might be enqueued for loading is not immediately needed anymore, and new requests should be prioritized. For example when moving to timepoint 2, then image tiles that were required to render timepoint 1 and are still enqueued for loading can be discarded (or bumped to a lower priority)
In general nothing bad happens if this hint is simply ignored.
SharedQueue is a CacheControl
Slightly simplified, it is basically a priority queue for image block requests and a number of threads that service requests from the queue.
Several VolatileImages can share the same SharedQueue (hence the name)
Tobias Pietzsch
@tpietzsch
The idea is that block requests from these images (which might be visible at the same time) are sorted into the same priority queue and serviced by the same loader threads. (instead of having a group of threads for each image that fight for resources and are basically prioritized the same)
Philipp Hanslovsky
@hanslovsky
:plus1:
Nicolas Chiaruttini
@NicoKiaru
Ok, thanks @tpietzsch this makes a lot of sense! So let's say I need to open hundreds ( ~200) of sources at the same time. Currently I create a SharedQueue(1) for each source. I assume it's probably more efficient to create a single SharedQueue(x), indeed shared for all sources ? What value of x would be appropriate ? Should x be equal to the number of cpu cores ? Also, would it diminish the risk of getting a Java Heap Space issue ?
Stephan Saalfeld
@axtimwalde
Yes, a single SharedQueue would be better, however, 200 sources could become inefficient? If that is the case, I would implement an intermediate cached source that combines the 200 sources (you can do this with a simple Converter over a Composite). But that means that you would lose the sliders and stuff...
Nicolas Chiaruttini
@NicoKiaru
Thanks @axtimwalde do you have an example somewhere ? this looks super interesting and I think that there was a discussion on gitter about this recently, but I cannot find it
Ellen TA Dobson
@etadobson
Is there a way to use LoopBuilder (or something similar) to loop multiple things while knowing their position?
Curtis Rueden
@ctrueden
@etarena @maarzt @tpietzsch Shazam: imglib/imglib2#273
Ellen TA Dobson
@etadobson
:thumbsup:
Jan Eglinger
@imagejan
:+1: that leads me to another question: is there something like an IterableRegion that permits localization of each iterated pixel? I.e. an Iterable<RealLocalizable> instead of Iterable<Void>, but still iterating only true pixels of the mask?
I guess there is: PositionableIterableRegion; but is there a utility function similar to Regions.iterable(RAI<B>) to retrieve those?
Curtis Rueden
@ctrueden
@imagejan The javadoc for that class says "We put interfaces RandomAccessibleInterval<BooleanType>, IterableRegion<BooleanType>, PositionableIterableRegion<BooleanType> into this sequence such that the Regions methods that "add capabilities" (being iterable, positionable) can have appropriate result types."
This suggests to me that @tpietzsch intended for there to be more Regions methods exposing it. But I don't see them.
In this case though, we just want a LocalizableIterableRegion. Not Positionable. Right? I think the latter is more complex.
Jan Eglinger
@imagejan
Oh, right, we'd want a LocalizableIterableRegion, sure.
Curtis Rueden
@ctrueden
Hmm. I think we're conflating iterables vs iterator/accessors here.
IterableRegion does have a localizingCursor method.
That is: the IterableRegion (similar to RAI and II) does not have a position. But it can give you accessors that do.
Jan Eglinger
@imagejan
Oh, I see. I guess I wasn't getting the concept. Thanks a lot!
Curtis Rueden
@ctrueden
Note that IterableRegion<T extends BooleanType<T>> extends IterableInterval<Void>. So... the cursor() method returns Cursor<Void>. So that you can iterate the positions, but you can't access sample values because there is nothing to access (the backing region is just true at those spots, always).
Jan Eglinger
@imagejan
Yeah, I'd need a Sampler otherwise, right?
Curtis Rueden
@ctrueden
As in: you want to bind a mask to an image and iterate the samples that are not masked out. Right? While knowing their positions?
Let's see...
Right now, you do:
Jan Eglinger
@imagejan
Actually, in my case, having the positions would be enough, no need to sample the values. So I'm fine with localizingCursor I guess.
Curtis Rueden
@ctrueden
RealMaskRealInterval myMask = ...;
RandomAccessible<T> myImage = ...;
IterableInterval<T> myMaskedImage = Regions.sample(myMask, myImage);
Cursor<T> c = myMaskedImage.localizingCursor();
long[] pos = new long[c.numDimensions()];
while (c.hasNext()) {
  T value = c.next();
  c.localize(pos);
  // and now we do something with the position and sample value
}