gusucode.com > vision工具箱matlab源码程序 > vision/@gpuArray/detectFASTFeatures.m

    function pts = detectFASTFeatures(I, varargin)
% detectFASTFeatures Find corners using the FAST algorithm on the GPU
%   points = detectFASTFeatures(I) returns a cornerPoints object,
%   points, containing information about the feature points detected in a
%   2-D grayscale image I. detectFASTFeatures uses the Features from
%   Accelerated Segment Test (FAST) algorithm to find feature points.
%   points.Location and points.Metric are gpuArrays.
%
%   points = detectFASTFeatures(I,Name,Value) specifies additional
%   name-value pair arguments described below:
%
%   'MinQuality'   A scalar Q, 0 <= Q <= 1, specifying the minimum accepted
%                  quality of corners as a fraction of the maximum corner
%                  metric value in the image. Larger values of Q can be
%                  used to remove erroneous corners.
% 
%                  Default: 0.1
%
%   'MinContrast'  A scalar T, 0 < T < 1, specifying the minimum intensity
%                  difference between a corner and its surrounding region,
%                  as a fraction of the maximum value of the image class.
%                  Increasing the value of T reduces the number of detected
%                  corners.
%
%                  Default: 0.2
%
%   'ROI'          A vector of the format [X Y WIDTH HEIGHT], specifying
%                  a rectangular region in which corners will be detected.
%                  [X Y] is the upper left corner of the region.
%
%                 Default: [1 1 size(I,2) size(I,1)]
%
% Class Support
% -------------
% The input image I is a gpuArray with a datatype of logical, uint8, int16,
% uint16, single, or double, and it must be real and nonsparse.
%
% Example
% -------  
% % Find and plot corner points in the image.
% I = gpuArray(imread('cameraman.tif'));
% corners = detectFASTFeatures(I);
% imshow(I)
% hold on
% plot(corners.selectStrongest(50))
%
% See also detectFASTFeatures, cornerPoints, gpuArray/detectHarrisFeatures,
%          detectMinEigenFeatures, detectBRISKFeatures, detectSURFFeatures,
%          detectMSERFeatures, extractFeatures, matchFeatures

% Reference
% ---------
% E. Rosten and T. Drummond. "Fusing Points and Lines for High
% Performance Tracking." Proceedings of the IEEE International
% Conference on Computer Vision Vol. 2 (October 2005): pp. 1508?1511.

% Copyright 2015  The MathWorks, Inc.

% Check the input image and convert it to the range of uint8.
params = vision.internal.detector.fast.parseInputs(I, varargin{:});

I_u8 = im2uint8(I);

[I_u8c, expandedROI] = vision.internal.detector.fast.cropImage(I_u8, params);

% Convert the minContrast property to the range of uint8.
minContrast = im2uint8(params.MinContrast);

% Find corner locations by using OpenCV.
rawPts = ocvDetectFASTgpumex(I_u8c, minContrast);

[locations, metricValues] = vision.internal.detector.applyMinQuality(rawPts, params);

if params.usingROI
    % Because the ROI was expanded earlier, we need to exclude corners
    % which are outside the original ROI.
    [locations, metricValues] ...
        = vision.internal.detector.excludePointsOutsideROI(...
            params.ROI, expandedROI, locations, metricValues);
end

% Pack the output into a cornerPoints object.
pts = cornerPoints(locations, 'Metric', metricValues);