Featur Calculator

Hi all,

I was wondering if there is any documentation regarding the measures this node takes. And the formula's used to derive them.



We should add links / formulas in the node description, right. Especially, as there exist serveral ways to calculate certain types of features (e.g. for geometric features first calculate the polygon and then derive the feature results in different calculation than directly derving the feature value from e.g. the bitmask). That's also a reason why we called this node BETA. In the "final" release of the node, we will change some stuff, e.g. you can choose if you want to calculate the features on the polygon or on the bit mask directly and we will also add more information regarding the implementation. However, often it doesn't really matter which variant is implemented as long as the calculations are capturing what you want to measure and are consistent.

Anyway, most of the features are well-documented in the web if you need the information (e.g. first order statistics, geometric, haralick etc). Which one do you need specifically?

Hi Chrisitan,

Thanks for your quick response. Well my work is aimed at replacing manual sorting/grading. My first objective was size, which I mastered so to say. My next objective is shape and its consistency within a sample. For shape the main interest is distinguishing between round, oval and long. Now there are measures for "Roundness" but also for "Elongation", so knowing how these come about would be helpfull. Also I had a look at "Eccentricity" and a wikipedia page about it ( https://en.wikipedia.org/wiki/Eccentricity_%28mathematics%29 ). Going after that page my values should always be between 0 and 1, however for my sample the average is 1,45 with values reaching close to 2,5. I also want to detect oddly shaped particles, some are for example shaped like a heart. I think Solidity might be helpfull here, but that depends on how that is calculated, but it is such a generic term that its hard to find appropiate documentation.



Here you find the implementations we use: e.g. https://github.com/imagej/imagej-ops/blob/master/src/main/java/net/imagej/ops/geom/geom2d/DefaultEccentricity.java

If you press "T" in that window, you can search for the others. We basically tested everything we have implement against ImageJ or MatLab so secure consistency.

Another thing you can do is just calculate a bunch of features and try e.g. the scatter-plot + hiliting (or clustering for an unsupervised grouping, for example k-means or hierarchical clustering) to distiguish the  groups. There are example workflows for hiliting on the Example Server.

So if I read this correctly:

return new DoubleType(majorAxisFunc.compute1(input).getRealDouble() / minorAxisFunc.compute1(input).getRealDouble());

Eccentricity is calculated as the Major Axis devided by the Minor Axis


Thanks a lot. I think I'm getting there now.

How about roundness:

return new DoubleType(4 * (areaFunc.compute1(input).getRealDouble() /
			(Math.PI * Math.pow(majorAxisFunc.compute1(input).getRealDouble(), 2))));

Is this 4 * (Area / ( PI * X^2)) with X being major axis?