public NaturalPipeline(IComponentManager xpcfComponentManager) : base(xpcfComponentManager) { imageViewerKeypoints = Create <IImageViewer>("SolARImageViewerOpencv", "keypoints"); imageViewerResult = Create <IImageViewer>("SolARImageViewerOpencv"); marker = Create <IMarker2DNaturalImage>("SolARMarker2DNaturalImageOpencv"); kpDetector = Create <IKeypointDetector>("SolARKeypointDetectorOpencv"); kpDetectorRegion = Create <IKeypointDetectorRegion>("SolARKeypointDetectorRegionOpencv"); descriptorExtractor = Create <IDescriptorsExtractor>("SolARDescriptorsExtractorAKAZE2Opencv"); matcher = Create <IDescriptorMatcher>("SolARDescriptorMatcherKNNOpencv"); geomMatchesFilter = Create <IMatchesFilter>("SolARGeometricMatchesFilterOpencv"); poseEstimationPlanar = Create <I3DTransformSACFinderFrom2D3D>("SolARPoseEstimationPlanarPointsOpencv"); opticalFlow = Create <IOpticalFlowEstimator>("SolAROpticalFlowPyrLKOpencv"); projection = Create <IProject>("SolARProjectOpencv"); unprojection = Create <IUnproject>("SolARUnprojectPlanarPointsOpencv"); img_mapper = Create <IImage2WorldMapper>("SolARImage2WorldMapper4Marker2D"); basicMatchesFilter = Create <IMatchesFilter>("SolARBasicMatchesFilter"); keypointsReindexer = Create <IKeypointsReIndexer>("SolARKeypointsReIndexer"); overlay3DComponent = Create <I3DOverlay>("SolAR3DOverlayOpencv"); /* in dynamic mode, we need to check that components are well created*/ /* this is needed in dynamic mode */ if (new object[] { imageViewerKeypoints, imageViewerResult, marker, kpDetector, kpDetectorRegion, descriptorExtractor, matcher, geomMatchesFilter, poseEstimationPlanar, opticalFlow, projection, unprojection, img_mapper, basicMatchesFilter, keypointsReindexer, overlay3DComponent }.Contains(null)) { LOG_ERROR("One or more component creations have failed"); return; } LOG_INFO("All components have been created"); // Declare data structures used to exchange information between components refImage = SharedPtr.Alloc <Image>().AddTo(subscriptions); previousCamImage = SharedPtr.Alloc <Image>().AddTo(subscriptions); //kpImageCam = SharedPtr.Alloc<Image>().AddTo(subscriptions); refDescriptors = SharedPtr.Alloc <DescriptorBuffer>().AddTo(subscriptions); camDescriptors = SharedPtr.Alloc <DescriptorBuffer>().AddTo(subscriptions); matches = new DescriptorMatchVector().AddTo(subscriptions); // where to store detected keypoints in ref image and camera image refKeypoints = new KeypointArray().AddTo(subscriptions); camKeypoints = new KeypointArray().AddTo(subscriptions); markerWorldCorners = new Point3DfArray().AddTo(subscriptions); // load marker marker.loadMarker().Check(); marker.getWorldCorners(markerWorldCorners).Check(); marker.getImage(refImage).Check(); // detect keypoints in reference image kpDetector.detect(refImage, refKeypoints); // extract descriptors in reference image descriptorExtractor.extract(refImage, refKeypoints, refDescriptors); // initialize image mapper with the reference image size and marker size var img_mapper_config = img_mapper.BindTo <IConfigurable>().AddTo(subscriptions); var refSize = refImage.getSize(); var mkSize = marker.getSize(); img_mapper_config.getProperty("digitalWidth").setIntegerValue((int)refSize.width); img_mapper_config.getProperty("digitalHeight").setIntegerValue((int)refSize.height); img_mapper_config.getProperty("worldWidth").setFloatingValue(mkSize.width); img_mapper_config.getProperty("worldHeight").setFloatingValue(mkSize.height); // vector of 4 corners in the marker refImgCorners = new Point2DfArray(); float w = refImage.getWidth(), h = refImage.getHeight(); Point2Df corner0 = new Point2Df(0, 0); Point2Df corner1 = new Point2Df(w, 0); Point2Df corner2 = new Point2Df(w, h); Point2Df corner3 = new Point2Df(0, h); refImgCorners.Add(corner0); refImgCorners.Add(corner1); refImgCorners.Add(corner2); refImgCorners.Add(corner3); }
protected void Start() { image = SharedPtr.Alloc <Image>().AddTo(subscriptions); }
public FiducialPipeline(IComponentManager xpcfComponentManager) : base(xpcfComponentManager) { binaryMarker = Create <IMarker2DSquaredBinary>("SolARMarker2DSquaredBinaryOpencv"); #if !NDEBUG imageViewer = Create <IImageViewer>("SolARImageViewerOpencv"); imageViewerGrey = Create <IImageViewer>("SolARImageViewerOpencv", "grey"); imageViewerBinary = Create <IImageViewer>("SolARImageViewerOpencv", "binary"); imageViewerContours = Create <IImageViewer>("SolARImageViewerOpencv", "contours"); imageViewerFilteredContours = Create <IImageViewer>("SolARImageViewerOpencv", "filteredContours"); #endif overlay3DComponent = Create <I3DOverlay>("SolAR3DOverlayOpencv"); imageFilterBinary = Create <IImageFilter>("SolARImageFilterBinaryOpencv"); imageConvertor = Create <IImageConvertor>("SolARImageConvertorOpencv"); contoursExtractor = Create <IContoursExtractor>("SolARContoursExtractorOpencv"); contoursFilter = Create <IContoursFilter>("SolARContoursFilterBinaryMarkerOpencv"); perspectiveController = Create <IPerspectiveController>("SolARPerspectiveControllerOpencv"); patternDescriptorExtractor = Create <IDescriptorsExtractorSBPattern>("SolARDescriptorsExtractorSBPatternOpencv"); patternMatcher = Create <IDescriptorMatcher>("SolARDescriptorMatcherRadiusOpencv"); patternReIndexer = Create <ISBPatternReIndexer>("SolARSBPatternReIndexer"); img2worldMapper = Create <IImage2WorldMapper>("SolARImage2WorldMapper4Marker2D"); PnP = Create <I3DTransformFinderFrom2D3D>("SolARPoseEstimationPnpOpencv"); #if !NDEBUG overlay2DContours = Create <I2DOverlay>("SolAR2DOverlayOpencv", "contours"); overlay2DCircles = Create <I2DOverlay>("SolAR2DOverlayOpencv", "circles"); #endif greyImage = SharedPtr.Alloc <Image>().AddTo(subscriptions); binaryImage = SharedPtr.Alloc <Image>().AddTo(subscriptions); contours = new Contour2DfArray().AddTo(subscriptions); filtered_contours = new Contour2DfArray().AddTo(subscriptions); patches = new ImageList().AddTo(subscriptions); recognizedContours = new Contour2DfArray().AddTo(subscriptions); recognizedPatternsDescriptors = new DescriptorBuffer().AddTo(subscriptions); markerPatternDescriptor = new DescriptorBuffer().AddTo(subscriptions); patternMatches = new DescriptorMatchVector().AddTo(subscriptions); pattern2DPoints = new Point2DfArray().AddTo(subscriptions); img2DPoints = new Point2DfArray().AddTo(subscriptions); pattern3DPoints = new Point3DfArray().AddTo(subscriptions); //CamCalibration K; // components initialisation binaryMarker.loadMarker().Check(); patternDescriptorExtractor.extract(binaryMarker.getPattern(), markerPatternDescriptor).Check(); var binaryMarkerSize = binaryMarker.getSize(); var patternSize = binaryMarker.getPattern().getSize(); patternDescriptorExtractor.BindTo <IConfigurable>().getProperty("patternSize").setIntegerValue(patternSize); patternReIndexer.BindTo <IConfigurable>().getProperty("sbPatternSize").setIntegerValue(patternSize); // NOT WORKING ! initialize image mapper with the reference image size and marker size var img2worldMapperConf = img2worldMapper.BindTo <IConfigurable>(); img2worldMapperConf.getProperty("digitalWidth").setIntegerValue(patternSize); img2worldMapperConf.getProperty("digitalHeight").setIntegerValue(patternSize); img2worldMapperConf.getProperty("worldWidth").setFloatingValue(binaryMarkerSize.width); img2worldMapperConf.getProperty("worldHeight").setFloatingValue(binaryMarkerSize.height); }