gusucode.com > vision工具箱matlab源码程序 > vision/+vision/+internal/+buildable/extractFreakBuildable.m
classdef extractFreakBuildable < coder.ExternalDependency %#codegen % extractFreakBuildable - encapsulate extractFeature (FREAK) implementation library % Copyright 2012 The MathWorks, Inc. methods (Static) function name = getDescriptiveName(~) name = 'extractFreakBuildable'; 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'), ... fullfile(matlabroot,'toolbox', ... 'vision','builtins','src','ocvcg', 'opencv', 'include')} ); buildInfo.addSourcePaths({fullfile(matlabroot,'toolbox', ... 'vision','builtins','src','ocv')}); buildInfo.addSourceFiles({'extractFreakCore.cpp', 'cgCommon.cpp'}); buildInfo.addIncludeFiles({'vision_defines.h', ... 'cgCommon.hpp', ... 'extractFreakCore_api.hpp'}); % no need 'rtwtypes.h' vision.internal.buildable.portableOpenCVBuildInfo(buildInfo, context, ... 'extractFreak'); end %------------------------------------------------------------------ % write all supported data-type specific function calls function [outLocation, outScale, outMetric, outMisc, ... outOrientation, outFeatures] = ... extractFreak_uint8(Iu8T, inLocation, inScale, inMetric, ... inMisc, nbOctave, orientationNormalized, scaleNormalized, patternScale) coder.inline('always'); coder.cinclude('extractFreakCore_api.hpp'); vision.internal.buildable.errorIfInSimulink('extractFeatures with FREAK features'); ptrKeypoints = coder.opaque('void *', 'NULL'); ptrDescriptors = coder.opaque('void *', 'NULL'); % call function out_numel = int32(0); numel = int32(size(inLocation, 1)); nRows = int32(size(Iu8T, 2)); % original (before transpose) nCols = int32(size(Iu8T, 1)); % original (before transpose) numInDims = int32(ndims(Iu8T)); out_numel(1)=coder.ceval('extractFreak_compute',... coder.ref(Iu8T), ... nRows, nCols, numInDims, ... coder.ref(inLocation), coder.ref(inScale), coder.ref(inMetric), coder.ref(inMisc), ... int32(numel), int32(nbOctave), logical(orientationNormalized), logical(scaleNormalized), single(patternScale), ... coder.ref(ptrKeypoints), coder.ref(ptrDescriptors)); % copy output to mxArray % declare output as variable sized so that _mex file can return differet sized output. % allocate output % coder.internal.prefer_const(featureWidth); coder.varsize('outLocation', [inf, 2]); coder.varsize('outScale', [inf, 1]); coder.varsize('outMetric', [inf, 1]); coder.varsize('outMisc', [inf, 1]); coder.varsize('outOrientation', [inf, 1]); coder.varsize('outFeatures', [inf, 128],[1 1]); % create uninitialized memory using coder.nullcopy outLocation = coder.nullcopy(zeros(out_numel,2,'single')); outScale = coder.nullcopy(zeros(out_numel,1,'single')); outMetric = coder.nullcopy(zeros(out_numel,1,'single')); outMisc = coder.nullcopy(zeros(out_numel,1,'int32')); outOrientation = coder.nullcopy(zeros(out_numel,1,'single')); featureWidth = 64; outFeatures = coder.nullcopy(zeros(out_numel,featureWidth,'uint8')); coder.ceval('extractFreak_assignOutput',... ptrKeypoints, ptrDescriptors, ... coder.ref(outLocation), coder.ref(outScale), ... coder.ref(outMetric), coder.ref(outMisc), ... coder.ref(outOrientation), coder.ref(outFeatures)); end end end