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

📄 fingerprint.m

📁 自己的最近一直在用的程序 自己的最近一直在用的程序
💻 M
字号:
% Bibliography
% Thai, Raymond. Fingerprint Image Enhancement and Minutiae Extraction. 
% read image into memory
img = imread('fingerprints/21_8.bmp');

% convert to gray scale and thin image at same time
thinned = edge(RGB2GRAY(img), 'canny');

% minutiae counter
minu_count = 1;
minutiae(minu_count, :) = [0,0,0,0];
% loop through image and find minutiae, ignore 10 pixels for border
for x=10:size(img, 2) - 10
    for y=10:size(img,1) - 10
        if (thinned(x, y) == 1) % only continue if pixel is white
            % calculate CN from Raymond Thai
            CN = 0;
            for i = 1:8
                CN = CN + abs (P(thinned, x, y, i) - P(thinned, x, y, i + 1));
            end   
            CN = CN / 2;
            
            if (CN == 1) | (CN == 3)
                theta = FindTheta(thinned, x, y, CN);
                minutiae(minu_count, :) = [x, y, CN, theta];
                minu_count = minu_count + 1;
            end
        end % if pixel white
    end % for y
end % for x

% make minutiae image
minutiae_img = uint8(zeros(size(img, 1),size(img, 2), 3));
for i=1:minu_count - 1
    x1 = minutiae(i, 1);
    y1 = minutiae(i, 2);
    if (minutiae(i, 3) == 1) 
        minutiae_img(x1, y1,:) = [255, 0, 0]; % red for ridge endings
    else
        minutiae_img(x1, y1,:) = [0, 0, 255]; % blue for ridge bijections
    end

%********IGNORE FOLLOWING FOR NOW*************************
%    % cos and sin in radians we have theta in degrees so convert
%    
%    x2 = round(x1 + 3  * cos(minutiae(1,4)));
%    y2 = round(y1 + 3  * sin(minutiae(1,4)));
%
%    % make sure does not go outside of boundary
%    if (x2 < 0) 
%        x2 = 0;
%    end
%    if (x2 > size(minutiae_img, 2))
%        x2 = size(minutiae_img, 2);
%    end
%    if (y2 < 0)
%        y2 = 0;
%    end
%    if (y2 > size(minutiae_img, 1))
%        y2 = size(minutiae_img, 1);
%    end
%   minutiae_img = func_DrawLine(minutiae_img, x1, y1, x2, y2, 1);
%*********END IGNORE******************************************
end % for loop through minu_count

% merge thinned image and minutia_img together
combined = uint8(minutiae_img);
for x=1:size(thinned)
    for y=1:size(thinned)
        if (thinned(x,y))
            combined(x,y,:) = [255,255,255];
        else
            combined(x,y,:) = [0,0,0];
        end % end if
        if ((minutiae_img(x,y,3) ~= 0) | (minutiae_img(x,y,1) ~= 0))
            combined(x,y,:) = minutiae_img(x,y,:);
        end
        
    end % end for y
end % end for x

subplot(2,2,1), subimage(img), title('orignal image')
subplot(2,2,2), subimage(thinned), title('thinned image')
subplot(2,2,3), subimage(minutiae_img), title('minutiae points')
subplot(2,2,4), subimage(combined), title('thinned and minutiae points')

⌨️ 快捷键说明

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