【图像识别】身份证号码识别matlab源码

简介:

       本文主要介绍几种基于灰度的图像匹配算法:平均绝对差算法(MAD)、绝对误差和算法(SAD)、误差平方和算法(SSD)、平均误差平方和算法(MSD)、归一化积相关算法(NCC)、序贯相似性检测算法(SSDA)、hadamard变换算法(SATD)。下面依次对其进行讲解。

MAD算法

介绍

        平均绝对差算法(Mean Absolute Differences,简称MAD算法),它是Leese1971年提出的一种匹配算法。是模式识别中常用方法,该算法的思想简单,具有较高的匹配精度,广泛用于图像匹配。

S(x,y) 是大小为mxn的搜索图像,T(x,y)MxN的模板图像,分别如下图 (a)(b) 所示,我们的目的是:在 (a) 中找到与 (b) 匹配的区域(黄框所示)。

算法思路

        在搜索图S中,以 (i,j) 为左上角,取MxN大小的子图,计算其与模板的相似度;遍历整个搜索图,在所有能够取到的子图中,找到与模板图最相似的子图作为最终匹配结果。

MAD算法的相似性测度公式如下。显然,平均绝对差D(i,j) 越小,表明越相似,故只需找到最小的D(i,j) 即可确定能匹配的子图位置:

其中:

算法评价:

优点:

思路简单,容易理解(子图与模板图对应位置上,灰度值之差的绝对值总和,再求平均,实质:是计算的是子图与模板图的L1距离的平均值)。

运算过程简单,匹配精度高。

缺点:

运算量偏大。

对噪声非常敏感。

——————————————————————————————————————————————————————————————————————————————

SAD算法

介绍

        绝对误差和算法(Sum of Absolute Differences,简称SAD算法)。实际上,SAD算法与MAD算法思想几乎是完全一致,只是其相似度测量公式有一点改动(计算的是子图与模板图的L1距离),这里不再赘述。

