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

📄 mapmanage.pas

📁 模板匹配之手写数字识别系统,基于DELPHI 7.0
💻 PAS
字号:
unit mapmanage;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, typevalue;

//  featruestr:array [1..8,1..8] of integer=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
type
    NumCharPattern = record
        Num: integer;
        FeatureDetail: array[0..20,1..8,1..8] of integer;
      //  Number,Total:integer;
    end;
    FindNumber = record
        Numb:integer;
        order: array[0..20] of integer;
    end;
type
    TFeatrue = class
    private
      Featruetype: array [0..19,0..63] of integer;
      class function GetSubStr(var aString:String;SepChar:String):String;
      class function GetSubStrNum(aString:String;SepChar:String):integer;
    public
      class procedure savetofile(FileName: string);
      class procedure Openfile();
      class function MapCmp():double;
    end;

var
    featruestr:array [1..8,1..8] of integer;
implementation

uses main;


class procedure Tfeatrue.savetofile(FileName: string);
var
 n,i,j,k,m:integer;
 SepChar:String;
 f:TextFile;
 pathstring:string;
begin
  if RecogForm.SaveDialog1.Execute then
     pathstring:=ExtractFilePath(Application.ExeName)+'feature\pattern.txt';
     assignfile(f,'pattern.txt');
     RecogForm.savedialog1.Filter:='*.txt|*.txt';
   begin
      assignfile(f,'pattern.txt');
      rewrite(f);
      SepChar:=' ';
          for m := 0 to 9 do
             if pattern[m].Num=0 then
                begin
                  writeln(f,inttostr(m));
                  writeln(f,inttostr(0));
                end
                else
                  if pattern[m].Num<>0 then
                     begin
                       writeln(f,inttostr(m));
                       writeln(f,inttostr(pattern[m].Num));
                       for k:=1 to  pattern[m].Num do
                            begin
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][1,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][1,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][1,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][2,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][2,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][2,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][3,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][3,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][3,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][4,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][4,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][4,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][5,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][5,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][5,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][6,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][6,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][6,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][7,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][7,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][7,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,8]),SepChar);
                             writeln(f,inttostr(pattern[m].FeatureDetail[k][8,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,3])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][8,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,6])
                                    ,SepChar,inttostr(pattern[m].FeatureDetail[k][8,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,8]),SepChar);
                             end;
                     end;
                    CloseFile(f);
               end;
           end;

class procedure Tfeatrue.Openfile();
var
  i,j,m,n,amout,t,k,resultFeature:Integer;
  Number,Total,FeatrueCode:integer;
  MyLine,sNumber,sTotal,sFeatrueCode,SepChar: string;
  item: array [1..8] of string;
  f:TextFile;
  count_s, count_d, ok:  integer;
  CmpResult,RecResult:double;

begin
//if RecogForm.OpenDialog1.Execute then
  Try
     begin
       //if RecogForm.OpenDialog1.Execute then
         begin
          {$I-}
             pathstring:=ExtractFilePath(Application.ExeName)+'\feature\pattern.txt';
             AssignFile(f,pathstring);
             Reset(f);
             SepChar:=' ';
             RecResult:=10000;
            while not Eof(f)do
               begin
                  ReadLn(f,sNumber);
                  Number:=strtoint(sNumber);
                  ReadLn(f,sTotal);
                  Total:=strtoint(sTotal);
                 if Total <> 0  then
                 begin
                    pattern[Number].num:=Total;
                   for n:=1 to  Total do             // 特征值的总数
                     begin
                       for i:=1 to  8 do
                         begin              //8行特征
                            ReadLn(f,sFeatrueCode);
                            MyLine:=sFeatrueCode;
                            Amout:=GetSubStrNum(Myline,SepChar);
                           begin
                             for t:=1 to Amout do         //每一行的字符数
                               item[t]:=GetSubStr(MyLine,SepChar); //分开的字符数组
                           end;
                           for j:= 1 to  8  do
                              pattern[Number].FeatureDetail[n][i][j]:=strtoint(item[j]);
                        end;
                   end;
               end;
         end;
     end;
   end;
//   resultFeature:= pattern[Number].FeatureDetail[total][i][j];
   {$I+}
   CloseFile(f);
   Finally
 end;
 end;
//end;
class function TFeatrue.GetSubStr(var aString:String;SepChar:String):String;
 var
  Mystr:String;
  StrLen:Integer;
  SepCharPos:Integer;
 begin
   StrLen:=Length(aString);
   SepCharPos:=Pos(SepChar,aString); //计算分割符在子串中的位置
   MyStr:=Copy(aString,1,SepCharPos-1); //将分割符前所有字符放到mystr串中
   Delete(aString,1,SepCharPos); //除去分割符和分割符前的子串
   GetSubStr:=MyStr; //返回一个字段
 end;

class function TFeatrue.GetSubStrNum(aString:String;SepChar:String):integer;
 var
  i:Integer;
  StrLen:Integer;
  Num:Integer;
 begin
   StrLen:=Length(aString);
   Num:=0;
    For i:=1 to StrLen do
      If Copy(aString,i,1) = SepChar then
        Num:=Num+1;
        result:=Num;
 end;

class function TFeatrue.MapCmp():double;
 var
  i,j,m,n,amout,t,k:Integer;
  Number,Total,FeatrueCode:integer;
  NumberAsSame,max,ReconFinalNumber,ReconFinalNumberIndex:integer;
  recgNumber:array [0..9] of FindNumber;

 begin
    ReconFinalNumber:=-1;
    ReconFinalNumberIndex:=-1;
    max:=0;
  for number:=0 to 9   do
  begin
   if  pattern[Number].num <> 0 then
   begin
     for k:=1 to pattern[Number].num do
     begin
         NumberAsSame:=0;
         for i := 1 to 8 do
         for j := 1 to 8 do
           begin
            if (pattern[Number].FeatureDetail[k][i][j]=Feight[j][i])  
          then
             begin   NumberAsSame:=NumberAsSame+1;   end;
            end;
           if max<NumberAsSame then
                             begin
                             max:=NumberAsSame; ReconFinalNumber:=Number;
                             ReconFinalNumberIndex:=k;
                             end;
           end;
      end;
    end;
        RecogForm.NumberResultEdit.Text:= inttostr(ReconFinalNumber);
        RecogForm.NumberIndexResultEdit.Text:= inttostr(ReconFinalNumberIndex);
        RecogForm.NumberLabel.Caption:=IntToStr(ReconFinalNumber);
 end;

end.

⌨️ 快捷键说明

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