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

📄 freqest.m

📁 图象分割 边缘检测 的 指纹分割算法
💻 M
字号:
% FREQEST - Estimate fingerprint ridge frequency within image block%% Function to estimate the fingerprint ridge frequency within a small block% of a fingerprint image.  This function is used by RIDGEFREQ%% Usage:%  freqim =  freqest(im, orientim, windsze, minWaveLength, maxWaveLength)%% Arguments:%         im       - Image block to be processed.%         orientim - Ridge orientation image of image block.%         windsze  - Window length used to identify peaks. This should be%                    an odd integer, say 3 or 5.%         minWaveLength,  maxWaveLength - Minimum and maximum ridge%                     wavelengths, in pixels, considered acceptable.% % Returns:%         freqim    - An image block the same size as im with all values%                     set to the estimated ridge spatial frequency.  If a%                     ridge frequency cannot be found, or cannot be found%                     within the limits set by min and max Wavlength%                     freqim is set to zeros.%% Suggested parameters for a 500dpi fingerprint image%   freqim = freqest(im,orientim, 5, 5, 15);%% See also:  RIDGEFREQ, RIDGEORIENT, RIDGESEGMENT%% Note I am not entirely satisfied with the output of this function.% 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 2005    function freqim =  freqest(im, orientim, windsze, minWaveLength, maxWaveLength)        debug = 0;        [rows,cols] = size(im);        % Find mean orientation within the block. This is done by averaging the    % sines and cosines of the doubled angles before reconstructing the    % angle again.  This avoids wraparound problems at the origin.    orientim = 2*orientim(:);        cosorient = mean(cos(orientim));    sinorient = mean(sin(orientim));        orient = atan2(sinorient,cosorient)/2;    % Rotate the image block so that the ridges are vertical    rotim = imrotate(im,orient/pi*180+90,'nearest', 'crop');        % Now crop the image so that the rotated image does not contain any    % invalid regions.  This prevents the projection down the columns    % from being mucked up.    cropsze = fix(rows/sqrt(2)); offset = fix((rows-cropsze)/2);    rotim = rotim(offset:offset+cropsze, offset:offset+cropsze);    % Sum down the columns to get a projection of the grey values down    % the ridges.    proj = sum(rotim);        % Find peaks in projected grey values by performing a greyscale    % dilation and then finding where the dilation equals the original    % values.     dilation = ordfilt2(proj, windsze, ones(1,windsze));    maxpts = (dilation == proj) & (proj > mean(proj));    maxind = find(maxpts);    % Determine the spatial frequency of the ridges by divinding the    % distance between the 1st and last peaks by the (No of peaks-1). If no    % peaks are detected, or the wavelength is outside the allowed bounds,    % the frequency image is set to 0    if length(maxind) < 2	freqim = zeros(size(im));    else	NoOfPeaks = length(maxind);	waveLength = (maxind(end)-maxind(1))/(NoOfPeaks-1);	if waveLength > minWaveLength & waveLength < maxWaveLength	    freqim = 1/waveLength * ones(size(im));	else	    freqim = zeros(size(im));	end    end        if debug	show(im,1)	show(rotim,2);	figure(3),    plot(proj), hold on	meanproj = mean(proj)	if length(maxind) < 2	    fprintf('No peaks found\n');	else	    plot(maxind,dilation(maxind),'r*'), hold off	    waveLength = (maxind(end)-maxind(1))/(NoOfPeaks-1);	end    end    

⌨️ 快捷键说明

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