From c3a596ec531de16632e9d6ebd962e4b3695b7fa7 Mon Sep 17 00:00:00 2001 From: mp007 Date: Wed, 18 Dec 2019 02:09:49 +0100 Subject: [PATCH 01/24] Added implementation for adding segmentation source while fetching segmentation. Also implemented query of segmentation source associated with any segment hypothesis --- .../indago/data/segmentation/LabelData.java | 13 +++++++++ .../data/segmentation/LabelingBuilder.java | 28 +++++++++++++++---- .../data/segmentation/LabelingPlus.java | 3 +- .../data/segmentation/LabelingSegment.java | 1 + .../data/segmentation/XmlIoLabelingPlus.java | 4 +-- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/LabelData.java b/src/main/java/com/indago/data/segmentation/LabelData.java index 8551c85..d092f97 100644 --- a/src/main/java/com/indago/data/segmentation/LabelData.java +++ b/src/main/java/com/indago/data/segmentation/LabelData.java @@ -24,6 +24,8 @@ public class LabelData { private final ArrayList< Integer > fragmentIndices; + private String segmentSource; + LabelData() { this( createId() ); } @@ -34,6 +36,7 @@ public class LabelData { segment = null; labelingTreeNode = null; fragmentIndices = new ArrayList<>(); + segmentSource = null; } void setSegment( final LabelingSegment segment ) { @@ -70,4 +73,14 @@ private static synchronized void useId( final int id ) { if ( nextId < id + 1 ) nextId = id + 1; } + + public void setSegmentSource( String source ) { + this.segmentSource = source; + + } + + public String getSegmentSource() { + return segmentSource; + } + } diff --git a/src/main/java/com/indago/data/segmentation/LabelingBuilder.java b/src/main/java/com/indago/data/segmentation/LabelingBuilder.java index df1663f..b7e91df 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingBuilder.java +++ b/src/main/java/com/indago/data/segmentation/LabelingBuilder.java @@ -30,7 +30,22 @@ public LabelingBuilder( final LabelingPlus labelingPlus ) { super( labelingPlus ); } - public synchronized < T extends TreeNode< T > & Iterable< ? extends Localizable > > LabelingForest buildLabelingForest( final Forest< T > forest ) { + public synchronized < T extends TreeNode< T > & Iterable< ? extends Localizable > > LabelingForest buildLabelingForest( + final Forest< T > forest ) { + String segmentationSource = ""; + return buildingLabelingForestWithSegmentationSource( forest, segmentationSource ); + } + + private < T extends TreeNode< T > & Iterable< ? extends Localizable > > LabelingForest buildingLabelingForestWithSegmentationSource( + final Forest< T > forest, + String segmentationSource ) { + + return buildingLabelingForestWithSegmentationSource( forest, segmentationSource ); + } + + public synchronized < T extends TreeNode< T > & Iterable< ? extends Localizable > > LabelingForest buildLabelingForest( + final Forest< T > forest, + String segmentationSource ) { // invalidate fragments and segments because we will add new labels fragments = null; segments = null; @@ -61,7 +76,7 @@ public LabelingBuilder( final LabelingPlus labelingPlus ) { // build a LabelingForest using the structure of the original forest final HashSet< LabelingTreeNode > roots = new HashSet<>(); for ( final T node : forest.roots() ) - roots.add( buildLabelingTreeNodeFor( node, nodeToLabel ) ); + roots.add( buildLabelingTreeNodeFor( node, nodeToLabel, segmentationSource ) ); // add new forest to list of forests ever added final LabelingForest labelingForest = new LabelingForest( roots ); @@ -70,12 +85,15 @@ public LabelingBuilder( final LabelingPlus labelingPlus ) { return labelingForest; } - private < T extends TreeNode< T > > LabelingTreeNode buildLabelingTreeNodeFor( final T node, final HashMap< T, LabelData > nodeToLabel ) { + private < T extends TreeNode< T > > LabelingTreeNode buildLabelingTreeNodeFor( + final T node, + final HashMap< T, LabelData > nodeToLabel, + final String segmentationSource ) { final LabelData label = nodeToLabel.get( node ); - createSegmentAndTreeNode( label ); + createSegmentAndTreeNode( label, segmentationSource ); final LabelingTreeNode ltn = label.getLabelingTreeNode(); for ( final T c : node.getChildren() ) - ltn.addChild( buildLabelingTreeNodeFor( c, nodeToLabel ) ); + ltn.addChild( buildLabelingTreeNodeFor( c, nodeToLabel, segmentationSource ) ); return ltn; } } diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index 3b736cf..dd00a06 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -99,11 +99,12 @@ public synchronized ArrayList< LabelingSegment > getSegments() { return segments; } - void createSegmentAndTreeNode( final LabelData label ) + void createSegmentAndTreeNode( final LabelData label, final String source ) { final LabelRegion< LabelData > labelRegion = labelRegions.getLabelRegion( label ); final LabelingSegment segment = new LabelingSegment( labelRegion ); label.setSegment( segment ); + label.setSegmentSource( source ); final LabelingTreeNode ltn = new LabelingTreeNode( segment, label ); label.setLabelingTreeNode( ltn ); } diff --git a/src/main/java/com/indago/data/segmentation/LabelingSegment.java b/src/main/java/com/indago/data/segmentation/LabelingSegment.java index d011de6..a87ca58 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingSegment.java +++ b/src/main/java/com/indago/data/segmentation/LabelingSegment.java @@ -84,4 +84,5 @@ public String toString() { } return ret; } + } diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 2ff07a4..5a3d4d0 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -133,12 +133,12 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling final int id = XmlHelpers.getInt( node, LABELINGTREE_NODE_ID_TAG ); final LabelData label = idToLabelMap.get( id ); if ( label.getLabelingTreeNode() == null ) - labelingPlus.createSegmentAndTreeNode( label ); + labelingPlus.createSegmentAndTreeNode( label, "" ); final LabelingTreeNode ltn = label.getLabelingTreeNode(); for ( final int childId : XmlHelpers.getIntArray( node, LABELINGTREE_NODE_CHILDREN_TAG ) ) { final LabelData childLabel = idToLabelMap.get( childId ); if ( childLabel.getLabelingTreeNode() == null ) - labelingPlus.createSegmentAndTreeNode( childLabel ); + labelingPlus.createSegmentAndTreeNode( childLabel, "" ); ltn.addChild( childLabel.getLabelingTreeNode() ); } } From d3283f33bdbeda1608c58a03a8a742badd92e602 Mon Sep 17 00:00:00 2001 From: mp007 Date: Wed, 25 Dec 2019 02:42:22 +0100 Subject: [PATCH 02/24] Get method for getting segmentation source from each label of a region --- .../java/com/indago/data/segmentation/LabelingSegment.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/indago/data/segmentation/LabelingSegment.java b/src/main/java/com/indago/data/segmentation/LabelingSegment.java index a87ca58..8ad8ab8 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingSegment.java +++ b/src/main/java/com/indago/data/segmentation/LabelingSegment.java @@ -85,4 +85,9 @@ public String toString() { return ret; } + public String getSegmentationSource() { + return region.getLabel().getSegmentSource(); + + } + } From ceafba75549f7a0d04698519817fb3d02c38ca98 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Wed, 24 Jun 2020 14:49:48 +0200 Subject: [PATCH 03/24] TEMPORARY SNAPSHOT dependency imglib2-roi-0.10.3-SNAPSHOT --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 3d5cfd9..2a95d69 100755 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,8 @@ deploy-to-scijava + + 0.10.3-SNAPSHOT com.indago @@ -50,6 +52,10 @@ net.imglib2 imglib2-ij + + net.imglib2 + imglib2-roi + nz.ac.waikato.cms.weka weka-dev From 3428e317cc4f0a33b8a3640055f3fc1acd5a2e75 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Wed, 24 Jun 2020 14:50:58 +0200 Subject: [PATCH 04/24] Replace use of deprecated LabelingMapping.SerialisationAccess --- .../data/segmentation/XmlIoLabelingPlus.java | 23 ++----------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 5a3d4d0..b8ae74e 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -123,7 +123,7 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling labelSets.add( null ); labelSets.set( i, labelSet ); } - new SegmentLabelingSerialisation( labelingPlus.getLabeling().getMapping() ).setLabelSets( labelSets ); + labelingPlus.getLabeling().getMapping().setLabelSets( labelSets ); final Element labelingtree = segmentLabeling.getChild( LABELINGTREE_TAG ); if ( labelingtree == null ) @@ -171,7 +171,7 @@ private Element toXml( final Element indexMap = new Element( MAPPING_TAG ); int i = 0; - for ( final Set< LabelData > labelSet : new SegmentLabelingSerialisation( mapping ).getLabelSets() ) { + for ( final Set< LabelData > labelSet : mapping.getLabelSets() ) { final Element entry = new Element( MAPPING_ENTRY_TAG ); entry.addContent( XmlHelpers.intElement( MAPPING_ENTRY_INDEX_TAG, i++ ) ); entry.addContent( labelIdsElement( MAPPING_ENTRY_LABELS_TAG, labelSet ) ); @@ -270,23 +270,4 @@ private static ArrayImg< IntType, IntArray > openIntImageFastButDangerous( final out.next().set( ( int ) in.next().get() ); return img; } - - private static class SegmentLabelingSerialisation - extends - LabelingMapping.SerialisationAccess< LabelData > { - - public SegmentLabelingSerialisation( final LabelingMapping< LabelData > mapping ) { - super( mapping ); - } - - @Override - protected List< Set< LabelData > > getLabelSets() { - return super.getLabelSets(); - } - - @Override - protected void setLabelSets( final List< Set< LabelData > > labelSets ) { - super.setLabelSets( labelSets ); - } - } } From 2a9af7a86cd45984ef996ae2e4885bd6a923929e Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Wed, 24 Jun 2020 14:51:24 +0200 Subject: [PATCH 05/24] TEMPORARY debug output --- .../data/segmentation/XmlIoLabelingPlus.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index b8ae74e..f822378 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -41,6 +41,8 @@ */ public class XmlIoLabelingPlus { + static int totalNumLabelSets = 0; + public static final String SEGMENTLABELING_TAG = "SegmentLabeling"; public static final String BASEPATH_TAG = "BasePath"; @@ -67,6 +69,7 @@ public LabelingPlus load( final String xmlFilename ) throws IOException { } public LabelingPlus load( final File xmlFile ) throws IOException { + final long t0 = System.currentTimeMillis(); final SAXBuilder sax = new SAXBuilder(); Document doc; try { @@ -75,6 +78,9 @@ public LabelingPlus load( final File xmlFile ) throws IOException { throw new IOException( e ); } final Element root = doc.getRootElement(); + final long t1 = System.currentTimeMillis(); + System.out.println( " sax.build(...) : " + (t1-t0) + " ms" ); + final File basePath = loadBasePath( root, xmlFile ); final File indexImgFile = XmlHelpers.loadPath( root, INDEXIMG_TAG, basePath ); @@ -84,7 +90,11 @@ public LabelingPlus load( final File xmlFile ) throws IOException { indexImgFile.getAbsolutePath(), new ArrayImgFactory<>( new IntType() ) ).get( 0 ).getImg(); final LabelingPlus labelingPlus = new LabelingPlus( indexImg ); + final long t2 = System.currentTimeMillis(); + System.out.println( " open IndexImg : " + (t2-t1) + " ms" ); fromXml( root, labelingPlus ); + final long t3 = System.currentTimeMillis(); + System.out.println( " fromXml : " + (t3-t2) + " ms" ); return labelingPlus; } @@ -104,8 +114,11 @@ public void save( final LabelingPlus labelingData, final String xmlFilename ) private void fromXml( final Element segmentLabeling, final LabelingPlus labelingPlus ) throws IOException { + final long t0 = System.currentTimeMillis(); final TIntObjectMap< LabelData > idToLabelMap = getIdToLabelMap( segmentLabeling, LABELS_TAG ); + final long t1 = System.currentTimeMillis(); + System.out.println( " getIdToLabelMap : " + (t1-t0) + " ms" ); final Element mapping = segmentLabeling.getChild( MAPPING_TAG ); if ( mapping == null ) @@ -123,7 +136,13 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling labelSets.add( null ); labelSets.set( i, labelSet ); } + final long t2 = System.currentTimeMillis(); + System.out.println( " build labelSets : " + (t2-t1) + " ms" ); + totalNumLabelSets += labelSets.size(); + System.out.println( "totalNumLabelSets = " + totalNumLabelSets ); labelingPlus.getLabeling().getMapping().setLabelSets( labelSets ); + final long t3 = System.currentTimeMillis(); + System.out.println( " setLabelSets : " + (t3-t2) + " ms" ); final Element labelingtree = segmentLabeling.getChild( LABELINGTREE_TAG ); if ( labelingtree == null ) @@ -150,6 +169,8 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling roots.add( idToLabelMap.get( id ).getLabelingTreeNode() ); labelingPlus.labelingForests.add( new LabelingForest( roots ) ); } + final long t4 = System.currentTimeMillis(); + System.out.println( " labelingForests : " + (t4-t3) + " ms" ); } private Element toXml( From cbd14eae63833a4f143ef099991d05bc7bae45c5 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Wed, 24 Jun 2020 16:59:15 +0200 Subject: [PATCH 06/24] Apparent fix for SCIFIO throwing error messages --- src/main/java/com/indago/io/ImageSaver.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/indago/io/ImageSaver.java b/src/main/java/com/indago/io/ImageSaver.java index b46dd9d..f6bd780 100644 --- a/src/main/java/com/indago/io/ImageSaver.java +++ b/src/main/java/com/indago/io/ImageSaver.java @@ -9,6 +9,7 @@ import net.imglib2.exception.IncompatibleTypeException; import net.imglib2.img.ImgView; import net.imglib2.type.numeric.RealType; +import org.scijava.Context; /** * Since loading and saving is still a hard thing to do right and the way to do @@ -39,7 +40,7 @@ public static < T extends RealType< T > > void saveAsTiff( // IO.saveImg( filename, img ); try { - new ImgSaver().saveImg( filename, ImgView.wrap( rai, null ) ); + new ImgSaver( new Context() ).saveImg( filename, ImgView.wrap( rai, null ) ); } catch ( ImgIOException | IncompatibleTypeException e ) { e.printStackTrace(); } From 7ae161a007dfad755ec094b61b7634d58c235c6b Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Wed, 24 Jun 2020 17:00:17 +0200 Subject: [PATCH 07/24] TEMPORARY debug output --- .../java/com/indago/data/segmentation/XmlIoLabelingPlus.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index f822378..577b19b 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -118,7 +118,6 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling final TIntObjectMap< LabelData > idToLabelMap = getIdToLabelMap( segmentLabeling, LABELS_TAG ); final long t1 = System.currentTimeMillis(); - System.out.println( " getIdToLabelMap : " + (t1-t0) + " ms" ); final Element mapping = segmentLabeling.getChild( MAPPING_TAG ); if ( mapping == null ) @@ -137,9 +136,9 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling labelSets.set( i, labelSet ); } final long t2 = System.currentTimeMillis(); - System.out.println( " build labelSets : " + (t2-t1) + " ms" ); + System.out.println( " build labelSets : " + (t2-t0) + " ms" ); totalNumLabelSets += labelSets.size(); - System.out.println( "totalNumLabelSets = " + totalNumLabelSets ); + System.out.println( " totalNumLabelSets = " + totalNumLabelSets ); labelingPlus.getLabeling().getMapping().setLabelSets( labelSets ); final long t3 = System.currentTimeMillis(); System.out.println( " setLabelSets : " + (t3-t2) + " ms" ); From f07476b4ccd944df066e77a1def1717cd27e12d8 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Thu, 25 Jun 2020 13:31:03 +0200 Subject: [PATCH 08/24] XmlIoLabelingPlus: write LabelingMapping to separate file in binary format --- .../data/segmentation/XmlIoLabelingPlus.java | 144 +++++++++++++++--- 1 file changed, 123 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 577b19b..11fff7b 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -1,11 +1,17 @@ package com.indago.data.segmentation; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import org.jdom2.Document; @@ -44,6 +50,8 @@ public class XmlIoLabelingPlus { static int totalNumLabelSets = 0; public static final String SEGMENTLABELING_TAG = "SegmentLabeling"; + public static final String SEGMENTLABELING_VERSION_ATTRIBUTE_NAME = "version"; + public static final String SEGMENTLABELING_VERSION_ATTRIBUTE_CURRENT = "0.2"; public static final String BASEPATH_TAG = "BasePath"; public static final String INDEXIMG_TAG = "IndexImgFile"; @@ -51,6 +59,8 @@ public class XmlIoLabelingPlus { public static final String LABELS_TAG = "Labels"; public static final String MAPPING_TAG = "Mapping"; + public static final String MAPPING_BINARY_ATTRIBUTE_NAME = "binary"; + public static final String LABELMAPFILE_TAG = "MappingFile"; public static final String MAPPING_ENTRY_TAG = "MappingEntry"; public static final String MAPPING_ENTRY_INDEX_TAG = "Index"; public static final String MAPPING_ENTRY_LABELS_TAG = "Labels"; @@ -92,7 +102,7 @@ public LabelingPlus load( final File xmlFile ) throws IOException { final LabelingPlus labelingPlus = new LabelingPlus( indexImg ); final long t2 = System.currentTimeMillis(); System.out.println( " open IndexImg : " + (t2-t1) + " ms" ); - fromXml( root, labelingPlus ); + fromXml( root, labelingPlus, basePath ); final long t3 = System.currentTimeMillis(); System.out.println( " fromXml : " + (t3-t2) + " ms" ); return labelingPlus; @@ -104,36 +114,53 @@ public void save( final LabelingPlus labelingData, final String xmlFilename ) final String indexImgFilename = xmlFilename.substring( 0, xmlFilename.length() - ".xml".length() ) + ".tif"; final File indexImgFile = new File( indexImgFilename ); - final Document doc = new Document( toXml( labelingData, xmlFileDirectory, indexImgFile ) ); + final String labelingMappingFilename = + xmlFilename.substring( 0, xmlFilename.length() - ".xml".length() ) + ".labelmap"; + final File labelingMappingFile = new File( labelingMappingFilename ); + final Document doc = new Document( toXml( labelingData, xmlFileDirectory, indexImgFile, labelingMappingFile ) ); final XMLOutputter xout = new XMLOutputter( Format.getPrettyFormat() ); xout.output( doc, new FileOutputStream( xmlFilename ) ); + writeLabelingMapping( labelingData.getLabeling().getMapping(), labelingMappingFile ); + final Img< IntType > img = ImgView.wrap( labelingData.getLabeling().getIndexImg(), null ); ImageSaver.saveAsTiff( indexImgFilename, img ); } - private void fromXml( final Element segmentLabeling, final LabelingPlus labelingPlus ) + private void fromXml( final Element segmentLabeling, final LabelingPlus labelingPlus, final File basePath ) throws IOException { + final String version = segmentLabeling.getAttributeValue( SEGMENTLABELING_VERSION_ATTRIBUTE_NAME, "0" ); + final long t0 = System.currentTimeMillis(); final TIntObjectMap< LabelData > idToLabelMap = getIdToLabelMap( segmentLabeling, LABELS_TAG ); - final long t1 = System.currentTimeMillis(); final Element mapping = segmentLabeling.getChild( MAPPING_TAG ); if ( mapping == null ) throw new IOException( "no <" + MAPPING_TAG + "> element found." ); - final ArrayList< Set< LabelData > > labelSets = new ArrayList<>(); - for ( final Element entry : mapping.getChildren( MAPPING_ENTRY_TAG ) ) { - final int i = XmlHelpers.getInt( entry, MAPPING_ENTRY_INDEX_TAG ); - final int[] ids = XmlHelpers.getIntArray( entry, MAPPING_ENTRY_LABELS_TAG ); - final HashSet< LabelData > labelSet = new HashSet<>( ids.length ); - for ( final int id : ids ) - labelSet.add( idToLabelMap.get( id ) ); - - while ( labelSets.size() <= i ) - labelSets.add( null ); - labelSets.set( i, labelSet ); + final ArrayList< Set< LabelData > > labelSets; + final boolean binary = Boolean.parseBoolean( mapping.getAttributeValue( "binary" ) ); + if ( binary && Objects.equals( version, SEGMENTLABELING_VERSION_ATTRIBUTE_CURRENT ) ) + { + final File labelingMappingFile = XmlHelpers.loadPath( mapping, LABELMAPFILE_TAG, basePath ); + labelSets = readLabelingMapping( labelingMappingFile, idToLabelMap ); + } + else + { + labelSets = new ArrayList<>(); + for ( final Element entry : mapping.getChildren( MAPPING_ENTRY_TAG ) ) + { + final int i = XmlHelpers.getInt( entry, MAPPING_ENTRY_INDEX_TAG ); + final int[] ids = XmlHelpers.getIntArray( entry, MAPPING_ENTRY_LABELS_TAG ); + final HashSet< LabelData > labelSet = new HashSet<>( ids.length ); + for ( final int id : ids ) + labelSet.add( idToLabelMap.get( id ) ); + + while ( labelSets.size() <= i ) + labelSets.add( null ); + labelSets.set( i, labelSet ); + } } final long t2 = System.currentTimeMillis(); System.out.println( " build labelSets : " + (t2-t0) + " ms" ); @@ -176,9 +203,18 @@ private Element toXml( final LabelingPlus labelingPlus, final File xmlFileDirectory, final File indexImgFile ) { + return toXml( labelingPlus, xmlFileDirectory, indexImgFile, null ); + } + + private Element toXml( + final LabelingPlus labelingPlus, + final File xmlFileDirectory, + final File indexImgFile, + final File labelingMappingFile ) { final LabelingMapping< LabelData > mapping = labelingPlus.getLabeling().getMapping(); final Element segmentLabeling = new Element( SEGMENTLABELING_TAG ); + segmentLabeling.setAttribute( SEGMENTLABELING_VERSION_ATTRIBUTE_NAME, SEGMENTLABELING_VERSION_ATTRIBUTE_CURRENT ); segmentLabeling.addContent( XmlHelpers.pathElement( BASEPATH_TAG, xmlFileDirectory, @@ -190,12 +226,25 @@ private Element toXml( segmentLabeling.addContent( labelIdsElement( LABELS_TAG, mapping.getLabels() ) ); final Element indexMap = new Element( MAPPING_TAG ); - int i = 0; - for ( final Set< LabelData > labelSet : mapping.getLabelSets() ) { - final Element entry = new Element( MAPPING_ENTRY_TAG ); - entry.addContent( XmlHelpers.intElement( MAPPING_ENTRY_INDEX_TAG, i++ ) ); - entry.addContent( labelIdsElement( MAPPING_ENTRY_LABELS_TAG, labelSet ) ); - indexMap.addContent( entry ); + if ( labelingMappingFile != null ) + { + indexMap.setAttribute( MAPPING_BINARY_ATTRIBUTE_NAME, "true" ); + indexMap.addContent( XmlHelpers.pathElement( + LABELMAPFILE_TAG, + labelingMappingFile, + xmlFileDirectory ) ); + } + else + { + indexMap.setAttribute( MAPPING_BINARY_ATTRIBUTE_NAME, "false" ); + int i = 0; + for ( final Set< LabelData > labelSet : mapping.getLabelSets() ) + { + final Element entry = new Element( MAPPING_ENTRY_TAG ); + entry.addContent( XmlHelpers.intElement( MAPPING_ENTRY_INDEX_TAG, i++ ) ); + entry.addContent( labelIdsElement( MAPPING_ENTRY_LABELS_TAG, labelSet ) ); + indexMap.addContent( entry ); + } } segmentLabeling.addContent( indexMap ); @@ -207,6 +256,59 @@ private Element toXml( return segmentLabeling; } + /** + * File format: + * int: number of labelsets + * (labelset*) + * labelset := + * int: index of labelset + * int: number of labels n + * int[n]: label ids + */ + private void writeLabelingMapping( final LabelingMapping< LabelData > mapping, final File labelingMappingFile ) throws IOException + { + try ( final DataOutputStream dos = new DataOutputStream( + new BufferedOutputStream( + new FileOutputStream( labelingMappingFile ), + 1024 * 1024 ) ) ) + { + final List< Set< LabelData > > labelSets = mapping.getLabelSets(); + dos.writeInt( labelSets.size() ); + int i = 0; + for ( final Set< LabelData > labelSet : labelSets ) + { + dos.writeInt( i++ ); + dos.writeInt( labelSet.size() ); + for ( final LabelData label : labelSet ) + dos.writeInt( label.getId() ); + } + } + } + + private ArrayList< Set< LabelData > > readLabelingMapping( final File labelingMappingFile, final TIntObjectMap< LabelData > idToLabelMap ) throws IOException + { + try ( final DataInputStream dis = new DataInputStream( + new BufferedInputStream( + new FileInputStream( labelingMappingFile ), + 1024 * 1024 ) ) ) + { + final int numLabelSets = dis.readInt(); + final ArrayList< Set< LabelData > > labelSets = new ArrayList<>( numLabelSets ); + for ( int i = 0; i < numLabelSets; ++i ) + { + final int index = dis.readInt(); + final int numLabels = dis.readInt(); + final HashSet< LabelData > labelSet = new HashSet<>( numLabels ); + for ( int j = 0; j < numLabels; j++ ) + labelSet.add( idToLabelMap.get( dis.readInt() ) ); + while ( labelSets.size() <= index ) + labelSets.add( null ); + labelSets.set( i, labelSet ); + } + return labelSets; + } + } + private File loadBasePath( final Element root, final File xmlFile ) { File xmlFileParentDirectory = xmlFile.getParentFile(); if ( xmlFileParentDirectory == null ) xmlFileParentDirectory = new File( "." ); From d024e742abc8544996768879cb56c011c425f66d Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Thu, 25 Jun 2020 13:32:16 +0200 Subject: [PATCH 09/24] LabelData: Use Trove TIntList for fragmentIndices --- .../java/com/indago/data/segmentation/LabelData.java | 10 ++++++---- .../com/indago/data/segmentation/LabelingPlus.java | 4 +++- .../data/segmentation/MinimalOverlapConflictGraph.java | 5 +++-- .../data/segmentation/PairwiseConflictGraph.java | 6 +++++- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/LabelData.java b/src/main/java/com/indago/data/segmentation/LabelData.java index d092f97..76f015e 100644 --- a/src/main/java/com/indago/data/segmentation/LabelData.java +++ b/src/main/java/com/indago/data/segmentation/LabelData.java @@ -1,5 +1,7 @@ package com.indago.data.segmentation; +import gnu.trove.list.TIntList; +import gnu.trove.list.array.TIntArrayList; import java.util.ArrayList; /** @@ -22,7 +24,7 @@ public class LabelData { private LabelingTreeNode labelingTreeNode; - private final ArrayList< Integer > fragmentIndices; + private final TIntList fragmentIndices; private String segmentSource; @@ -35,7 +37,7 @@ public class LabelData { useId( id ); segment = null; labelingTreeNode = null; - fragmentIndices = new ArrayList<>(); + fragmentIndices = new TIntArrayList(); segmentSource = null; } @@ -55,7 +57,7 @@ public LabelingTreeNode getLabelingTreeNode() { return labelingTreeNode; } - public ArrayList< Integer > getFragmentIndices() { + public TIntList getFragmentIndices() { return fragmentIndices; } @@ -76,7 +78,7 @@ private static synchronized void useId( final int id ) { public void setSegmentSource( String source ) { this.segmentSource = source; - + } public String getSegmentSource() { diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index dd00a06..39147a1 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; import net.imglib2.Dimensions; import net.imglib2.img.Img; import net.imglib2.roi.labeling.ImgLabeling; @@ -69,7 +70,8 @@ public synchronized ArrayList< LabelingFragment > getFragments() { if ( fragments == null ) { fragments = new ArrayList<>(); final LabelingMapping< LabelData > mapping = labeling.getMapping(); - for ( final LabelData label : mapping.getLabels() ) + final Set< LabelData > labels = mapping.getLabels(); + for ( final LabelData label : labels ) label.getFragmentIndices().clear(); final int numLabelSets = mapping.numSets(); final boolean[] flags = new boolean[ numLabelSets ]; diff --git a/src/main/java/com/indago/data/segmentation/MinimalOverlapConflictGraph.java b/src/main/java/com/indago/data/segmentation/MinimalOverlapConflictGraph.java index a3e06b2..d401d3d 100644 --- a/src/main/java/com/indago/data/segmentation/MinimalOverlapConflictGraph.java +++ b/src/main/java/com/indago/data/segmentation/MinimalOverlapConflictGraph.java @@ -1,5 +1,6 @@ package com.indago.data.segmentation; +import gnu.trove.list.TIntList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -68,8 +69,8 @@ public static ArrayList< ArrayList< LabelingSegment > > getConflictGraphCliques( Arrays.fill( heads, 1, numLists, 0 ); heads[ 0 ] = -1; int currListIndex, firstListElem, currListElem; - ArrayList< Integer > currList; - final ArrayList< Integer > firstList = intersect.get( 0 ).getFragmentIndices(); + TIntList currList; + final TIntList firstList = intersect.get( 0 ).getFragmentIndices(); A2: while ( true ) { if ( ++heads[ 0 ] >= firstList.size() ) { // done. we found all elements of the intersection. diff --git a/src/main/java/com/indago/data/segmentation/PairwiseConflictGraph.java b/src/main/java/com/indago/data/segmentation/PairwiseConflictGraph.java index 6dbbb83..08ddcb9 100644 --- a/src/main/java/com/indago/data/segmentation/PairwiseConflictGraph.java +++ b/src/main/java/com/indago/data/segmentation/PairwiseConflictGraph.java @@ -1,5 +1,6 @@ package com.indago.data.segmentation; +import gnu.trove.list.TIntList; import java.util.ArrayList; import java.util.Collection; @@ -36,7 +37,10 @@ public static ArrayList< ArrayList< LabelingSegment > > getConflictGraphCliques( final LabelData sli = segmentLabels.get( i ); for ( int j = i + 1; j < numSegments; ++j ) { final LabelData slj = segmentLabels.get( j ); - for ( final Integer fj : slj.getFragmentIndices() ) { + final TIntList fragmentIndices = slj.getFragmentIndices(); + for ( int k = 0; k < fragmentIndices.size(); k++ ) + { + int fj = fragmentIndices.get( k ); if ( sli.getFragmentIndices().contains( fj ) ) { final ArrayList< LabelingSegment > clique = new ArrayList<>(); clique.add( sli.getSegment() ); From 91741352698aed7c34891b2296a3ee82e33e6f3d Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Thu, 25 Jun 2020 15:07:00 +0200 Subject: [PATCH 10/24] Remove unnecessary explicit type arguments --- .../java/com/indago/data/segmentation/LabelingPlus.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index 39147a1..46a32a7 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -35,15 +35,15 @@ public class LabelingPlus public LabelingPlus( final Dimensions dimensions ) { indexImg = Util.getArrayOrCellImgFactory( dimensions, intType ).create( dimensions, intType ); labeling = new ImgLabeling<>( indexImg ); - labelRegions = new LabelRegions< LabelData >( labeling ); - labelingForests = new ArrayList< LabelingForest >(); + labelRegions = new LabelRegions<>( labeling ); + labelingForests = new ArrayList<>(); } public LabelingPlus( final Img< IntType > indexImg ) { this.indexImg = indexImg; labeling = new ImgLabeling<>( indexImg ); - labelRegions = new LabelRegions< LabelData >( labeling ); - labelingForests = new ArrayList< LabelingForest >(); + labelRegions = new LabelRegions<>( labeling ); + labelingForests = new ArrayList<>(); } /** From 3f7fb29d630a5f322febdfc2871287c8cca3f205 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Thu, 25 Jun 2020 15:08:06 +0200 Subject: [PATCH 11/24] Add LabelingPlus.pack() method to discard unused intermediate label sets --- .../data/segmentation/LabelingPlus.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index 46a32a7..693b1a3 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -1,9 +1,11 @@ package com.indago.data.segmentation; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; +import net.imglib2.Cursor; import net.imglib2.Dimensions; import net.imglib2.img.Img; import net.imglib2.roi.labeling.ImgLabeling; @@ -110,4 +112,46 @@ void createSegmentAndTreeNode( final LabelData label, final String source ) final LabelingTreeNode ltn = new LabelingTreeNode( segment, label ); label.setLabelingTreeNode( ltn ); } + + /** + * "Compress" labeling by removing (from mapping and index image) label sets that don't occur in the index image. + *

+ * TODO: + * - move to imglib2-roi ImgLabeling + * - parallelize indexImg remapping using Parallelization/LoopBuilder + * - increment modcount + */ + public synchronized void pack() + { + final LabelingMapping< LabelData > mapping = labeling.getMapping(); + + // indexMap[ oldIndex ] == newIndex + final int[] indexMap = new int[ mapping.numSets() ]; + + int nextIndex = 1; + final Cursor< IntType > c = indexImg.cursor(); + while ( c.hasNext() ) + { + final IntType type = c.next(); + final int oldIndex = type.get(); + if ( oldIndex != 0 ) + { + int newIndex = indexMap[ oldIndex ]; + if ( newIndex == 0 ) + { + newIndex = nextIndex++; + indexMap[ oldIndex ] = newIndex; + } + type.set( newIndex ); + } + } + final int numLabelSets = nextIndex; + + final List< Set< LabelData > > labelSets = new ArrayList<>( numLabelSets ); + labelSets.add( new HashSet<>() ); + for ( int i = 1; i < indexMap.length; i++ ) + if ( indexMap[ i ] != 0 ) + labelSets.add( new HashSet<>( mapping.labelsAtIndex( i ) ) ); + mapping.setLabelSets( labelSets ); + } } From f9dae0709482d62277b81f0573c044e3575c724b Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Thu, 25 Jun 2020 15:14:17 +0200 Subject: [PATCH 12/24] Remove debug output --- .../data/segmentation/XmlIoLabelingPlus.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 11fff7b..3475d84 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -47,8 +47,6 @@ */ public class XmlIoLabelingPlus { - static int totalNumLabelSets = 0; - public static final String SEGMENTLABELING_TAG = "SegmentLabeling"; public static final String SEGMENTLABELING_VERSION_ATTRIBUTE_NAME = "version"; public static final String SEGMENTLABELING_VERSION_ATTRIBUTE_CURRENT = "0.2"; @@ -79,7 +77,6 @@ public LabelingPlus load( final String xmlFilename ) throws IOException { } public LabelingPlus load( final File xmlFile ) throws IOException { - final long t0 = System.currentTimeMillis(); final SAXBuilder sax = new SAXBuilder(); Document doc; try { @@ -88,9 +85,6 @@ public LabelingPlus load( final File xmlFile ) throws IOException { throw new IOException( e ); } final Element root = doc.getRootElement(); - final long t1 = System.currentTimeMillis(); - System.out.println( " sax.build(...) : " + (t1-t0) + " ms" ); - final File basePath = loadBasePath( root, xmlFile ); final File indexImgFile = XmlHelpers.loadPath( root, INDEXIMG_TAG, basePath ); @@ -100,11 +94,7 @@ public LabelingPlus load( final File xmlFile ) throws IOException { indexImgFile.getAbsolutePath(), new ArrayImgFactory<>( new IntType() ) ).get( 0 ).getImg(); final LabelingPlus labelingPlus = new LabelingPlus( indexImg ); - final long t2 = System.currentTimeMillis(); - System.out.println( " open IndexImg : " + (t2-t1) + " ms" ); fromXml( root, labelingPlus, basePath ); - final long t3 = System.currentTimeMillis(); - System.out.println( " fromXml : " + (t3-t2) + " ms" ); return labelingPlus; } @@ -131,7 +121,6 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling throws IOException { final String version = segmentLabeling.getAttributeValue( SEGMENTLABELING_VERSION_ATTRIBUTE_NAME, "0" ); - final long t0 = System.currentTimeMillis(); final TIntObjectMap< LabelData > idToLabelMap = getIdToLabelMap( segmentLabeling, LABELS_TAG ); @@ -162,13 +151,7 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling labelSets.set( i, labelSet ); } } - final long t2 = System.currentTimeMillis(); - System.out.println( " build labelSets : " + (t2-t0) + " ms" ); - totalNumLabelSets += labelSets.size(); - System.out.println( " totalNumLabelSets = " + totalNumLabelSets ); labelingPlus.getLabeling().getMapping().setLabelSets( labelSets ); - final long t3 = System.currentTimeMillis(); - System.out.println( " setLabelSets : " + (t3-t2) + " ms" ); final Element labelingtree = segmentLabeling.getChild( LABELINGTREE_TAG ); if ( labelingtree == null ) @@ -195,8 +178,6 @@ private void fromXml( final Element segmentLabeling, final LabelingPlus labeling roots.add( idToLabelMap.get( id ).getLabelingTreeNode() ); labelingPlus.labelingForests.add( new LabelingForest( roots ) ); } - final long t4 = System.currentTimeMillis(); - System.out.println( " labelingForests : " + (t4-t3) + " ms" ); } private Element toXml( From 4ccd6706a039612a3fbeb1f635e04fe2cdddaa66 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Mon, 29 Jun 2020 22:21:35 +0200 Subject: [PATCH 13/24] Fix LabelingPlus.pack() bug --- .../com/indago/data/segmentation/LabelingPlus.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index 693b1a3..a421482 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -12,6 +12,7 @@ import net.imglib2.roi.labeling.LabelRegion; import net.imglib2.roi.labeling.LabelRegions; import net.imglib2.roi.labeling.LabelingMapping; +import net.imglib2.roi.labeling.LabelingType; import net.imglib2.type.numeric.integer.IntType; import net.imglib2.util.Util; @@ -127,6 +128,7 @@ public synchronized void pack() // indexMap[ oldIndex ] == newIndex final int[] indexMap = new int[ mapping.numSets() ]; + final int[] inverseIndexMap = new int[ mapping.numSets() ]; int nextIndex = 1; final Cursor< IntType > c = indexImg.cursor(); @@ -141,6 +143,7 @@ public synchronized void pack() { newIndex = nextIndex++; indexMap[ oldIndex ] = newIndex; + inverseIndexMap[ newIndex ] = oldIndex; } type.set( newIndex ); } @@ -149,9 +152,11 @@ public synchronized void pack() final List< Set< LabelData > > labelSets = new ArrayList<>( numLabelSets ); labelSets.add( new HashSet<>() ); - for ( int i = 1; i < indexMap.length; i++ ) - if ( indexMap[ i ] != 0 ) - labelSets.add( new HashSet<>( mapping.labelsAtIndex( i ) ) ); + for ( int i = 1; i < numLabelSets; i++ ) + labelSets.add( new HashSet<>( mapping.labelsAtIndex( inverseIndexMap[ i ] ) ) ); mapping.setLabelSets( labelSets ); + + LabelingType< LabelData > t = labeling.firstElement(); + t.set( t ); } } From d17663978602e6ce3bac0a5b926c70b3c4568171 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Mon, 29 Jun 2020 23:50:07 +0200 Subject: [PATCH 14/24] Let LabelingSegment only construct its LabelRegion on demand --- .../data/segmentation/LabelingPlus.java | 3 +- .../data/segmentation/LabelingSegment.java | 34 +++++++++++++------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index a421482..5180c60 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -106,8 +106,7 @@ public synchronized ArrayList< LabelingSegment > getSegments() { void createSegmentAndTreeNode( final LabelData label, final String source ) { - final LabelRegion< LabelData > labelRegion = labelRegions.getLabelRegion( label ); - final LabelingSegment segment = new LabelingSegment( labelRegion ); + final LabelingSegment segment = new LabelingSegment( () -> labelRegions.getLabelRegion( label ) ); label.setSegment( segment ); label.setSegmentSource( source ); final LabelingTreeNode ltn = new LabelingTreeNode( segment, label ); diff --git a/src/main/java/com/indago/data/segmentation/LabelingSegment.java b/src/main/java/com/indago/data/segmentation/LabelingSegment.java index 8ad8ab8..da9f95d 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingSegment.java +++ b/src/main/java/com/indago/data/segmentation/LabelingSegment.java @@ -1,5 +1,6 @@ package com.indago.data.segmentation; +import java.util.function.Supplier; import net.imglib2.Cursor; import net.imglib2.RandomAccess; import net.imglib2.RealLocalizable; @@ -16,10 +17,12 @@ */ public class LabelingSegment implements Segment { - private final LabelRegion< LabelData > region; + private final Supplier< LabelRegion< LabelData > > regionSupplier; - protected LabelingSegment( final LabelRegion< LabelData > region ) { - this.region = region; + private LabelRegion< LabelData > region = null; + + protected LabelingSegment( final Supplier< LabelRegion< LabelData > > region ) { + this.regionSupplier = region; } /** @@ -30,23 +33,23 @@ protected LabelingSegment( final LabelRegion< LabelData > region ) { * @return unique serialization id of the backing {@code LabelRegion}. */ public int getId() { - return region.getLabel().getId(); + return region().getLabel().getId(); } @Override public long getArea() { - return region.size(); + return region().size(); } @Override public RealLocalizable getCenterOfMass() { - return region.getCenterOfMass(); + return region().getCenterOfMass(); } @Override public IterableRegion< ? > getRegion() { - return region; + return region(); } /** @@ -57,10 +60,10 @@ public RealLocalizable getCenterOfMass() { public boolean conflictsWith( final Segment segment ) { final IterableRegion< ? > segmentRegion = segment.getRegion(); if ( segment instanceof LabelingSegment ) - if ( Intervals.isEmpty( Intervals.intersect( this.region, segmentRegion ) ) ) + if ( Intervals.isEmpty( Intervals.intersect( this.region(), segmentRegion ) ) ) return false; - final RandomAccess< BoolType > raMask = region.randomAccess(); + final RandomAccess< BoolType > raMask = region().randomAccess(); final Cursor< ? > cSegment = segmentRegion.cursor(); while ( cSegment.hasNext() ) { cSegment.fwd(); @@ -87,7 +90,18 @@ public String toString() { public String getSegmentationSource() { return region.getLabel().getSegmentSource(); - } + private LabelRegion< LabelData > region() + { + if ( region == null ) + { + synchronized ( this ) + { + if ( region == null ) + region = regionSupplier.get(); + } + } + return region; + } } From 25ffdeb7757cc47ad9d69cadebd5349318f78f90 Mon Sep 17 00:00:00 2001 From: tpietzsch Date: Mon, 29 Jun 2020 23:50:29 +0200 Subject: [PATCH 15/24] Let FlatForest.Node return its size --- .../data/segmentation/groundtruth/FlatForest.java | 10 ++++++++-- .../data/segmentation/groundtruth/ImageRegions.java | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java b/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java index 0db303c..7e912b3 100644 --- a/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java +++ b/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java @@ -1,5 +1,6 @@ package com.indago.data.segmentation.groundtruth; +import com.indago.data.segmentation.groundtruth.ImageRegions.ImageRegion; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -28,9 +29,9 @@ public static class Node implements TreeNode< Node >, Iterable< Localizable > { private static final ArrayList< Node > emptyChildren = new ArrayList< Node >(); - private final Iterable< Localizable > pixels; + private final ImageRegion pixels; - private Node( final Iterable< Localizable > pixels ) { + private Node( final ImageRegion pixels ) { this.pixels = pixels; } @@ -39,6 +40,11 @@ public Iterator< Localizable > iterator() { return pixels.iterator(); } + public long size() + { + return pixels.size(); + } + @Override public Node getParent() { return null; diff --git a/src/main/java/com/indago/data/segmentation/groundtruth/ImageRegions.java b/src/main/java/com/indago/data/segmentation/groundtruth/ImageRegions.java index b155ef2..9b208e7 100644 --- a/src/main/java/com/indago/data/segmentation/groundtruth/ImageRegions.java +++ b/src/main/java/com/indago/data/segmentation/groundtruth/ImageRegions.java @@ -56,6 +56,11 @@ public static class ImageRegion implements Iterable< Localizable > { this.itcode = itcode; } + public long size() + { + return itcode.getSize(); + } + @Override public Iterator< Localizable > iterator() { final long[] offset = new long[ itcode.numDimensions() ]; From 7bbcff04d45c192c5bdb768924287dfb49698a42 Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Tue, 20 Oct 2020 11:22:55 +0200 Subject: [PATCH 16/24] Add support for BSON file format --- pom.xml | 11 ++++++ .../data/segmentation/LabelingPlus.java | 7 ++++ .../data/segmentation/XmlIoLabelingPlus.java | 16 +++++++++ .../segmentation/XmlIoLabelingPlusTest.java | 33 ++++++++++++++++++ src/test/resources/bson/example1.bson | Bin 0 -> 213 bytes src/test/resources/bson/example1.tif | Bin 0 -> 198 bytes 6 files changed, 67 insertions(+) create mode 100644 src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java create mode 100644 src/test/resources/bson/example1.bson create mode 100644 src/test/resources/bson/example1.tif diff --git a/pom.xml b/pom.xml index 3d5cfd9..be2afaa 100755 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,7 @@ deploy-to-scijava + 0.10.4 com.indago @@ -50,6 +51,16 @@ net.imglib2 imglib2-ij + + net.imglib2 + imglib2-roi + ${imglib2-roi.version} + + + net.imglib2 + imglib2-roi-io + 0.1.0 + nz.ac.waikato.cms.weka weka-dev diff --git a/src/main/java/com/indago/data/segmentation/LabelingPlus.java b/src/main/java/com/indago/data/segmentation/LabelingPlus.java index 3b736cf..c118108 100644 --- a/src/main/java/com/indago/data/segmentation/LabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/LabelingPlus.java @@ -45,6 +45,13 @@ public LabelingPlus( final Img< IntType > indexImg ) { labelingForests = new ArrayList< LabelingForest >(); } + public LabelingPlus( final Img< IntType > indexImg, final ImgLabeling labeling ) { + this.indexImg = indexImg; + this.labeling = labeling; + labelRegions = new LabelRegions< LabelData >( labeling ); + labelingForests = new ArrayList< LabelingForest >(); + } + /** * @param labelingPlus */ diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 2ff07a4..45deb0a 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.Set; +import net.imglib2.roi.io.labeling.LabelingIOService; +import net.imglib2.roi.labeling.ImgLabeling; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; @@ -35,6 +37,7 @@ import net.imglib2.type.numeric.integer.IntType; import net.imglib2.type.numeric.real.FloatType; import net.imglib2.view.Views; +import org.scijava.plugin.Parameter; /** * @author tpietzsch, jug @@ -62,6 +65,19 @@ public class XmlIoLabelingPlus { public static boolean openIndexImageWithIJ = true; + @Parameter + public LabelingIOService labelingIOService; + + public LabelingPlus loadFromBson( final String bsonFilename ) { + ImgLabeling imgLabeling = labelingIOService.open(bsonFilename); + LabelingPlus labelingPlus = new LabelingPlus(ImgView.wrap( imgLabeling.getIndexImg(), null ), imgLabeling); + return labelingPlus; + } + + public void saveAsBson( final LabelingPlus labelingPlus, final String bsonFilename ) { + labelingIOService.save(labelingPlus.labeling, bsonFilename); + } + public LabelingPlus load( final String xmlFilename ) throws IOException { return load( new File( xmlFilename ) ); } diff --git a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java new file mode 100644 index 0000000..d9f48b5 --- /dev/null +++ b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java @@ -0,0 +1,33 @@ +package com.indago.data.segmentation; + +import net.imglib2.roi.io.labeling.LabelingIOService; +import org.junit.Before; +import org.junit.Test; +import org.scijava.Context; + +public class XmlIoLabelingPlusTest { + + Context context; + + @Before + public void beforeTests() { + context = new Context(); + } + + + @Test + public void testLoadFromBson() { + XmlIoLabelingPlus plus = new XmlIoLabelingPlus(); + plus.labelingIOService = context.getService(LabelingIOService.class); + LabelingPlus p = plus.loadFromBson("src/test/resources/bson/example1.bson"); + System.out.println(p.getFragments().toString()); + } + + @Test + public void testSaveAsBson() { + XmlIoLabelingPlus plus = new XmlIoLabelingPlus(); + plus.labelingIOService = context.getService(LabelingIOService.class); + LabelingPlus p = plus.loadFromBson("src/test/resources/bson/example1.bson"); + plus.saveAsBson(p, "src/test/resources/bson/save_test.bson"); + } +} \ No newline at end of file diff --git a/src/test/resources/bson/example1.bson b/src/test/resources/bson/example1.bson new file mode 100644 index 0000000000000000000000000000000000000000..94be38adfaceda227fea00410719f916460f608f GIT binary patch literal 213 zcmZ9_K@P$o5Czb$MctZs2Dj2yFX6(KCur-~kN_nNHNB|!5l}X+CjVvT&l|x0MV{4U zu}ZWNBsJ?UHLoU&ss p`B5&VSR?8$iw1}Eutt?egKZoT?VpOQ=b|ab-Cfp8(R5lA_yEP2B$5CC literal 0 HcmV?d00001 diff --git a/src/test/resources/bson/example1.tif b/src/test/resources/bson/example1.tif new file mode 100644 index 0000000000000000000000000000000000000000..0e4e7bef695833d872b18cc363f1be6aa0f483d2 GIT binary patch literal 198 zcmebD)MDUZU|`^4U|?inU<9&QfS3`9&BVwI7FPg@Geg-Rb!rD18ERO=d%OFKp5mU5Ju+%0DxEn1^@s6 literal 0 HcmV?d00001 From 2f5b3fe5df68e81bbd089ee3537804268e31c67e Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Wed, 21 Oct 2020 14:40:47 +0200 Subject: [PATCH 17/24] Update tests, usage and dependency --- pom.xml | 4 ++-- .../indago/data/segmentation/XmlIoLabelingPlus.java | 7 +++++++ .../data/segmentation/XmlIoLabelingPlusTest.java | 10 +++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index be2afaa..ff54e2e 100755 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ deploy-to-scijava 0.10.4 + 0.1.1-SNAPSHOT com.indago @@ -54,12 +55,11 @@ net.imglib2 imglib2-roi - ${imglib2-roi.version} net.imglib2 imglib2-roi-io - 0.1.0 + ${imglib2-roi-io.version} nz.ac.waikato.cms.weka diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 45deb0a..dbbfa29 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -7,6 +7,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.LongFunction; import net.imglib2.roi.io.labeling.LabelingIOService; import net.imglib2.roi.labeling.ImgLabeling; @@ -74,6 +75,12 @@ public LabelingPlus loadFromBson( final String bsonFilename ) { return labelingPlus; } + public LabelingPlus loadFromBson( final String bsonFilename, final LongFunction idToLabel) { + ImgLabeling imgLabeling = labelingIOService.open(bsonFilename, idToLabel); + LabelingPlus labelingPlus = new LabelingPlus(ImgView.wrap( imgLabeling.getIndexImg(), null ), imgLabeling); + return labelingPlus; + } + public void saveAsBson( final LabelingPlus labelingPlus, final String bsonFilename ) { labelingIOService.save(labelingPlus.labeling, bsonFilename); } diff --git a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java index d9f48b5..82881b7 100644 --- a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java +++ b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java @@ -20,7 +20,15 @@ public void testLoadFromBson() { XmlIoLabelingPlus plus = new XmlIoLabelingPlus(); plus.labelingIOService = context.getService(LabelingIOService.class); LabelingPlus p = plus.loadFromBson("src/test/resources/bson/example1.bson"); - System.out.println(p.getFragments().toString()); + } + + @Test + public void testLoadFromBson2() { + XmlIoLabelingPlus plus = new XmlIoLabelingPlus(); + plus.labelingIOService = context.getService(LabelingIOService.class); + LabelingPlus p = plus.loadFromBson("src/test/resources/bson/example1.bson", id -> { + return new LabelData((int) id); + }); } @Test From 4f1f5526746381e8df42849a43b42aed2001c366 Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Wed, 20 Jan 2021 13:09:28 +0100 Subject: [PATCH 18/24] Fit the latest roi-io changes --- .../data/segmentation/XmlIoLabelingPlus.java | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 5ebc912..a7672b0 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -8,15 +8,16 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.function.LongFunction; +import java.util.stream.Collectors; +import com.indago.data.segmentation.groundtruth.FlatForest; import net.imglib2.roi.io.labeling.LabelingIOService; +import net.imglib2.roi.io.labeling.data.ImgLabelingContainer; +import net.imglib2.roi.io.labeling.data.LabelingContainer; import net.imglib2.roi.labeling.ImgLabeling; +import org.jcodings.util.Hash; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; @@ -79,20 +80,33 @@ public class XmlIoLabelingPlus { @Parameter public LabelingIOService labelingIOService; - public LabelingPlus loadFromBson( final String bsonFilename ) { - ImgLabeling imgLabeling = labelingIOService.open(bsonFilename); + public LabelingBuilder loadFromBson( final String bsonFilename ) { + ImgLabelingContainer imgLabelingContainer = labelingIOService.open(bsonFilename); + ImgLabeling imgLabeling = imgLabelingContainer.getImgLabeling(); LabelingPlus labelingPlus = new LabelingPlus(ImgView.wrap( imgLabeling.getIndexImg(), null ), imgLabeling); - return labelingPlus; + Map> sourceToLabel = new HashMap>(); + final LabelingBuilder labelingBuilder = new LabelingBuilder( labelingPlus ); + final FlatForest flat = new FlatForest( imgLabeling.getIndexImg(), new IntType( 0 ) ); + for(Map.Entry> entry : sourceToLabel.entrySet()){ + final Set< FlatForest.Node > filteredRoots = flat.roots().stream() + .filter( node -> node.size()>0 && entry.getValue().contains(node.iterator().next().numDimensions())) + .collect( Collectors.toSet() ); + labelingBuilder.buildLabelingForest(()-> flat.roots(), entry.getKey() ); + } + return labelingBuilder; } public LabelingPlus loadFromBson( final String bsonFilename, final LongFunction idToLabel) { - ImgLabeling imgLabeling = labelingIOService.open(bsonFilename, idToLabel); + ImgLabelingContainer imgLabelingContainer = labelingIOService.open(bsonFilename, idToLabel); + ImgLabeling imgLabeling = imgLabelingContainer.getImgLabeling(); LabelingPlus labelingPlus = new LabelingPlus(ImgView.wrap( imgLabeling.getIndexImg(), null ), imgLabeling); return labelingPlus; } public void saveAsBson( final LabelingPlus labelingPlus, final String bsonFilename ) { - labelingIOService.save(labelingPlus.labeling, bsonFilename); + ImgLabelingContainer container = new ImgLabelingContainer(); + container.setImgLabeling(labelingPlus.labeling); + labelingIOService.save(container, bsonFilename); } public LabelingPlus load( final String xmlFilename ) throws IOException { From bccba75d0d016eebd166bc1d0565390f16922582 Mon Sep 17 00:00:00 2001 From: Florian Jug Date: Mon, 12 Apr 2021 10:25:19 +0200 Subject: [PATCH 19/24] New mvn wants https only... --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff54e2e..f312c5f 100755 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,5 @@ - + 4.0.0 From 123cd7b8ffb4c76e73cc9558d4c3696ff319e56c Mon Sep 17 00:00:00 2001 From: Florian Jug Date: Mon, 12 Apr 2021 10:27:58 +0200 Subject: [PATCH 20/24] more https stuff --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index f312c5f..dd4eddc 100755 --- a/pom.xml +++ b/pom.xml @@ -152,11 +152,11 @@ imagej.public - http://maven.scijava.org/content/groups/public + https://maven.scijava.org/content/groups/public erichseifert.de - http://mvn.erichseifert.de/maven2 + https://mvn.erichseifert.de/maven2 From 35f19596586f3342e4efddccb9ef058ed8158c96 Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Mon, 12 Apr 2021 10:28:11 +0200 Subject: [PATCH 21/24] Update version --- pom.xml | 4 +- .../data/segmentation/XmlIoLabelingPlus.java | 51 ++++++++++++++++--- .../segmentation/groundtruth/FlatForest.java | 2 +- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index ff54e2e..b56cdcd 100755 --- a/pom.xml +++ b/pom.xml @@ -15,8 +15,8 @@ deploy-to-scijava - 0.10.4 - 0.1.1-SNAPSHOT + 0.11.0 + 0.2.0-SNAPSHOT com.indago diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index a7672b0..4a75ede 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -13,11 +13,12 @@ import java.util.stream.Collectors; import com.indago.data.segmentation.groundtruth.FlatForest; +import com.indago.data.segmentation.groundtruth.ImageRegions; import net.imglib2.roi.io.labeling.LabelingIOService; import net.imglib2.roi.io.labeling.data.ImgLabelingContainer; import net.imglib2.roi.io.labeling.data.LabelingContainer; import net.imglib2.roi.labeling.ImgLabeling; -import org.jcodings.util.Hash; +import org.apache.commons.lang.StringUtils; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; @@ -83,16 +84,50 @@ public class XmlIoLabelingPlus { public LabelingBuilder loadFromBson( final String bsonFilename ) { ImgLabelingContainer imgLabelingContainer = labelingIOService.open(bsonFilename); ImgLabeling imgLabeling = imgLabelingContainer.getImgLabeling(); + List> labelSets = imgLabeling.getMapping().getLabelSets(); + List> recastLabelSets = new LinkedList<>(); + List recastLabels = new LinkedList<>(); + for(Set labelSet : labelSets){ + Set newLabelSet = new HashSet<>(); + for(Integer label : labelSet){ + LabelData labelData = new LabelData(label); + //TODO: set data, maybe? + + newLabelSet.add(labelData); + recastLabels.add(labelData); + } + recastLabelSets.add(newLabelSet); + } + imgLabeling = ImgLabeling.fromImageAndLabelSets(imgLabeling.getIndexImg(), recastLabelSets); LabelingPlus labelingPlus = new LabelingPlus(ImgView.wrap( imgLabeling.getIndexImg(), null ), imgLabeling); - Map> sourceToLabel = new HashMap>(); + Map> sourceToLabel = imgLabelingContainer.getSourceToLabel(); final LabelingBuilder labelingBuilder = new LabelingBuilder( labelingPlus ); - final FlatForest flat = new FlatForest( imgLabeling.getIndexImg(), new IntType( 0 ) ); + for(Map.Entry> entry : sourceToLabel.entrySet()){ - final Set< FlatForest.Node > filteredRoots = flat.roots().stream() - .filter( node -> node.size()>0 && entry.getValue().contains(node.iterator().next().numDimensions())) - .collect( Collectors.toSet() ); - labelingBuilder.buildLabelingForest(()-> flat.roots(), entry.getKey() ); - } + if(StringUtils.isNotEmpty(entry.getKey())){ + HashSet labelingTreeNodes = new HashSet<>(); + labelingPlus.getSegments(); + + //labelingPlus.getLabeling().getMapping().getLabels().stream().filter(labelData -> labelData.); + + //TODO: iterate over all segments + for(Integer segmentId : entry.getValue()){ + Set labelDataSets = labelingPlus.getLabeling().getMapping().getLabelSets().get(segmentId); + for(LabelData labelData : labelDataSets){ + labelingPlus.createSegmentAndTreeNode(labelData, entry.getKey()); + labelingTreeNodes.add(labelData.getLabelingTreeNode()); + } + } + final LabelingForest labelingForest = new LabelingForest(labelingTreeNodes); + labelingBuilder.labelingForests.add(labelingForest); + } + + } + labelingPlus.getSegments(); + + + + return labelingBuilder; } diff --git a/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java b/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java index 7e912b3..aed32bf 100644 --- a/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java +++ b/src/main/java/com/indago/data/segmentation/groundtruth/FlatForest.java @@ -31,7 +31,7 @@ public static class Node implements TreeNode< Node >, Iterable< Localizable > { private final ImageRegion pixels; - private Node( final ImageRegion pixels ) { + public Node(final ImageRegion pixels) { this.pixels = pixels; } From b2686b9483f9945acac7e9ceeed20a875d64e5f1 Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Mon, 12 Apr 2021 14:21:00 +0200 Subject: [PATCH 22/24] Quickfix tests --- .../segmentation/XmlIoLabelingPlusTest.java | 3 +++ src/test/resources/bson/example1.bson | Bin 213 -> 421 bytes src/test/resources/bson/example1.tif | Bin 198 -> 198 bytes 3 files changed, 3 insertions(+) diff --git a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java index 82881b7..e461e8c 100644 --- a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java +++ b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java @@ -2,6 +2,7 @@ import net.imglib2.roi.io.labeling.LabelingIOService; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.scijava.Context; @@ -31,7 +32,9 @@ public void testLoadFromBson2() { }); } + //TODO: fix the saving in imglib2-roi-io @Test + @Ignore public void testSaveAsBson() { XmlIoLabelingPlus plus = new XmlIoLabelingPlus(); plus.labelingIOService = context.getService(LabelingIOService.class); diff --git a/src/test/resources/bson/example1.bson b/src/test/resources/bson/example1.bson index 94be38adfaceda227fea00410719f916460f608f..bc39e37c82cdc8f660091901a19b627e0f95524c 100644 GIT binary patch literal 421 zcmZ9IO%8%U427REE=)8bapxfngTGgBVPfJ5P%9yUkq8(rWNBsJ?UHLoU&ss p`B5&VSR?8$iw1}Eutt?egKZoT?VpOQ=b|ab-Cfp8(R5lA_yEP2B$5CC diff --git a/src/test/resources/bson/example1.tif b/src/test/resources/bson/example1.tif index 0e4e7bef695833d872b18cc363f1be6aa0f483d2..0fe9447aead3ff86b06edacbbfc29f60b7189b16 100644 GIT binary patch delta 71 ucmX@cc#LsEn*%cg0|N*%LNSQV3dC$sJ`0d$2VxE&W&&amAA~_{5C#CusRJDV delta 71 hcmX@cc#LsEn*$pI0|N*%Loqs^9ViaMEKrQj2LR9&12q5u From c8f400ac5bcea9a35f850af71b44384502fb6144 Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Wed, 21 Apr 2021 11:49:49 +0200 Subject: [PATCH 23/24] Switch parent-pom to scijava --- pom.xml | 19 ++++++++++++++----- src/test/java/com/indago/ui/PlayGround5.java | 5 ++--- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index d1e4135..2c0445a 100755 --- a/pom.xml +++ b/pom.xml @@ -3,9 +3,9 @@ 4.0.0 - sc.fiji - pom-indago - 2.2.18 + org.scijava + pom-scijava + 30.0.0 @@ -17,6 +17,9 @@ deploy-to-scijava 0.11.0 0.2.0-SNAPSHOT + 0.1.2 + 8.1.0 + com.indago @@ -43,6 +46,7 @@ com.indago indago-ui-elements + ${indago-ui-elements.version} io.scif @@ -68,6 +72,7 @@ com.gurobi gurobi-jar + ${gurobi-jar.version} mpicbg @@ -83,8 +88,8 @@ com.miglayout - miglayout - swing + miglayout-swing + ${miglayout-swing.version} @@ -150,6 +155,10 @@ + + scijava.public + https://maven.scijava.org/content/groups/public + imagej.public https://maven.scijava.org/content/groups/public diff --git a/src/test/java/com/indago/ui/PlayGround5.java b/src/test/java/com/indago/ui/PlayGround5.java index 5e417aa..219b967 100644 --- a/src/test/java/com/indago/ui/PlayGround5.java +++ b/src/test/java/com/indago/ui/PlayGround5.java @@ -18,7 +18,7 @@ import net.imglib2.RandomAccessibleInterval; import net.imglib2.converter.Converters; import net.imglib2.converter.TypeIdentity; -import net.imglib2.display.RealARGBColorConverter; +import net.imglib2.converter.RealARGBConverter; import net.imglib2.img.Img; import net.imglib2.img.array.ArrayImgFactory; import net.imglib2.img.display.imagej.ImageJFunctions; @@ -58,8 +58,7 @@ public static < T extends RealType< T > & NativeType< T > > void doIt( final LabelingForest labelingForest = labelingBuilder.buildLabelingForest( FilteredComponentTree.buildComponentTree( segments, type, minComponentSize, maxComponentSize, maxGrowthPerStep, darkToBright ) ); final RandomAccessibleInterval< LabelingType< LabelData > > labeling = labelingBuilder.getLabeling(); - final RealARGBColorConverter< T > imageConverter = new RealARGBColorConverter.Imp0< T >( 0, 255 ); - imageConverter.setColor( new ARGBType( 0xffffffff ) ); + final RealARGBConverter< T > imageConverter = new RealARGBConverter< T >( 0, 255 ); final SegmentLabelSetARGBConverter labelingConverter = new SegmentLabelSetARGBConverter( new AlphaMixedSegmentLabelSetColor( new SegmentLabelColor() { Random rand = new Random(); @Override From 60cb93d82525a89cfd8aa6646ac970b829dc7c2b Mon Sep 17 00:00:00 2001 From: Tom Burke Date: Wed, 21 Apr 2021 11:52:35 +0200 Subject: [PATCH 24/24] Fix tests --- .../com/indago/data/segmentation/XmlIoLabelingPlus.java | 5 +++-- .../com/indago/data/segmentation/XmlIoLabelingPlusTest.java | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java index 4a75ede..1567eb1 100644 --- a/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java +++ b/src/main/java/com/indago/data/segmentation/XmlIoLabelingPlus.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.*; import java.util.function.LongFunction; +import java.util.function.ToLongFunction; import java.util.stream.Collectors; import com.indago.data.segmentation.groundtruth.FlatForest; @@ -138,10 +139,10 @@ public LabelingPlus loadFromBson( final String bsonFilename, final LongFunction< return labelingPlus; } - public void saveAsBson( final LabelingPlus labelingPlus, final String bsonFilename ) { + public void saveAsBson(final LabelingPlus labelingPlus, final String bsonFilename, final ToLongFunction labelToId) { ImgLabelingContainer container = new ImgLabelingContainer(); container.setImgLabeling(labelingPlus.labeling); - labelingIOService.save(container, bsonFilename); + labelingIOService.save(container, bsonFilename, labelToId); } public LabelingPlus load( final String xmlFilename ) throws IOException { diff --git a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java index e461e8c..efe1900 100644 --- a/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java +++ b/src/test/java/com/indago/data/segmentation/XmlIoLabelingPlusTest.java @@ -32,13 +32,13 @@ public void testLoadFromBson2() { }); } - //TODO: fix the saving in imglib2-roi-io @Test - @Ignore public void testSaveAsBson() { XmlIoLabelingPlus plus = new XmlIoLabelingPlus(); plus.labelingIOService = context.getService(LabelingIOService.class); LabelingPlus p = plus.loadFromBson("src/test/resources/bson/example1.bson"); - plus.saveAsBson(p, "src/test/resources/bson/save_test.bson"); + plus.saveAsBson(p, "src/test/resources/bson/save_test.bson", label -> { + return ((LabelData)label).getId(); + }); } } \ No newline at end of file