gusucode.com > vision工具箱matlab源码程序 > vision/+vision/+internal/+buildable/extractBRISKBuildable.m
classdef extractBRISKBuildable < coder.ExternalDependency %#codegen % Copyright 2012 The MathWorks, Inc. methods (Static) function name = getDescriptiveName(~) name = 'extractBRISKFeatures'; end function b = isSupportedContext(~) b = true; % supports non-host target end function updateBuildInfo(buildInfo, context) %{ buildInfo.addIncludePaths({fullfile(matlabroot,'toolbox', ... 'vision','builtins','src','ocv','include')} ); %} buildInfo.addIncludePaths({fullfile(matlabroot,'toolbox', ... 'vision','builtins','src','ocv','include'), ... fullfile(matlabroot,'toolbox', ... 'vision','builtins','src','ocvcg', 'opencv', 'include')} ); buildInfo.addSourcePaths({fullfile(matlabroot,'toolbox', ... 'vision','builtins','src','ocv')}); buildInfo.addSourceFiles({'extractBRISKCore.cpp', ... 'features2d_init_mw.cpp', ... 'fast_score_mw.cpp', ... 'cgCommon.cpp', ... 'mwbrisk.cpp', ... 'mwfast.cpp'}); buildInfo.addIncludeFiles({'vision_defines.h', ... 'extractBRISKCore_api.hpp', ... 'cgCommon.hpp', ... 'fast_score_mw.hpp', ... 'features2d_other_mw.hpp', ... 'precomp_f2d_mw.hpp'}); % no need 'rtwtypes.h' vision.internal.buildable.portableOpenCVBuildInfo(buildInfo, context, ... 'extractBRISK'); end %------------------------------------------------------------------ % write all supported data-type specific function calls function [features, valid_points] = extractBRISKFeatures(Iu8, points, params) coder.inline('always'); coder.cinclude('extractBRISKCore_api.hpp'); vision.internal.buildable.errorIfInSimulink('extractFeatures with BRISK features'); ptrKeypoints = coder.opaque('void *', 'NULL'); ptrFeatures = coder.opaque('void *', 'NULL'); % call function numOut = int32(0); nRows = int32(size(Iu8,1)); nCols = int32(size(Iu8,2)); inLocation = points.Location; inMetric = points.Metric; inScale = points.Scale; inOrientation = points.Orientation; inMisc = points.Misc; %> Extract BRISK Features numOut(1) = coder.ceval('extractBRISK_compute',... coder.ref(Iu8), ... nRows, nCols,... coder.ref(inLocation),... coder.ref(inMetric),... coder.ref(inScale),... coder.ref(inOrientation),... coder.ref(inMisc),... int32(size(inLocation,1)),... params.upright, ... coder.ref(ptrFeatures), coder.ref(ptrKeypoints)); % output buffers for valid points coder.varsize('location',[inf 2]); coder.varsize('metric',[inf 1]); coder.varsize('scale',[inf 1]); coder.varsize('orientation',[inf 1]); coder.varsize('misc',[inf 1]); location = coder.nullcopy(zeros(numOut,2,'single')); metric = coder.nullcopy(zeros(numOut,1,'single')); scale = coder.nullcopy(zeros(numOut,1,'single')); misc = coder.nullcopy(zeros(numOut,1,'int32')); orientation = coder.nullcopy(zeros(numOut,1,'single')); % output buffer for features coder.varsize('features',[inf 64]); features = coder.nullcopy(zeros(numOut,64,'uint8')); %> Copy detected BRISK Features to output coder.ceval('extractBRISK_assignOutput', ... ptrFeatures, ptrKeypoints, ... coder.ref(location),... coder.ref(metric),... coder.ref(scale),... coder.ref(orientation),... coder.ref(misc),... coder.ref(features)); valid_points.Location = location; valid_points.Metric = metric; valid_points.Scale = scale; valid_points.Misc = misc; valid_points.Orientation = orientation; end end end