⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 harris.m

📁 A salient-boundary extraction software package based on the paper: S. Wang, T. Kubota, J. M. Siskind
💻 M
字号:
% HARRIS - Harris corner detector%% Usage:  [cim, r, c] = harris(im, sigma, thresh, radius, disp)%% Arguments:   %            im     - image to be processed.%            sigma  - standard deviation of smoothing Gaussian. Typical%                     values to use might be 1-3.%            thresh - threshold (optional). Try a value ~1000.%            radius - radius of region considered in non-maximal%                     suppression (optional). Typical values to use might%                     be 1-3.%            disp   - optional flag (0 or 1) indicating whether you want%                     to display corners overlayed on the original%                     image. This can be useful for parameter tuning.%% Returns:%            cim    - binary image marking corners.%            r      - row coordinates of corner points.%            c      - column coordinates of corner points.%% If thresh and radius are omitted from the argument list 'cim' is returned% as a raw corner strength image and r and c are returned empty.% References: % C.G. Harris and M.J. Stephens. "A combined corner and edge detector", % Proceedings Fourth Alvey Vision Conference, Manchester.% pp 147-151, 1988.%% Alison Noble, "Descriptions of Image Surfaces", PhD thesis, Department% of Engineering Science, Oxford University 1989, p45.%%% Author: % Peter Kovesi   % Department of Computer Science & Software Engineering% The University of Western Australia% pk @ csse uwa edu au  % http://www.csse.uwa.edu.au/~pk%% March 2002    - original version% December 2002 - updated commentsfunction [cim, r, c] = harris(im, sigma, thresh, radius, disp)        error(nargchk(2,5,nargin));        dx = [-1 0 1; -1 0 1; -1 0 1]; % Derivative masks    dy = dx';        %Ix = conv2(im, dx, 'same');    % Image derivatives    %Iy = conv2(im, dy, 'same');    Ix = imfilter(im, dx, 'replicate');    Iy = imfilter(im, dy, 'replicate');    % Generate Gaussian filter of size 6*sigma (+/- 3sigma) and of    % minimum size 1x1.    g = fspecial('gaussian',max(1,fix(6*sigma)), sigma);    %     Ix2 = conv2(Ix.^2, g, 'same'); % Smoothed squared image derivatives%     Iy2 = conv2(Iy.^2, g, 'same');%     Ixy = conv2(Ix.*Iy, g, 'same');    Ix2 = imfilter(Ix.^2, g, 'replicate');    Iy2 = imfilter(Iy.^2, g, 'replicate');    Ixy = imfilter(Ix.*Iy, g, 'replicate');    % Compute the Harris corner measure. Note that there are two measures    % that can be calculated.  I prefer the first one below as given by    % Nobel in her thesis (reference above).  The second one (commented out)    % requires setting a parameter, it is commonly suggested that k=0.04 - I    % find this a bit arbitrary and unsatisfactory.     cim = (Ix2.*Iy2 - Ixy.^2)./(Ix2 + Iy2 + eps); % My preferred  measure.%    k = 0.04;%    cim = (Ix2.*Iy2 - Ixy.^2) - k*(Ix2 + Iy2).^2; % Original Harris measure.    if nargin > 2   % We should perform nonmaximal suppression and threshold		% Extract local maxima by performing a grey scale morphological	% dilation and then finding points in the corner strength image that	% match the dilated image and are also greater than the threshold.	sze = 2*radius+1;                   % Size of mask.	%mx = ordfilt2(cim,sze^2,ones(sze)); % Grey-scale dilate.    mx = imdilate(cim, strel('square',sze));	cim = (cim==mx)&(cim>thresh);       % Find maxima.		[r,c] = find(cim);                  % Find row,col coords.		if nargin==5 & disp      % overlay corners on original image	    imagesc(im), hold on, axis off, axis equal, colormap(gray);	    p = plot(c,r,'r.');        set(p,'MarkerSize',20);	end        else  % leave cim as a corner strength image and make r and c empty.	r = []; c = [];    end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -