gusucode.com > vision工具箱matlab源码程序 > vision/+vision/+internal/+rcnn/edgeMap.m

    function [map, bw, varargout] = edgeMap(I)

if ~ismatrix(I)
    I = rgb2gray(I);
end

bw = edge(I, 'sobel');

[gx, gy] = computeGradient(I);

gMag = hypot(gx,gy);

map = zeros(size(I),'like', gMag);
map(bw) = gMag(bw);

if nargout == 3    
    gDir = atan2d(-gy,gx);
    ori = zeros(size(I),'like', gDir);
    ori(bw) = gDir(bw);
    varargout{1} = ori;
end

% -------------------------------------------------------------------------
function [gx, gy] = computeGradient(img)

img = single(img);

gx = zeros(size(img), 'like', img);
gy = zeros(size(img), 'like', img);

gx(:,2:end-1) = conv2(img, single([1 0 -1]), 'valid');
gy(2:end-1,:) = conv2(img, single([1;0;-1]), 'valid');

% forward difference on borders
gx(:,1)   = img(:,2)   - img(:,1);
gx(:,end) = img(:,end) - img(:,end-1);

gy(1,:)   = img(2,:)   - img(1,:);
gy(end,:) = img(end,:) - img(end-1,:);