``` function varargout = homework2(varargin) % HOMEWORK2 M-file for homework2.fig % HOMEWORK2, by itself, creates a new HOMEWORK2 or raises the existing % singleton. % % H = HOMEWORK2 returns the handle to a new HOMEWORK2 or the handle to % the existing singleton. % % HOMEWORK2('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in HOMEWORK2.M with the given input arguments. % % HOMEWORK2('Property','Value',...) creates a new HOMEWORK2 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before homework2OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to homework2OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help homework2

% Last Modified by GUIDE v2.5 20-May-2013 21:21:00

% Begin initialization code - DO NOT EDIT guiSingleton = 1; guiState = struct('guiName', mfilename, ... 'guiSingleton', guiSingleton, ... 'guiOpeningFcn', @homework2OpeningFcn, ... 'guiOutputFcn', @homework2OutputFcn, ... 'guiLayoutFcn', [] , ... 'guiCallback', []); if nargin && ischar(varargin{1}) guiState.gui_Callback = str2func(varargin{1}); end

if nargout [varargout{1:nargout}] = guimainfcn(guiState, varargin{:}); else guimainfcn(guiState, varargin{:}); end % End initialization code - DO NOT EDIT

% --- Executes just before homework2 is made visible. function homework2_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to homework2 (see VARARGIN)

% Choose default command line output for homework2 handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes homework2 wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = homework2_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

%载入原始身份证图像的回调函数 % --- Executes on button press in OriginalImg. function OriginalImg_Callback(hObject, eventdata, handles) % hObject handle to OriginalImg (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [FileName,PathName] = uigetfile('*.jpg','Select an image'); if PathName~=0 str = [PathName,FileName]; T=imread(str); axes(handles.Img); imshow(T); end

%图像自动亮度调整的回调函数 % --- Executes on button press in autoLight. function autoLight_Callback(hObject, eventdata, handles) % hObject handle to autoLight (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.Img); T=getimage;

lowout=0.2; highout=0.9; gamma=1.518; hsv=rgb2hsv(T); I=hsv(:,:,3); minL=min(min(I)); maxL=max(max(I)); J=imadjust(I,[minL;maxL],[lowout;highout],gamma); hsv(:,:,3)=J; rgbatuoI=hsv2rgb(hsv); axes(handles.Light); imshow(rgbatuoI);

%图像二值化的回调函数 % --- Executes on button press in DIP. function DIP_Callback(hObject, eventdata, handles) % hObject handle to DIP (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.Img); I=getimage; [m,n,r]=size(I);%图像的像素为width*height %%%%%蓝色字体变黑 myI=double(I);

for i=1:m for j=1:n if((myI(i,j,1)>=15)&&(myI(i,j,1)<=130)&&((myI(i,j,2)<=165)&&(myI(i,j,2)>=90))&&((myI(i,j,3)<=220)&&(myI(i,j,3)>=135))) % 蓝色RGB的灰度范围 I(i,j,1)=40; %红色分量 I(i,j,2)=40; %绿色分量 I(i,j,3)=40; %蓝色分量 end
end
end %figure, imshow(I);title('变色后的图像');

width=round(0.9n);height=round(0.87m); rx=round(0.05n);cy=round(0.075m); I=subim(I,height,width,rx,cy); %figure,imshow(I);

if sum(size(I)>0)==3 %倘若是彩色图--2维*3,先转换成灰度图 I=rgb2gray(I); end %figure,imhist(I); x=3;%行数分为x部分 y=1;%列数分为y部分 BW=erzhihua(I,x,y);

[n m l]=size(BW);%图像的像素为mn c = [0.65m 0.65m m m]; r = [0 0.85n 0.85*n 0]; BW = roifill(BW,c,r);

BW=imadjust(BW);%使用imadjust函数对图像进行增强对比度 % Convert to BW threshold = graythresh(BW); BW =~im2bw(BW,0.6*threshold);

[imageh imagew]=size(BW); % Remove all object containing fewer than (imagen/80) pixels BW = bwareaopen(BW,floor(image_w/80)); % 滤波 %h=fspecial('average',1); %BW=im2bw(round(filter2(h,BW))); %imwrite(d,'4.均值滤波后.jpg'); axes(handles.Binary); imshow(BW);

%图像分割与识别按钮的回调函数 % --- Executes on button press in OCR. function OCRCallback(hObject, eventdata, handles) % hObject handle to OCR (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.Binary); imagen = getimage; [imageh image_w]=size(imagen); %figure;imshow(imagen);title('INPUT IMAGE')

% Convert to gray scale if size(imagen,3)==3 %RGB image imagen=rgb2gray(imagen); end

%Storage matrix word from image word=[ ]; re=imagen; %Opens text.txt as file for write fid = fopen('IDcard.txt', 'wt'); % Load templates load templates global templates % Compute the number of letters in template file numletras=size(templates,2); figure; plotflag=1; while 1 %Fcn 'lines' separate lines in text [fl re]=lines(re); imgn=fl; [lineh line_w]=size(fl);%记录下切割出来的一行字符的长宽 %Uncomment line below to see lines one by one % imshow(fl);pause(1)
%-----------------------------------------------------------------
% Label and count connected components [L Ne] = bwlabel(imgn);

n=1;%记录循环次数

while(n<=Ne) charflag=0;%为0时,是第一次判断这个连通域 flag=1;%初始化两个连通域属于同个字符 while(flag==1)
if char
flag==0 [r,c] = find(L==n); Width0=max(r)-min(r);%连通域宽度 Height0=max(c)-min(c);%连通域高度 Radio0=Width0/Height0;%连通域宽高比 Square0=Width0Height0;%连通域面积 maxr=max(r); maxc=max(c); minr=min(r); minc=min(c); end if n =-(image_w/pw)&&Owidth<=0)||(Oheigth>=-(line_h 0.3)&&Oheigth<=0))%两个连通域较近,但不重叠 if((Uradio>=0.8)&&(Uradio<=1.2))%认为两个连通域属于同一个字符 elseif Uheight end elseif(flag==1)&&(Owidth<-(image_w/pw))%两个连通域里相距较远 flag=0;%两个连通域属于不同字符 % elseif(flag==1)&&((Owidth>0)||(Oheigth>0))%两连通域重叠 elseif(flag==1)&&((Owidth>0))%两连通域重叠 if(((Uradio>=0.78)&&(Uradio<=1.3)))%认为两个连通域属于同一个字符 elseif(Osquare>=0.4min(Square0,Square1)&&(Uwidth Height0;%连通域面积 maxr=max(maxr,max(r1)); maxc=max(maxc,max(c1)); minr=min(minr,min(r1)); minc=min(minc,min(c1)); n=n+1;%指向下一个连通域 char_flag=1; end end %while(flag==1)的end

% Extract letter
    n1=imgn(minr:maxr,minc:maxc);  
    % Resize letter (same size of template)
    img_r=imresize(n1,[36 23]);
    subplot(10,10,plot_flag),imshow(img_r);title(plot_flag);
    plot_flag=plot_flag+1;
    %Uncomment line below to see letters one by one
    % imshow(img_r);title(n);pause(0.5)
    %-------------------------------------------------------------------
    % Call fcn to convert image to text
    letter=read_letter(img_r,num_letras);
    % Letter concatenation
    word=[word letter];
    n=n+1;
end % while(n<=Ne)的end
%fprintf(fid,'%s\n',lower(word));%Write 'word' in text file (lower)
fprintf(fid,'%s\n',word);%Write 'word' in text file (upper)
% Clear 'word' variable
word=[ ];
%*When the sentences finish, breaks the loop
if isempty(re)  %See variable 're' in Fcn 'lines'
    break
end

end fclose(fid); %Open 'IDcard.txt' file winopen('IDcard.txt')

% --- Executes on button press in Exit. function Exit_Callback(hObject, eventdata, handles) % hObject handle to Exit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc; close all; close(gcf); ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值