gusucode.com > vision工具箱matlab源码程序 > vision/+vision/+internal/+buildable/matchFeaturesApproxNN.m
classdef matchFeaturesApproxNN < coder.ExternalDependency %#codegen % Copyright 2012 The MathWorks, Inc. methods (Static) function name = getDescriptiveName(~) name = 'matchFeatures'; 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({'matchFeaturesApproxNNCore.cpp', ... 'mwflann.cpp', ... 'mwminiflann.cpp'}); buildInfo.addIncludeFiles({'vision_defines.h', ... 'precomp_flann.hpp'}); % add flann directory with all header files (using hack) fileLists = coder.internal.const('../../../../builtins/src/ocv/include/flann/*'); buildInfo.addNonBuildFiles(fileLists, '','BlockModules'); vision.internal.buildable.portableOpenCVBuildInfo(buildInfo, context, ... 'matchFeatures'); end %------------------------------------------------------------------ % write all supported data-type specific function calls function [indexPairs, matchMetric] = ... findApproximateNearestNeighbors(features1, features2, metric) coder.inline('always'); coder.cinclude('matchFeaturesCore_api.hpp'); M = cast(size(features1,1),'int32'); N1 = cast(size(features1,2),'int32'); N2 = cast(size(features2,2),'int32'); % When there is only 1 feature vector in features2 we cannot % find 2 nearest neighbors. if N2 > 1 knn = int32(2); else knn = int32(1); end indexPairs = coder.nullcopy(zeros(knn, N1, 'int32')); if strcmpi(metric, 'hamming'); matchMetric = coder.nullcopy(zeros(knn, N1, 'int32')); coder.ceval('findApproximateNearestNeighbors_uint8',... coder.ref(features1), ... coder.ref(features2), ... metric,... N1, N2, M, knn, ... coder.ref(indexPairs),... coder.ref(matchMetric)); else matchMetric = coder.nullcopy(zeros(knn, N1, 'single')); coder.ceval('findApproximateNearestNeighbors_real32',... coder.ref(features1), ... coder.ref(features2), ... metric,... N1, N2, M, knn, ... coder.ref(indexPairs),... coder.ref(matchMetric)); end end end end