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

📄 ridgefilter.m

📁 图象分割 边缘检测 的 指纹分割算法
💻 M
字号:
% RIDGEFILTER - enhances fingerprint image via oriented filters%% Function to enhance fingerprint image via oriented filters%% Usage:%  newim =  ridgefilter(im, orientim, freqim, kx, ky, showfilter)%% Arguments:%         im       - Image to be processed.%         orientim - Ridge orientation image, obtained from RIDGEORIENT.%         freqim   - Ridge frequency image, obtained from RIDGEFREQ.%         kx, ky   - Scale factors specifying the filter sigma relative%                    to the wavelength of the filter.  This is done so%                    that the shapes of the filters are invariant to the%                    scale.  kx controls the sigma in the x direction%                    which is along the filter, and hence controls the%                    bandwidth of the filter.  ky controls the sigma%                    across the filter and hence controls the%                    orientational selectivity of the filter. A value of%                    0.5 for both kx and ky is a good starting point.%         showfilter - An optional flag 0/1.  When set an image of the%                      largest scale filter is displayed for inspection.% % Returns:%         newim    - The enhanced image%% See also: RIDGEORIENT, RIDGEFREQ, RIDGESEGMENT% Reference: % Hong, L., Wan, Y., and Jain, A. K. Fingerprint image enhancement:% Algorithm and performance evaluation. IEEE Transactions on Pattern% Analysis and Machine Intelligence 20, 8 (1998), 777 789.% Peter Kovesi  % School of Computer Science & Software Engineering% The University of Western Australia% pk at csse uwa edu au% http://www.csse.uwa.edu.au/~pk%% January 2005function newim = ridgefilter(im, orient, freq, kx, ky, showfilter)    if nargin == 5        showfilter = 0;    end        angleInc = 3;  % Fixed angle increment between filter orientations in                   % degrees. This should divide evenly into 180        im = double(im);    [rows, cols] = size(im);    newim = zeros(rows,cols);        [validr,validc] = find(freq > 0);  % find where there is valid frequency data.    ind = sub2ind([rows,cols], validr, validc);    % Round the array of frequencies to the nearest 0.01 to reduce the    % number of distinct frequencies we have to deal with.    freq(ind) = round(freq(ind)*100)/100;        % Generate an array of the distinct frequencies present in the array    % freq     unfreq = unique(freq(ind));         % Generate a table, given the frequency value multiplied by 100 to obtain    % an integer index, returns the index within the unfreq array that it    % corresponds to    freqindex = ones(100,1);    for k = 1:length(unfreq)        freqindex(round(unfreq(k)*100)) = k;    end        % Generate filters corresponding to these distinct frequencies and    % orientations in 'angleInc' increments.    filter = cell(length(unfreq),180/angleInc);    sze = zeros(length(unfreq),1);        for k = 1:length(unfreq)        sigmax = 1/unfreq(k)*kx;        sigmay = 1/unfreq(k)*ky;                sze(k) = round(3*max(sigmax,sigmay));        [x,y] = meshgrid(-sze(k):sze(k));        reffilter = exp(-(x.^2/sigmax^2 + y.^2/sigmay^2)/2)...                .*cos(2*pi*unfreq(k)*x);        % Generate rotated versions of the filter.  Note orientation        % image provides orientation *along* the ridges, hence +90        % degrees, and imrotate requires angles +ve anticlockwise, hence        % the minus sign.        for o = 1:180/angleInc            filter{k,o} = imrotate(reffilter,-(o*angleInc+90),'bilinear','crop');         end    end    if showfilter % Display largest scale filter for inspection        figure(7), imshow(filter{1,end},[]); title('filter');     end        % Find indices of matrix points greater than maxsze from the image    % boundary    maxsze = sze(1);        finalind = find(validr>maxsze & validr<rows-maxsze & ...                    validc>maxsze & validc<cols-maxsze);        % Convert orientation matrix values from radians to an index value    % that corresponds to round(degrees/angleInc)    maxorientindex = round(180/angleInc);    orientindex = round(orient/pi*180/angleInc);    i = find(orientindex < 1);   orientindex(i) = orientindex(i)+maxorientindex;    i = find(orientindex > maxorientindex);     orientindex(i) = orientindex(i)-maxorientindex;     % Finally do the filtering    for k = 1:length(finalind)        r = validr(finalind(k));        c = validc(finalind(k));        % find filter corresponding to freq(r,c)        filterindex = freqindex(round(freq(r,c)*100));                s = sze(filterindex);           newim(r,c) = sum(sum(im(r-s:r+s, c-s:c+s).*filter{filterindex,orientindex(r,c)}));    end    

⌨️ 快捷键说明

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