Code Monkey home page Code Monkey logo

morpholibj's Introduction

DOI

MorphoLibJ logo MorphoLibJ

MorphoLibJ is a collection of mathematical morphology methods and plugins for ImageJ, created at the INRA-IJPB Modeling and Digital Imaging lab.

The library implements several functionalities that were missing in the ImageJ software, and that were not or only partially covered by other plugins. Namely:

  • Morphological filtering for 2D/3D and binary or grey level images: erosion & dilation, closing & opening, morphological gradient & Laplacian, top-hat...

  • Morphological reconstruction, for 2D/3D and binary or grey level images, allowing fast detection of regional or extended extrema, removing of borders, hole filling, attribute filtering...

  • Watershed segmentation + GUI, making it possible to segment 2D/3D images of (for instance) cell tissues.

  • 2D/3D measurements: photometric (intensity) and morphometric measurements such as volume, surface area, inertia ellipse/ellipsoid...

  • Binary / label images utilities for removing or keeping largest connected component, perform size opening, fill holes, kill borders...

Installation

  • In ImageJ, download the latest released jar into the plugins folder.

  • In Fiji, you just need to add the IJPB-plugins update site:

  1. Select Help > Update... from the Fiji menu to start the updater.
  1. Click on Manage update sites. This brings up a dialog where you can activate additional update sites.
  1. Activate the IJPB-plugins update site and close the dialog. Now you should see an additional jar file for download.
  1. Click Apply changes and restart Fiji.

Develop upon MorphoLibJ

If you develop plugins / applications based on MorphoLibJ, you can use add the following dependency in the maven project configuration file:

  <dependency>
    <groupId>fr.inra.ijpb</groupId>
    <artifactId>MorphoLibJ_</artifactId>
    <version>1.6.2</version>
  </dependency>

In case the last version of MorphoLibJ is not included in the maven repository, one workaround is to download the jar file of the last version, and to add it to the local maven repository. The following command may help (adapt version number as necessary):

mvn install:install-file -Dfile=MorphoLibJ_-1.6.2.jar -DgroupId=fr.inra.ijpb -DartifactId=MorphoLibJ_ -Dversion=1.6.2 -Dpackaging=jar -DgeneratePom=true

Documentation

A more detailed presentation of the library and its plugins is available on the ImageJ/Fiji Wiki.

We have as well a User Manual in pdf format.

The main source code directory is src/main/java/inra/ijpb.

You can browse the javadoc for more information about its API.

Citation

Please note that MorphoLibJ is based on a publication. If you use it successfully for your research please be so kind to cite our work:

The MorphoLibJ logo is available as PNG file in various formats.

morpholibj's People

Contributors

charierefiedler avatar ctrueden avatar dlegland avatar dmikushin avatar dscho avatar iarganda avatar imagejan avatar lacan avatar stelfrich 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

morpholibj's Issues

The menu of the MorphoLibJ is a little muddled

