public DetectDescribeMultiFusion(DetectorInterestPointMulti<T> detector, OrientationImage<T> orientation, DescribeRegionPoint<T, TD> describe) { this.detector = detector; this.orientation = orientation; this.describe = describe; info = new SetInfo[ detector.getNumberOfSets() ]; for( int i = 0; i < info.length; i++ ) { info[i] = new SetInfo<>(); info[i].descriptors = UtilFeature.createQueue(describe,10); } }
@Override public void process(T image) { // detect features and setup describe and orientation detector.detect(image); describe.setImage(image); if( orientation != null ) orientation.setImage(image); // go through each set of features for( int i = 0; i < info.length; i++ ) { FoundPointSO points = detector.getFeatureSet(i); SetInfo<TD> setInfo = info[i]; setInfo.reset(); // describe each detected feature for( int j = 0; j < points.getNumberOfFeatures(); j++ ) { Point2D_F64 p = points.getLocation(j); double radius = points.getRadius(j); double ori = points.getOrientation(j); if( orientation != null ) { orientation.setObjectRadius(radius); ori = orientation.compute(p.x,p.y); } TD d = setInfo.descriptors.grow(); if( describe.process(p.x,p.y,ori,radius,d)) { setInfo.location.grow().set(p); } else { setInfo.descriptors.removeTail(); } } } }