Skip to content

Commit bb85840

Browse files
authored
Merge pull request #224 from fiji/shape-index-feature
'Cell shape index' morphological feature in 2D.
2 parents 04139e0 + cad7456 commit bb85840

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

src/main/java/fiji/plugin/trackmate/features/spot/SpotShapeAnalyzer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,13 @@ public void process( final Spot spot )
6969
}
7070
final double circularity = 4. * Math.PI * ( area / ( perimeter * perimeter ) );
7171
final double solidity = area / convexArea;
72-
72+
final double shapeIndex = ( area <= 0. ) ? Double.NaN : perimeter / Math.sqrt( area );
73+
7374
spot.putFeature( SpotShapeAnalyzerFactory.AREA, area );
7475
spot.putFeature( SpotShapeAnalyzerFactory.PERIMETER, perimeter );
7576
spot.putFeature( SpotShapeAnalyzerFactory.CIRCULARITY, circularity );
7677
spot.putFeature( SpotShapeAnalyzerFactory.SOLIDITY, solidity );
78+
spot.putFeature( SpotShapeAnalyzerFactory.SHAPE_INDEX, shapeIndex );
7779
}
7880

7981
private static final double getLength( final SpotRoi roi )

src/main/java/fiji/plugin/trackmate/features/spot/SpotShapeAnalyzerFactory.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ public class SpotShapeAnalyzerFactory< T extends RealType< T > & NativeType< T >
4646
public static final String PERIMETER = "PERIMETER";
4747
public static final String CIRCULARITY = "CIRCULARITY";
4848
public static final String SOLIDITY = "SOLIDITY";
49+
public static final String SHAPE_INDEX = "SHAPE_INDEX";
4950

5051
private static final List< String > FEATURES = Arrays.asList( new String[] {
51-
AREA, PERIMETER, CIRCULARITY, SOLIDITY } );
52+
AREA, PERIMETER, CIRCULARITY, SOLIDITY, SHAPE_INDEX } );
5253
private static final Map< String, String > FEATURE_SHORTNAMES = new HashMap< >();
5354
private static final Map< String, String > FEATURE_NAMES = new HashMap< >();
5455
private static final Map< String, Dimension > FEATURE_DIMENSIONS = new HashMap< >();
@@ -59,24 +60,27 @@ public class SpotShapeAnalyzerFactory< T extends RealType< T > & NativeType< T >
5960
FEATURE_SHORTNAMES.put( PERIMETER, "Perim." );
6061
FEATURE_SHORTNAMES.put( CIRCULARITY, "Circ." );
6162
FEATURE_SHORTNAMES.put( SOLIDITY, "Solidity" );
63+
FEATURE_SHORTNAMES.put( SHAPE_INDEX, "Shape index" );
6264

6365
FEATURE_NAMES.put( AREA, "Area" );
6466
FEATURE_NAMES.put( PERIMETER, "Perimeter" );
6567
FEATURE_NAMES.put( CIRCULARITY, "Circularity" );
6668
FEATURE_NAMES.put( SOLIDITY, "Solidity" );
69+
FEATURE_NAMES.put( SHAPE_INDEX, "Shape index" );
6770

6871
FEATURE_DIMENSIONS.put( AREA, Dimension.AREA );
6972
FEATURE_DIMENSIONS.put( PERIMETER, Dimension.LENGTH );
7073
FEATURE_DIMENSIONS.put( CIRCULARITY, Dimension.NONE );
7174
FEATURE_DIMENSIONS.put( SOLIDITY, Dimension.NONE );
75+
FEATURE_DIMENSIONS.put( SHAPE_INDEX, Dimension.NONE );
7276

7377
FEATURE_ISINTS.put( AREA, Boolean.FALSE );
7478
FEATURE_ISINTS.put( PERIMETER, Boolean.FALSE );
7579
FEATURE_ISINTS.put( CIRCULARITY, Boolean.FALSE );
7680
FEATURE_ISINTS.put( SOLIDITY, Boolean.FALSE );
81+
FEATURE_ISINTS.put( SHAPE_INDEX, Boolean.FALSE );
7782
}
7883

79-
8084
@Override
8185
public SpotAnalyzer< T > getAnalyzer( final ImgPlus< T > img, final int frame, final int channel )
8286
{

0 commit comments

Comments
 (0)