@Override public void processFrame(T image) { detector.detect(image); }
@Override public void detect(T input) { detector.detect(input); if( orientation != null ) orientation.setImage(input); }
public ArrayList<ConvexPolygon2d> detectConeLocations(BufferedImage image) { ImageFloat32 input = ConvertBufferedImage.convertFromSingle(image, null, ImageFloat32.class); // Create a Fast Hessian detector from the SURF paper. // Other detectors can be used in this example too. InterestPointDetector<ImageFloat32> detector = FactoryInterestPoint.fastHessian(new ConfigFastHessian(10, 2, 100, 2, 9, 3, 4)); // find interest points in the image detector.detect(input); // Show the features return new ArrayList<ConvexPolygon2d>(); }
@Override public synchronized void setActiveAlgorithm(int indexFamily, String name, Object cookie) { if (input == null) return; // corrupt the input image corruptPanel.corruptImage(grayImage, corruptImage); final InterestPointDetector<T> det = (InterestPointDetector<T>) cookie; det.detect(corruptImage); render.reset(); for (int i = 0; i < det.getNumberOfFeatures(); i++) { Point2D_F64 p = det.getLocation(i); int radius = (int) Math.ceil(det.getRadius(i)); render.addCircle((int) p.x, (int) p.y, radius); } SwingUtilities.invokeLater(new Runnable() { public void run() { ConvertBufferedImage.convertTo(corruptImage, workImage, true); Graphics2D g2 = workImage.createGraphics(); g2.setStroke(new BasicStroke(3)); render.draw(g2); panel.repaint(); } }); }
@Override public void process(GrayU8 gray) { detector.detect(gray); synchronized ( lockGui ) { foundGUI.reset(); int N = detector.getNumberOfFeatures(); for( int i = 0; i < N; i++ ) { Point2D_F64 p = detector.getLocation(i); double radius = detector.getRadius(i); foundGUI.grow().set(p.x, p.y, radius); } } } }
public static <TD extends TupleDesc> FastQueue<TD> describeImage( GrayF32 input , InterestPointDetector<GrayF32> detector , DescribeRegionPoint<GrayF32,TD> describe , List<Point2D_F64> location ) { FastQueue<TD> list = new FastQueue<>(100, describe.getDescriptionType(), false); System.out.println("Detecting"); detector.detect(input); System.out.println("Describing"); describe.setImage(input); for( int i = 0; i < detector.getNumberOfFeatures(); i++ ) { Point2D_F64 p = detector.getLocation(i); double radius = detector.getRadius(i); double ori = detector.getOrientation(i); TD d = describe.createDescription(); if( describe.process(p.x,p.y,ori,radius,d) ) { list.add( d ); location.add( p.copy() ); } } return list; }
detector.detect(image); SwingUtilities.invokeLater(new Runnable() { public void run() {
private void extractImageFeatures(Planar<T> color , T gray, FastQueue<TupleDesc> descs, List<Point2D_F64> locs) { detector.detect(gray); if( describe.getImageType().getFamily() == ImageType.Family.GRAY) describe.setImage(gray);
@Override public void detect(T input) { descs.reset(); featureRadiuses.reset(); featureAngles.reset(); location.reset(); if( orientation != null ) { orientation.setImage(input); } describe.setImage(input); detector.detect(input); int N = detector.getNumberOfFeatures(); for( int i = 0; i < N; i++ ) { Point2D_F64 p = detector.getLocation(i); double radius = detector.getRadius(i); double yaw = detector.getOrientation(i); if( orientation != null ) { orientation.setObjectRadius(radius); yaw = orientation.compute(p.x,p.y); } if( describe.process(p.x,p.y,yaw,radius,descs.grow()) ) { featureRadiuses.push(radius); featureAngles.push(yaw); location.add(p); } else { descs.removeTail(); } } }