📄 freqest.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 + -