Hi Jay, this is great feedback. Thank you. As you already mentioned in your E-Mail, the API of the OpResolver, FeatureService etc is highly unstable at the moment as the development still is on a topic-branch of ImageJ-Ops (which is also in 0.x at the moment). However, I'm really trying to get this stuff merged to master soon. Therefore, I will start (and actually already started) a series of more atomar Pull-Requests on ImageJ-Ops to get all the stuff merged. It would be amazing if you can also have a look at the PRs and give some comments and feedback on the individual functionality.
Please find more answers in-line. Again, thank you for your feedback! Great that the stuff is used out there already ;-) Christian On Sa, 2015-06-13 at 03:29 -0500, Jay Warrick wrote: > Hi All, > > > I chatted with Curtis Rueden a bit today about trying this > developmental feature extraction stuff out. He said I should note any > successes or challenges as it might help your progress. He suggested > potentially to post on the pull request but it seemed a bit long for > there. > > > First of all, fantastic stuff. You are bringing so much quantitative > power to the fingertips of a lot of individuals like myself. Thank > you! Secondly, sorry if I'm using anything inappropriately in the > rundown below but this is my best shot at trying to give you some > feedback on my attempt to use your code. Also, I totally realize > things are still in flux so I didn't necessarily have expectations > that all this stuff would work immediately for me. > > > As of what was synced to the imagej-ops : outputop-service branch > tonight, I was able to successfully get measures from a > `FirstOrderStatFeatureSet` for a set of `LabelRegion`s that I got from > a `Img<UnsignedByteType>` using `ConnectedComponents` (from latest > ImgLib2-algorithm SNAPSHOT but just temporarily copied to its own > class local for this test) and apply them to an > `Img<UnsignedShortType>` using `Regions.sample(myLabelRegion, myImg)`. This is 100% correct. The new CCA should soon be part of the stable imglib2-algorithms. We will also make it available in Ops as soon as it was released with imglib2-algorithms. Thanks for tpietzsch for the implementation! Anyway, I'm working on several Ops will make your live easier when trying to extract and loop over LabelRegions. > I think I did most of these tests using connected components detected > using a 4-connected structuring element (if that matters at all). > > > I ran into an issue with the `GeometricFeatureSet` where I got a > ````` > java.lang.ArrayIndexOutOfBoundsException: -1 > java.util.ArrayList.elementData(ArrayList.java:400) > java.util.ArrayList.remove(ArrayList.java:477) > net.imagej.ops.geometric.polygon.DefaultConvexHullOp.run(DefaultConvexHullOp.java:127) > ````` > All my regions are quite sizeable (all between 1000 and 6000 pixels, > see end of email) so I'm not sure why this would happen. I'm basically > doing the following for this test using the same regions as I used > with the `FirstOrderStatFeatureSet` > > > ````` > GeometricFeatureSet opGeometric = > ij.op().op(GeometricFeatureSet.class, LabelRegion.class); > List<Pair<String, DoubleType>> results = > opGeometric.getFeatureList(Regions.iterable(myLabelRegion)); > ````` The GeometricFeatureSet is really something we have to work on. Thanks for the report. I also found some serious problems with the design of several methods and I hope that I can fix it next week. > > > I'm also having a problem with `Haralick2DFeatureSet` using those same > `LabelRegion`s. > ````` > java.lang.ArrayIndexOutOfBoundsException: -1 > net.imglib2.roi.labeling.LabelRegion.dimension(LabelRegion.java:459) > net.imglib2.AbstractWrappedInterval.dimension(AbstractWrappedInterval.java:59) > net.imagej.ops.features.haralick.helper.CooccurrenceMatrix2D.run(CooccurrenceMatrix2D.java:119) > ````` > I'm testing the `Haralick2DFeatureSet` as follows... > ```` > Haralick2DFeatureSet<UnsignedShortType> opHaralick2DHor = > ij.op(Haralick2DFeatureSet.class, > (IterableInterval<UnsignedShortType>) image, 8d, 1d, "HORIZONTAL"); > List<Pair<String, DoubleType>> results = > opHaralick2DHor.getFeatureList(Regions.sample(myLabelRegion, image)); > ````` This is something we have to look into as soon as we file the Haralick PR. I will turn your code into a test and make sure that it works. > > The `HistogramFeatureSet` appears to work. I think I don't have my > image adjusted right to see appropriate values in the histogram output > though as I seem to get all 0's. I assumed the "number of bins" > parameter would autoscale the data according to the image type (e.g., > UnsignedShortType image scaled to fit in 256 levels/bins) but I can > see why that was likely a bad assumption. This should actually happen. I will double-check. Again, as soon as we file the "HistogramFeature" PR, it would be great if you could test again. > > > The `ImageMomentsFeatureSet` seems to work fine. > > > I got the following error trying to use the `Zernike` feature set... > ````` > java.lang.NumberFormatException > java.math.BigDecimal.<init>(BigDecimal.java:470) > java.math.BigDecimal.<init>(BigDecimal.java:739) > java.math.BigDecimal.valueOf(BigDecimal.java:1069) > net.imagej.types.BigComplex.setReal(BigComplex.java:225) > net.imagej.ops.features.zernike.ZernikeComputer.normalize(ZernikeComputer.java:193) > net.imagej.ops.features.zernike.ZernikeComputer.fastZernikeComputation(ZernikeComputer.java:151) > ````` > I'm using it as follows on the 8-bit mask image > ````` > ZernikeFeatureSet<UnsignedByteType> opZernike = > ij.op().op(ZernikeFeatureSet.class, > (IterableInterval<UnsignedByteType>) mask, true, true, 1, 3); > List<Pair<String, DoubleType>> results = > opZernike.getFeatureList(Regions.sample(myLabelRegion, mask)); > ````` I will forward it to the implementor of Zernike. Seems that there are some tests missing. > > I figured, in case I'm doing a bunch of things wrong, it would be > easier for you to just have the data I'm using to see if you get the > same issues using your own code. The images that I'm using are here... > > > > https://drive.google.com/folderview?id=0BzopfqjGpdu8flBNTHdjXzN2eUJhR1NCNmNTbHJ5T3RNVDJRbmdwVnJiYnI0Nk43ZXp3QzA&usp=sharing > > > The folder includes a small txt output of only the label regions that > I'm analyzing (their pixel areas and centers of mass), given I am not > using all labeled objects that come from the connected components > analysis. Lastly, my label indices start at 0 if you are looking to > match up output from ConnectedComponents with this. > > > If you have any feedback on where I might be doing things wrong, > please let me know. > Thanks for the data. We will also soon have a Image Segment Feature Node within KNIME and also use the KNIME testing system to find the last(...) bugs. Maybe this node can also help you extracting features for your data! > > Thanks! > > > Jay > > > > > _______________________________________________ > ImageJ-devel mailing list > ImageJ-devel@imagej.net > http://imagej.net/mailman/listinfo/imagej-devel _______________________________________________ ImageJ-devel mailing list ImageJ-devel@imagej.net http://imagej.net/mailman/listinfo/imagej-devel