According to the reading sequence on the introduction (https://imagej.net/MorphoLibJ), I gradually understand the function of this great plug-in, though the introduction has a different sequence than the menu in the plug-in.

As a inconvenient result, e.g., I found that when I'm using the "Max inscribed circle" function, there's always only one particle to be analysed in my binary image, which in fact has two particles. I have read the introduction carefully once again. Then finally I realised that I should apply the "connected components labelling" in advance to label the binary image so that I could do further analysis. How could the "connected components labelling" to stay at the second place? This trick hide sooooo inconspicuous....

Thus I think the menu sequence of the plug-in is a little muddled, which are telling us to analysis the image at first. In addition, some function should be attributed into one sub-menu, e.g. Gray Scale Attribute Filtering. I really don't understand how important this function is that it is placed in the main menu of MorphoLibJ....In addition, the introduction is not very friendly. For instance, I notice that the section of "Binary and label image utilities" in the introduction is placed at the end. Thanks to its position that I almost didn't look at it....Introducing image processing order in alphabetical order is terrible.

However, all these inconvenience cannot stop the usage of this great plug-in for the people who really need it. So if there's really some difficulty to fix these, please ignore this thread. Many thanks!

Gray Scale Attribute Filtering 3D not working

Hello,

I used Gray Scale Attribute Filtering on 2D image without problem in Fiji (everything updated). I'd like to do the same on 3D images now.
But when I try to use Gray Scale Attribute Filtering 3D on a stack, I get the following message:

(Fiji Is Just) ImageJ 2.3.0/1.53f51; Java 1.8.0_202 [64-bit]; Mac OS X 10.16; 44MB of 8004MB (<1%)

java.lang.RuntimeException: Unknown connectivity: 4
at inra.ijpb.morphology.attrfilt.SizeOpening3DQueue.process(SizeOpening3DQueue.java:99)
at inra.ijpb.morphology.AttributeFiltering.volumeOpening(AttributeFiltering.java:131)
at inra.ijpb.plugins.GrayscaleAttributeFiltering3D.run(GrayscaleAttributeFiltering3D.java:202)
at ij.IJ.runUserPlugIn(IJ.java:241)
at ij.IJ.runPlugIn(IJ.java:204)
at ij.Executer.runCommand(Executer.java:150)
at ij.Executer.run(Executer.java:68)
at java.lang.Thread.run(Thread.java:748)

I get the same results if I change the connectivity value. Could you help me?
Thank you

BoundingBox

@dlegland

Dear David,

Could I somehow convince you to add the option for a bounding box to the 2D and 3D shape measurements?

  • BoundingBox
    Maybe with naming scheme like this:
    BoundingBox.Min.X
    BoundingBox.Min.Y
    BoundingBox.Min.Z
    BoundingBox.Max.X
    BoundingBox.Max.Y
    BoundingBox.Max.Z

I assume that during the shape analysis you obtain those numbers anyway so it should be very cheap (or even for free) to add them. For me however it would be a huge benefit, because my downstream analysis would know where in 3D space the segmented objects are living (and this information is quite expensive to get, because one almost has to run a connected component analysis again).

Bug: Geodesic diameter is not exported to ROI manager in macro

Hi,

I have been creating a macro to analyze the intensity along regions of interest, in which I use "skeletonize" + "geodesic diameter" to select the longest path through the ROI (and then add this geodesic diameter to the ROI manager).
This works well manually, but when I try to run it in my macro, the geodesic diameter (GD) selection is not added to the ROI manager...

I used the macro recorder function in FIJI to make sure that my calling of the geodesic diameter plugin is correct (as below, where "export" should ensure that the GD is added to the ROI manager):

run("Geodesic Diameter", "label=[MaskDuplicate] distances=[Chessknight (5,7,11)] image=[MaskDuplicate] export");

In the macro, I do get the GD results table (with identical results to the manual run) - but the GD selection does not appear in the ROI manager. Thus, I cannot do my intensity analysis using the macro.

I have already checked that both FIJI and the plugins are updated to the latest versions, so this should not be the cause.

Can this issue be fixed, or can I otherwise circumvent the issue? Thanks in advance!

theta angle

Hi @dlegland ,
thanks for the codes.
I want to measure 3D ellipsoid particle orientation in 3D space. To test your code, I made around 2000 ellipsoids digitally which are randomly distributed in space. I sorted their theta angles (-90-90) with a bin size of 5 degrees. It seems most of the particles have a -45 and 45-degree theta angle. Theoretical calculation suggests that particles that around theta=0 are the most, as reported in this figure. I also tried real randomly packed particles which are obtained from X-ray CT, the results are similar.

I am wondering if these results have something to do with these lines in your codes? thanks

// extract |cos(theta)|
Matrix mat = svd.getU();
double tmp = hypot(mat.get(0, 0), mat.get(1, 0));
double phi, theta, psi;

        // avoid dividing by 0
        if (tmp > 16 * Double.MIN_VALUE) 
        {
            // normal case: theta <> 0
            psi     = atan2( mat.get(2, 1), mat.get(2, 2));
            theta   = atan2(-mat.get(2, 0), tmp);
            phi     = atan2( mat.get(1, 0), mat.get(0, 0));
        }
        else 
        {
            // theta is around 0 
            psi     = atan2(-mat.get(1, 2), mat.get(1,1));
            theta   = atan2(-mat.get(2, 0), tmp);
            phi     = 0;
        }

image

Marker-Controlled watershed "Binary markers" inconsistency between ImageJ and Java class.

I'm using Java to generate a gradient image, and a marker image. I've confirmed that the MorphoLibJ "marker-controlled watershed" plugin works as expected on these images using the following.

Input - gradient image
Marker - marker image
Mask - None
Binary markers - checked
Calculate dams - checked
Use diagonal connectivity - checked

It fails if "Binary markers" is not checked. However I see no constructor which accepts this as an argument in the class.

Using these same two images and calling:

ImageProcessor res = Watershed.computeWatershed(ip_thumb, ip_markers , 8, true); returns no segmentations and I'm not sure why.

Additionally, the manual indicates that markers must be labelled but nowhere indicates what a "labelled" marker is. For my marker image I'm using an 8-bit grayscale image that is all zeros except for the marker seed pixels which are set to 255.

Fill holes in labels

@dlegland

For one of our projects it would be very useful to have a "Fill holes in labels" option.
Would that be within scope to add?

Bug in Classic Watershed?

Hello,

When we put an image as a "Mask" that is not binary to "Classic Watershed", it still does something (which we do not understand). Should it work or should it maybe better throw and error if the Mask image is not binary?

Dilate and shrink labels

@dlegland @iarganda

I am 100% sure I asked this before but I cannot find it.

  1. Can one dilate or shrink labels in a label mask image by a defined amount of pixels using MLJ?
  2. What is the point of the Expand Labels command? I am getting a larger image with the labels more spread out. Looks interesting but what is the use case?

Wrong window title

Hello,

When running "Analyze Regions'" the window title is "Particle Analysis 3D":

image

Probably should be changed. Thank you.

measurements should contain an additional column with image calibration unit

follwoing suggestion from @tischi, to facilitate interpretation of measurements, it is necessary to know whether numeric values are returned in "pixel" units or in calibrated units (mm, µm...).
One simple solution to help the user would be to add an extra column to measurements table, containing the unit name used for measurements, or "pixel"/"voxel" if image was not calibrated (or if measurement did not take into account spatial calibration).

see https://forum.image.sc/t/morpholibj-measurements-output/62614

In macro going through slices, Geodesic Distance Map (2D) stops after the first slice

Hello MorphoLibJ developers,

I'm trying to generate Geodesic Distance Map (GDM) for a series of of 2D masks stored in a 3D stack, together with a marker stack of the same dimensions. What I noticed is that if I perform anything with the GDM output image before closing it, the for loop would just exit after the first slice. Here is my simple IJ macro script:

mask = "motion_compen_mask.tif";
marker = "Mask3d.tif";
selectWindow(mask);
print(nSlices);

for (i=0; i<nSlices; i++) {
  print(i);
  selectWindow(mask);
  setSlice(i+1);
  selectWindow(marker);
  setSlice(i+1);
  run("Geodesic Distance Map", "marker="+marker+" mask="+mask+" distances=[Chessknight (5,7,11)] output=[32 bits] 
  normalize");
  gdwindow = getTitle();
// If I do anything here before closing the GDM output window, the for loop would just exit after i=0
// For example, a simple duplication of the GDM output would make it exit after i=0:
  run("Duplicate...", "title=dup");
// If you comment out the above line, the for loop would run through
  print("here");
  close(gdwindow);
// If close() is not called here, the for loop would also exit after i=0, no matter if anything was done to gdwindow
}
print("loop exited");

Could this a be a bug or by design? I'm attaching a ZIP file with the two TIFF files used in this script. Thank you very much!

--lin

tiffs.zip

MorphoLibJ in ImageJ.JS

Hi, just let you know that we (@imjoy-team) have integrated MorphoLibJ plugin into ImageJ.JS (https://ij.imjoy.io/). I tried it briefly, at least the morphological segmentation tool works. Could you please do a full evaluation to see if everything works? And potentially add a link to the README for users to try? Thanks!

Nonsensical while loop (h < hMin), while h is already set to hMin

This report concerns specifically applyWithMask function of WatershedTransform2D.java, but may also be similar for other locations/transforms.

Here h is already set to hMin: https://github.com/ijpb/MorphoLibJ/blob/master/src/main/java/inra/ijpb/watershed/WatershedTransform2D.java#L283

However, the following while loop checks for (h < hMin), and hence will never be entered:

        // find corresponding pixel index
        int currentIndex = 0;
        while( h < hMin )
        {
        	h = pixelList.get( currentIndex ).getValue();
        	currentIndex++;
        }

Perhaps, there should be:

// initial height
double h = 0;

int currentIndex = 0;
for ( ; currentIndex < pixelList.size(); currentIndex++)
{
    h = pixelList[currentIndex];
    if (h >= hMin) break;
}

?

Watershed2D result is sensitive to the order of neighbors enumeration?

Hello,

I would like to offer a confusing observation. During my testing of 2D watershed I came across the case being sensitive to the order of accessing the pixel neighbors. For example, if we change 8D pattern definition from:

		neighbors.add( new Cursor2D( x-1, y-1 ) );
		neighbors.add( new Cursor2D( x-1, y   ) );
		neighbors.add( new Cursor2D( x-1, y+1 ) );
		neighbors.add( new Cursor2D(   x, y-1 ) );
		neighbors.add( new Cursor2D(   x, y+1 ) );
		neighbors.add( new Cursor2D( x+1, y-1 ) );
		neighbors.add( new Cursor2D( x+1, y   ) );
		neighbors.add( new Cursor2D( x+1, y+1 ) );

to

		neighbors.add( new Cursor2D(   x, y+1 ) );
		neighbors.add( new Cursor2D( x+1, y-1 ) );
		neighbors.add( new Cursor2D( x+1, y   ) );
		neighbors.add( new Cursor2D( x+1, y+1 ) );
		neighbors.add( new Cursor2D( x-1, y-1 ) );
		neighbors.add( new Cursor2D( x-1, y   ) );
		neighbors.add( new Cursor2D( x-1, y+1 ) );
		neighbors.add( new Cursor2D(   x, y-1 ) );

the resulting 2048x2048 image will have one previously zero pixel as non-zero, and the rest - equal to the original version. Weird?

From the program point of view, such sensitivity feels logical, as long as there is a break out of the neighbors enumeration loop:

	    		// read neighbor coordinates	    		
	    		neigh.setCursor( p );
	    		for( Cursor2D c : neigh.getNeighbors() )			       		
	    		{       			
	    			int u = c.getX();
	    			int v = c.getY();

	    			// initialize queue with neighbors at level h of current basins or watersheds
	    			if ( u >= 0 && u < size1 && v >= 0 && v < size2 
	    					&& tabLabels[ u ][ v ] >= WSHED 
	    					&& maskImage.getf( u, v ) > 0 ) 
	    				//&&  ( tabLabels[ u ][ v ] > 0 || tabLabels[ u ][ v ] == WSHED ) )
	    				{
	    					fifo.addLast( p );
	    					tabLabels[ i ][ j ] = INQUEUE;
	    					break;
	    				}	    			
	    		}// end for	    	

So, if neighbors are reordered, another neighbor may be picked up and change the result.

I'm wondering if this is a program bug in a sense that it breaks the symmetric nature of the watershed algorithm? Or is the algorithm itself non-symmetric?

Full patch to reproduce: benchmark.patch.txt

Feature Request: Keep/Remove Largest Region in 2D for stacks

I often deal with stacks of time series data, where I am segmenting and cleaning segmentations for each frame sequentially. If I would like to keep or remove a largest region for each slice, MorphoLibJ automatically does the labeling in 3D. It would be nice if one could choose to do this in 2D slice-by-slice for a timeseries. That would save a lot of work having to go through the stack and pull out individual frames to do this. Thanks!

Image names ending with .tif

@dlegland
I have an issue macro recording the analysis of images whose name ends with .tif
Could it be that you are somehow removing the ending when presenting the choices for which images to select?

Issues while Combining Segments in Morphological Segmentation

I have been using Morphological Segmentation to segment 3D TIFF image stacks, and I have encountered several issues. For context, I am running this on FIJI (ImageJ 1.51w, Java 1.8_66[64bit]).

  1. LABELS WILL NOT MERGE: sometimes I use the marker tool to select over 10 labels and hit "merge", but nothing will happen. If I clear the selected markers and try merging fewer labels, then it seems to work. This usually happens after I have already merged dozens of labels previously.

  2. PLUGIN GETS STUCK ON ONE IMAGE: sometimes the plugin gets "stuck" on the image I am currently looking at, and that image will be somewhat transparently overlaid on top of any other images when I am scrolling through the image set loaded into the plugin. Some or most of the interface buttons are greyed out. If I hit "run" and then "stop", then the issue seemed to disappear.

  3. PLUGIN COMPLETELY CRASHES: at random, the original images and the overlaid catchment basins seemed to become combined, so I cannot toggle off the overlaid basins. If I do try to toggle the basins, instead a brighter version of the basins starts toggling on and off, and these newer basins are overlaid overtop the combined TIFF image/old basins. All the interface buttons are greyed out and I have to close and restart the plugin.

Region Adjacency Graph giving no output...

Hi, I would like to use the Region Adjacency Graph Plugin, which says works on labelled images. However I fail to get any data out of it.

If I run this imageJ macro code

run("Blobs (25K)");
setAutoThreshold("Default");
run("Analyze Particles...", "  show=Masks");
run("Connected Components Labeling", "connectivity=4 type=[8 bits]");
run("Region Adjacency Graph", "  image=blobs.gif");

The results table is empty

Label-label relation module for "Tracking" and "Colocalisation"

@manerotoni @dlegland

I had an idea how to, with minimal effort, add more functionality to MLJ that could be first steps towards tracking and colocalisation analysis.
Essentially the idea is to have one module where the input are two label mask images (labelsA, labelsB). The output would be a results table with relational information such as overlap and closeness of the difference labels in the two images.

For example things like this:

labelA labelB_IndexClosestCentroid labelB_maximalOverlap numPixelsOverlap
1 4 4 1024
2 3 10 501
3 5 5 10

What do you think? Should we try to add something like this?

Max number of labels reached

Hello, and thank you for a very impressive plugin!
I'm running into an error when trying to segment an image of cracks:

Exception in thread "Thread-19" java.lang.RuntimeException: Max number of label reached (8388608)

I suspect it's because I'm running it on an edge dataset which has background noise in it. Would a common number of labels be much lower?

add centroid coordinates to measurements

Would it be possible to add centroid coordinates to all results tables in "Analyze"?

  1. I think it simply is a cheap and good information to have.
  2. I think it is important, because, in practice, this often is the way of finding a specific object back in an image, given a saved results table.
  3. In particular, having the coordinates, one could add a new plugin "Overlay results", where the user could select one measurement column from a results table and the plugin would show the numbers as overlays at the object centroid coordinates. A functionality that is very(!) good to have! (In CellProfiler, e.g., it is called: DisplayNumbersOnImage).

DilateLabels on 32-bit label images doesn't work

Hey @dlegland ,

I just saw the announcement / related issue #41 about the new dilateLabels function and gave it a try. While testing, I discovered that it doesn't do anything when retrieving a 32-bit float image. Is this intentional? If so, could the user be warned that this image type is not supported?

You can use this macro to reproduce the issue:

run("Blobs (25K)");
setAutoThreshold("Default");
setOption("BlackBackground", true);
run("Convert to Mask");

// CCA
run("Analyze Particles...", "  show=[Count Masks]");
run("glasbey on dark");

// dilate labels in 16-bit image
run("Dilate Labels", "radius=5");

// apply to 8-bit image
selectWindow("Count Masks of blobs.gif");
setOption("ScaleConversions", true);
run("8-bit");
run("Dilate Labels", "radius=5");

// apply to 32-bit image
selectWindow("Count Masks of blobs.gif");
run("32-bit");
run("Dilate Labels", "radius=5");

Best,
Robert

Feature request total number of pixels in 3D label analyze

Hello,
I wonder if in Analyze > Analyze Regions 3D and Analyze Regions you could add the number of pixels of the objects (without scaling).

The reason is that to find the size to filter objects it requires values in pixel units, and this is not easy to get when the size is given in physical volume.

Thanks

Antonio

Measure summary statistics of child objects

@dlegland @iarganda @haesleinhuepf @ssgpers

Again, I am quite sure I asked it before but could not find it back.

It is essentially about whether we have CellProfiler's RelateObjects module in Java?
RelateObject measures per parent summary statistics for child objects (e.g. vesicles) measurements (e.g cells).

I think technically one would measure the (median?) intensity of the child label mask objects in the parent label masks image to determine which parent they belong to. Then one can loop through the child table and compute averages of all measured features, per parent object (think tapply in R).

Do we have a function like this already?

I think the API could be:

ResultsTable averageChildPerParentMeasurements = computeChildObjectsMeasurements(  ResultsTable childrenMeasurements, ImagePlus childrenLabelMask, ImagePlus parentLabelMask);

The nice thing about this is that one could (should) also add a UI function for this, to be used in daily life and in courses.

Related to that, is there already code to combine two resultsTables based on the labelIndex?

@haesleinhuepf, how do you report back object measurements? Also using a ResultsTable? If so, maybe we can join forces...

Strange behaviour of ResultsTables

Hello @iarganda @dlegland @imagejan

I am trying to read from MLJ ResultsTables using Java API and I get weird errors, having to do with the fact that the Label ColumnIndex is -1. Basically I don't manage to read the correct numbers from the table using Java. Interestingly, when I save the table once to disc and read it again it works.

I realized the following:
image

The table on the right comes directly from MLJ and it is missing the RowNumberColumn (without heading), which all the other tables have. I suspect that maybe this causes the errors. Could you maybe have a look at your code to see what the difference is to, e.g. AnalyzeParticles? My current feeling is that the MLJ ResultsTables are in some way having a defect...at least, as said, I don't manage the properly read the numbers from them using the Java API.

croplabel() , set pixel/voxel size and origin of the cropped image

Dear @MorphoLibJ team,

Would it be possible to add the pixel/voxel size and the origin of the cropped image (maybe via Calibration ? )

public static final ImagePlus cropLabel(ImagePlus imagePlus, int label, int border)

This would ease a lot the use of this cropped image!

One workaround is to get the BoudingBox via "Analyze Regions 3D", but I'm a bit afraid by rounding issues ...

Cheers,

R

Broken inra.ijpb.morphology.ReconstructionTest

Seen in 6223189 by @dlegland :

Tests run: 7, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec <<< FAILURE! - in inra.ijpb.morphology.ReconstructionTest
testReconstructByDilation_RGB_C4(inra.ijpb.morphology.ReconstructionTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.AssertionError: expected:<0> but was:<-16777216>
	at inra.ijpb.morphology.ReconstructionTest.testReconstructByDilation_RGB_C4(ReconstructionTest.java:217)

Morphological Segmentation crashes if stack too big?

Hello,

I am currently using your plugin to label 2D videos of cells and depending on the computer I use, the morphological segmentation command may freeze Fiji.

For instance I tried to open this stack :
filteredimage

And here is what I get, when it crashes Fiji doesn't respond anymore and the morphological segmentation window is always blank with the 3200% tag :
crash

However if I take a substack, the plugin works perfectly fine and it also does if I pick an even better computer.

So I guess it is related to the computer resources. But still I am surprised that it crashes for a 6Mo stack with 70 slices on a computer with 83.4GHz CPU,48GB RAM,4GB AMD Radeon HD7900 whereas it doesn't crash on a computer with 20*3GHz CPU,64GB RAM, 4GB AMDFirePro W5100 even if i copy the stack 100 times so as to try the same command on a 7000 slices stack.

I would be very interested to have your opinion on the subject and to know if there is any solution other than sticking to the better computer.

Thanks a lot for your work, so far the library is great anyway!

Imagecalculator bugged with 32 bits images

Hello,

The ImageCalculator.combineImages() gave me wrong results for 32bits images (works fine with 8 or 16 bits images), for ex. a null image if i multiply a 32bit image with itself.

Thank you for your help,
Rémy

linking to labels in the segmented image

Dear David,

Thankyou and your team for making such a wonderful and useful plugin. Please forgive me if i am asking this question at the wrong place. I am new to GitHub.

My workflow involves morphological image segmentation of budding yeast using your plugin. After that, I use analyze regions to get circularity values. Is there way to click on a particular label in the morphometry report that then redirects to corresponding label in the segmented-image. Since my image has hundreds of cells, its sometime difficult to find a particular label just by eye.

Thanks for your time

Bug in Intensity Measure 2D/3D - Max value in 32bit images

Hi,

When I run Intensity Measure 2D/3D on 32 bit image that has negative values (output of FeatureJ Laplacian) with corresponding label image. The Max value is not calculated correctly for cases in which the Max is negative. a low value 4.900e-324 is given instead.

Thanks
Ofra

Question about "Extended Maxima"

@dlegland triggered by the discussion on the forum (https://forum.image.sc/t/call4help-3d-dense-nuclei-segmentation-challenge/23462/21) I had a look at MLJ.

I am confused about this function:

public final static ImageStack extendedMaxima(ImageStack image,

And this (corresponding?) menu entry: Plugins › MorphoLibJ › Minima and Maxima › Extended Min & Max 3D

Reading the name ("Extended Min & Max 3D") of the menu entry I would expect that it takes all regional maxima and extends them, including all connected pixels with v > (v_regional_max - dynamic).

However, what it seems to do is to (also?) filter out some maxima, i.e. I am getting less maxima using the "Extended" vs. the "Regional" algorithm. Is that correct? If so, according to which criteria does the "Extended" version filter maxima?

Issues while Saving Results from Morphological Segmentation

  1. PLUGIN EXPORTS ONLY 1 IMAGE REPEATEDLY: after finishing the segmentation and selecting the "basins" images, I would hit "create result" and save the basins image set. When I opened the basins image set later, the basins image set would just be 1 image repeated for the entire image set.

  2. PLUGIN EXPORTS MOST IMAGES, BUT CREATES DUPLICATES: similar to previous issue, I will export the basins image set and open the image set later to discover there was an issue that did not show up when viewing the images in the plugin. This time, nearly all images in the image set were exported properly but 1 or 2 images are actually duplicates of the previous image in the image set.

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.