2020-10-19 10:58:10 +00:00

12 lines
32 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package classer ;import (_eb "github.com/unidoc/unipdf/v3/common";_ge "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_f "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_bc "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_e "image";_g "math";);var _cga bool ;func (_adg Settings )Validate ()error {const _fbde ="\u0053\u0065\u0074\u0074\u0069\u006e\u0067\u0073\u002e\u0056\u0061\u006ci\u0064\u0061\u0074\u0065";if _adg .Thresh < 0.4||_adg .Thresh > 0.98{return _bc .Error (_fbde ,"\u006a\u0062i\u0067\u0032\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0030\u002e\u0034\u0020\u002d\u0020\u0030\u002e\u0039\u0038\u005d");};if _adg .WeightFactor < 0.0||_adg .WeightFactor > 1.0{return _bc .Error (_fbde ,"\u006a\u0062i\u0067\u0032\u0020\u0065\u006ec\u006f\u0064\u0065\u0072\u0020w\u0065\u0069\u0067\u0068\u0074\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0030\u002e\u0030\u0020\u002d\u0020\u0031\u002e\u0030\u005d");};if _adg .RankHaus < 0.5||_adg .RankHaus > 1.0{return _bc .Error (_fbde ,"\u006a\u0062\u0069\u0067\u0032\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0072a\u006e\u006b\u0020\u0068\u0061\u0075\u0073\u0020\u0076\u0061\u006c\u0075\u0065 \u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 [\u0030\u002e\u0035\u0020\u002d\u0020\u0031\u002e\u0030\u005d");};if _adg .SizeHaus < 1||_adg .SizeHaus > 10{return _bc .Error (_fbde ,"\u006a\u0062\u0069\u0067\u0032 \u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0073\u0069\u007a\u0065\u0020h\u0061\u0075\u0073\u0020\u0076\u0061\u006c\u0075\u0065\u0020\u006e\u006f\u0074\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u005b\u0031\u0020\u002d\u0020\u0031\u0030]");};switch _adg .Components {case _f .ComponentConn ,_f .ComponentCharacters ,_f .ComponentWords :default:return _bc .Error (_fbde ,"\u0069n\u0076\u0061\u006c\u0069d\u0020\u0063\u006c\u0061\u0073s\u0065r\u0020c\u006f\u006d\u0070\u006f\u006e\u0065\u006et");};return nil ;};type Method int ;const (MaxConnCompWidth =350;MaxCharCompWidth =350;MaxWordCompWidth =1000;MaxCompHeight =120;);func (_fg *Classer )addPageComponents (_df *_f .Bitmap ,_gb *_f .Boxes ,_cd *_f .Bitmaps ,_gec int ,_ggd Method )error {const _dd ="\u0043l\u0061\u0073\u0073\u0065r\u002e\u0041\u0064\u0064\u0050a\u0067e\u0043o\u006d\u0070\u006f\u006e\u0065\u006e\u0074s";if _df ==nil {return _bc .Error (_dd ,"\u006e\u0069\u006c\u0020\u0069\u006e\u0070\u0075\u0074 \u0070\u0061\u0067\u0065");};if _gb ==nil ||_cd ==nil ||len (*_gb )==0{_eb .Log .Trace ("\u0041\u0064\u0064P\u0061\u0067\u0065\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u003a\u0020\u0025\u0073\u002e\u0020\u004e\u006f\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074\u0073\u0020\u0066\u006f\u0075\u006e\u0064",_df );return nil ;};var _ed error ;switch _ggd {case RankHaus :_ed =_fg .classifyRankHaus (_gb ,_cd ,_gec );case Correlation :_ed =_fg .classifyCorrelation (_gb ,_cd ,_gec );default:_eb .Log .Debug ("\u0055\u006ek\u006e\u006f\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064\u003a\u0020'%\u0076\u0027",_ggd );return _bc .Error (_dd ,"\u0075\u006e\u006bno\u0077\u006e\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0079\u0020\u006d\u0065\u0074\u0068\u006f\u0064");};if _ed !=nil {return _bc .Wrap (_ed ,_dd ,"");};if _ed =_fg .getULCorners (_df ,_gb );_ed !=nil {return _bc .Wrap (_ed ,_dd ,"");};_fe :=len (*_gb );_fg .BaseIndex +=_fe ;if _ed =_fg .ComponentsNumber .Add (_fe );_ed !=nil {return _bc .Wrap (_ed ,_dd ,"");};return nil ;};func (_dfge *Classer )classifyRankHouseNonOne (_cdb *_f .Boxes ,_eag ,_cgag ,_fcf *_f .Bitmaps ,_fga *_f .Points ,_cea *_ge .NumSlice ,_bea int )(_gcb error ){const _gbfgd ="\u0043\u006c\u0061\u0073s\u0065\u0072\u002e\u0063\u006c\u0061\u0073\u0073\u0069\u0066y\u0052a\u006e\u006b\u0048\u006f\u0075\u0073\u0065O\u006e\u0065";var (_faa ,_ebd ,_cgaa ,_dae float32 ;_bcd ,_ecb ,_efb int ;_ace ,_aba ,_fda ,_cagf ,_eea *_f .Bitmap ;_ggdg ,_fff bool ;);_fdaa :=_f .MakePixelSumTab8 ();for _bfb :=0;_bfb < len (_eag .Values );_bfb ++{if _aba ,_gcb =_cgag .GetBitmap (_bfb );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"b\u006d\u0073\u0031\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _bcd ,_gcb =_cea .GetInt (_bfb );_gcb !=nil {_eb .Log .Trace ("\u0047\u0065t\u0074\u0069\u006e\u0067 \u0046\u0047T\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073 \u0061\u0074\u003a\u0020\u0025\u0064\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_bfb ,_gcb );};if _fda ,_gcb =_fcf .GetBitmap (_bfb );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"b\u006d\u0073\u0032\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};if _faa ,_ebd ,_gcb =_fga .GetGeometry (_bfb );_gcb !=nil {return _bc .Wrapf (_gcb ,_gbfgd ,"\u0070t\u0061[\u0069\u005d\u002e\u0047\u0065\u006f\u006d\u0065\u0074\u0072\u0079");};_fae :=len (_dfge .UndilatedTemplates .Values );_ggdg =false ;_cce :=_ged (_dfge ,_aba );for _efb =_cce .Next ();_efb > -1;{if _cagf ,_gcb =_dfge .UndilatedTemplates .GetBitmap (_efb );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"\u0070\u0069\u0078\u0061\u0074\u002e\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _ecb ,_gcb =_dfge .FgTemplates .GetInt (_efb );_gcb !=nil {_eb .Log .Trace ("\u0047\u0065\u0074\u0074\u0069\u006eg\u0020\u0046\u0047\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u005b\u0025d\u005d\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_efb ,_gcb );};if _eea ,_gcb =_dfge .DilatedTemplates .GetBitmap (_efb );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"\u0070\u0069\u0078\u0061\u0074\u0064\u005b\u0069\u0043l\u0061\u0073\u0073\u005d");};if _cgaa ,_dae ,_gcb =_dfge .CentroidPointsTemplates .GetGeometry (_efb );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"\u0043\u0065\u006et\u0072\u006f\u0069\u0064P\u006f\u0069\u006e\u0074\u0073\u0054\u0065m\u0070\u006c\u0061\u0074\u0065\u0073\u005b\u0069\u0043\u006c\u0061\u0073\u0073\u005d");};_fff ,_gcb =_f .RankHausTest (_aba ,_fda ,_cagf ,_eea ,_faa -_cgaa ,_ebd -_dae ,MaxDiffWidth ,MaxDiffHeight ,_bcd ,_ecb ,float32 (_dfge .Settings .RankHaus ),_fdaa );if _gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"");};if _fff {_ggdg =true ;if _gcb =_dfge .ClassIDs .Add (_efb );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"");};if _gcb =_dfge .ComponentPageNumbers .Add (_bea );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"");};if _dfge .Settings .KeepClassInstances {_fag ,_abbb :=_dfge .ClassInstances .GetBitmaps (_efb );if _abbb !=nil {return _bc .Wrap (_abbb ,_gbfgd ,"\u0063\u002e\u0050\u0069\u0078\u0061\u0061\u002e\u0047\u0065\u0074B\u0069\u0074\u006d\u0061\u0070\u0073\u0028\u0069\u0043\u006ca\u0073\u0073\u0029");};if _ace ,_abbb =_eag .GetBitmap (_bfb );_abbb !=nil {return _bc .Wrap (_abbb ,_gbfgd ,"\u0070i\u0078\u0061\u005b\u0069\u005d");};_fag .Values =append (_fag .Values ,_ace );_bef ,_abbb :=_cdb .Get (_bfb );if _abbb !=nil {return _bc .Wrap (_abbb ,_gbfgd ,"b\u006f\u0078\u0061\u002e\u0047\u0065\u0074\u0028\u0069\u0029");};_fag .Boxes =append (_fag .Boxes ,_bef );};break ;};};if !_ggdg {if _gcb =_dfge .ClassIDs .Add (_fae );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _gcb =_dfge .ComponentPageNumbers .Add (_bea );_gcb !=nil {return _bc .Wrap (_gcb ,_gbfgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_gde :=&_f .Bitmaps {};_ace =_eag .Values [_bfb ];_gde .AddBitmap (_ace );_eeb ,_ccd :=_ace .Width ,_ace .Height ;_dfge .TemplatesSize .Add (uint64 (_eeb )*uint64 (_ccd ),_fae );_aade ,_bfba :=_cdb .Get (_bfb );if _bfba !=nil {return _bc .Wrap (_bfba ,_gbfgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_gde .AddBox (_aade );_dfge .ClassInstances .AddBitmaps (_gde );_dfge .CentroidPointsTemplates .AddPoint (_faa ,_ebd );_dfge .UndilatedTemplates .AddBitmap (_aba );_dfge .DilatedTemplates .AddBitmap (_fda );_dfge .FgTemplates .AddInt (_bcd );};};_dfge .NumberOfClasses =len (_dfge .UndilatedTemplates .Values );return nil ;};func _fde (_ffg *_f .Bitmap ,_ggf ,_aec ,_fgd ,_ga int ,_gba *_f .Bitmap )(_bce _e .Point ,_aab error ){const _fbg ="\u0066i\u006e\u0061\u006c\u0041l\u0069\u0067\u006e\u006d\u0065n\u0074P\u006fs\u0069\u0074\u0069\u006f\u006e\u0069\u006eg";if _ffg ==nil {return _bce ,_bc .Error (_fbg ,"\u0073\u006f\u0075\u0072ce\u0020\u006e\u006f\u0074\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};if _gba ==nil {return _bce ,_bc .Error (_fbg ,"t\u0065\u006d\u0070\u006cat\u0065 \u006e\u006f\u0074\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064");};_ccb ,_gge :=_gba .Width ,_gba .Height ;_ddc ,_cbd :=_ggf -_fgd -JbAddedPixels ,_aec -_ga -JbAddedPixels ;_eb .Log .Trace ("\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0077\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0068\u003a \u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0078\u003a\u0020\u0027\u0025d'\u002c\u0020\u0062\u0079\u003a\u0020\u0027\u0025\u0064\u0027",_ggf ,_aec ,_ccb ,_gge ,_ddc ,_cbd );_aef ,_aab :=_f .Rect (_ddc ,_cbd ,_ccb ,_gge );if _aab !=nil {return _bce ,_bc .Wrap (_aab ,_fbg ,"");};_cg ,_ ,_aab :=_ffg .ClipRectangle (_aef );if _aab !=nil {_eb .Log .Error ("\u0043a\u006e\u0027\u0074\u0020\u0063\u006c\u0069\u0070\u0020\u0072\u0065c\u0074\u0061\u006e\u0067\u006c\u0065\u003a\u0020\u0025\u0076",_aef );return _bce ,_bc .Wrap (_aab ,_fbg ,"");};_gda :=_f .New (_cg .Width ,_cg .Height );_ada :=_g .MaxInt32 ;var _eg ,_bdd ,_eaa ,_bcec ,_dfd int ;for _eg =-1;_eg <=1;_eg ++{for _bdd =-1;_bdd <=1;_bdd ++{if _ ,_aab =_f .Copy (_gda ,_cg );_aab !=nil {return _bce ,_bc .Wrap (_aab ,_fbg ,"");};if _aab =_gda .RasterOperation (_bdd ,_eg ,_ccb ,_gge ,_f .PixSrcXorDst ,_gba ,0,0);_aab !=nil {return _bce ,_bc .Wrap (_aab ,_fbg ,"");};_eaa =_gda .CountPixels ();if _eaa < _ada {_bcec =_bdd ;_dfd =_eg ;_ada =_eaa ;};};};_bce .X =_bcec ;_bce .Y =_dfd ;return _bce ,nil ;};const JbAddedPixels =6;const (RankHaus Method =iota ;Correlation ;);func DefaultSettings ()Settings {_fbf :=&Settings {};_fbf .SetDefault ();return *_fbf };type Classer struct{BaseIndex int ;Settings Settings ;ComponentsNumber *_ge .IntSlice ;TemplateAreas *_ge .IntSlice ;Widths map[int ]int ;Heights map[int ]int ;NumberOfClasses int ;ClassInstances *_f .BitmapsArray ;UndilatedTemplates *_f .Bitmaps ;DilatedTemplates *_f .Bitmaps ;TemplatesSize _ge .IntsMap ;FgTemplates *_ge .NumSlice ;CentroidPoints *_f .Points ;CentroidPointsTemplates *_f .Points ;ClassIDs *_ge .IntSlice ;ComponentPageNumbers *_ge .IntSlice ;PtaUL *_f .Points ;PtaLL *_f .Points ;};func _ged (_cde *Classer ,_daaa *_f .Bitmap )*similarTemplatesFinder {return &similarTemplatesFinder {Width :_daaa .Width ,Height :_daaa .Height ,Classer :_cde };};type similarTemplatesFinder struct{Classer *Classer ;Width int ;Height int ;Index int ;CurrentNumbers []int ;N int ;};type Settings struct{MaxCompWidth int ;MaxCompHeight int ;SizeHaus int ;RankHaus float64 ;Thresh float64 ;WeightFactor float64 ;KeepClassInstances bool ;Components _f .Component ;Method Method ;};func (_aa *Classer )AddPage (inputPage *_f .Bitmap ,pageNumber int ,method Method )(_gg error ){const _c ="\u0043l\u0061s\u0073\u0065\u0072\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065";_aa .Widths [pageNumber ]=inputPage .Width ;_aa .Heights [pageNumber ]=inputPage .Height ;if _gg =_aa .verifyMethod (method );_gg !=nil {return _bc .Wrap (_gg ,_c ,"");};_d ,_ab ,_gg :=inputPage .GetComponents (_aa .Settings .Components ,_aa .Settings .MaxCompWidth ,_aa .Settings .MaxCompHeight );if _gg !=nil {return _bc .Wrap (_gg ,_c ,"");};_eb .Log .Debug ("\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074s\u003a\u0020\u0025\u0076",_d );if _gg =_aa .addPageComponents (inputPage ,_ab ,_d ,pageNumber ,method );_gg !=nil {return _bc .Wrap (_gg ,_c ,"");};return nil ;};var TwoByTwoWalk =[]int {0,0,0,1,-1,0,0,-1,1,0,-1,1,1,1,-1,-1,1,-1,0,-2,2,0,0,2,-2,0,-1,-2,1,-2,2,-1,2,1,1,2,-1,2,-2,1,-2,-1,-2,-2,2,-2,2,2,-2,2};func (_cb *Classer )ComputeLLCorners ()(_cc error ){const _dc ="\u0043l\u0061\u0073\u0073\u0065\u0072\u002e\u0043\u006f\u006d\u0070\u0075t\u0065\u004c\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _cb .PtaUL ==nil {return _bc .Error (_dc ,"\u0055\u004c\u0020\u0043or\u006e\u0065\u0072\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};_ebb :=len (*_cb .PtaUL );_cb .PtaLL =&_f .Points {};var (_aeb ,_ea float32 ;_fb ,_gc int ;_da *_f .Bitmap ;);for _af :=0;_af < _ebb ;_af ++{_aeb ,_ea ,_cc =_cb .PtaUL .GetGeometry (_af );if _cc !=nil {_eb .Log .Debug ("\u0047e\u0074\u0074\u0069\u006e\u0067\u0020\u0050\u0074\u0061\u0055\u004c \u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_cc );return _bc .Wrap (_cc ,_dc ,"\u0050\u0074\u0061\u0055\u004c\u0020\u0047\u0065\u006fm\u0065\u0074\u0072\u0079");};_fb ,_cc =_cb .ClassIDs .Get (_af );if _cc !=nil {_eb .Log .Debug ("\u0047\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0043\u006c\u0061s\u0073\u0049\u0044\u0020\u0066\u0061\u0069\u006c\u0065\u0064:\u0020\u0025\u0076",_cc );return _bc .Wrap (_cc ,_dc ,"\u0043l\u0061\u0073\u0073\u0049\u0044");};_da ,_cc =_cb .UndilatedTemplates .GetBitmap (_fb );if _cc !=nil {_eb .Log .Debug ("\u0047\u0065t\u0074\u0069\u006e\u0067 \u0055\u006ed\u0069\u006c\u0061\u0074\u0065\u0064\u0054\u0065m\u0070\u006c\u0061\u0074\u0065\u0073\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_cc );return _bc .Wrap (_cc ,_dc ,"\u0055\u006e\u0064\u0069la\u0074\u0065\u0064\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_gc =_da .Height ;_cb .PtaLL .AddPoint (_aeb ,_ea +float32 (_gc ));};return nil ;};func (_ffa *similarTemplatesFinder )Next ()int {var (_gdca ,_cba ,_ccdd ,_aed int ;_aag bool ;_gacd *_f .Bitmap ;_gcbe error ;);for {if _ffa .Index >=25{return -1;};_cba =_ffa .Width +TwoByTwoWalk [2*_ffa .Index ];_gdca =_ffa .Height +TwoByTwoWalk [2*_ffa .Index +1];if _gdca < 1||_cba < 1{_ffa .Index ++;continue ;};if len (_ffa .CurrentNumbers )==0{_ffa .CurrentNumbers ,_aag =_ffa .Classer .TemplatesSize .GetSlice (uint64 (_cba )*uint64 (_gdca ));if !_aag {_ffa .Index ++;continue ;};_ffa .N =0;};_ccdd =len (_ffa .CurrentNumbers );for ;_ffa .N < _ccdd ;_ffa .N ++{_aed =_ffa .CurrentNumbers [_ffa .N ];_gacd ,_gcbe =_ffa .Classer .DilatedTemplates .GetBitmap (_aed );if _gcbe !=nil {_eb .Log .Debug ("\u0046\u0069\u006e\u0064\u004e\u0065\u0078\u0074\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u003a\u0020\u0074\u0065\u006d\u0070\u006c\u0061t\u0065\u0020\u006e\u006f\u0074 \u0066\u006fu\u006e\u0064\u003a\u0020");return 0;};if _gacd .Width -2*JbAddedPixels ==_cba &&_gacd .Height -2*JbAddedPixels ==_gdca {return _aed ;};};_ffa .Index ++;_ffa .CurrentNumbers =nil ;};};func (_bec *Classer )classifyRankHaus (_caa *_f .Boxes ,_bacg *_f .Bitmaps ,_aae int )error {const _gdcb ="\u0063\u006ca\u0073\u0073\u0069f\u0079\u0052\u0061\u006e\u006b\u0048\u0061\u0075\u0073";if _caa ==nil {return _bc .Error (_gdcb ,"\u0062\u006fx\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _bacg ==nil {return _bc .Error (_gdcb ,"\u0070\u0069x\u0061\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_gbda :=len (_bacg .Values );if _gbda ==0{return _bc .Error (_gdcb ,"e\u006dp\u0074\u0079\u0020\u006e\u0065\u0077\u0020\u0063o\u006d\u0070\u006f\u006een\u0074\u0073");};_bba :=_bacg .CountPixels ();_feca :=_bec .Settings .SizeHaus ;_dcf :=_f .SelCreateBrick (_feca ,_feca ,_feca /2,_feca /2,_f .SelHit );_gadf :=&_f .Bitmaps {Values :make ([]*_f .Bitmap ,_gbda )};_ffd :=&_f .Bitmaps {Values :make ([]*_f .Bitmap ,_gbda )};var (_baee ,_bcg ,_gac *_f .Bitmap ;_dca error ;);for _gfg :=0;_gfg < _gbda ;_gfg ++{_baee ,_dca =_bacg .GetBitmap (_gfg );if _dca !=nil {return _bc .Wrap (_dca ,_gdcb ,"");};_bcg ,_dca =_baee .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _dca !=nil {return _bc .Wrap (_dca ,_gdcb ,"");};_gac ,_dca =_f .Dilate (nil ,_bcg ,_dcf );if _dca !=nil {return _bc .Wrap (_dca ,_gdcb ,"");};_gadf .Values [_gbda ]=_bcg ;_ffd .Values [_gbda ]=_gac ;};_abfg ,_dca :=_f .Centroids (_gadf .Values );if _dca !=nil {return _bc .Wrap (_dca ,_gdcb ,"");};if _dca =_abfg .Add (_bec .CentroidPoints );_dca !=nil {_eb .Log .Trace ("\u004e\u006f\u0020\u0063en\u0074\u0072\u006f\u0069\u0064\u0073\u0020\u0074\u006f\u0020\u0061\u0064\u0064");};if _bec .Settings .RankHaus ==1.0{_dca =_bec .classifyRankHouseOne (_caa ,_bacg ,_gadf ,_ffd ,_abfg ,_aae );}else {_dca =_bec .classifyRankHouseNonOne (_caa ,_bacg ,_gadf ,_ffd ,_abfg ,_bba ,_aae );};if _dca !=nil {return _bc .Wrap (_dca ,_gdcb ,"");};return nil ;};func (_bcc *Settings )SetDefault (){if _bcc .MaxCompWidth ==0{switch _bcc .Components {case _f .ComponentConn :_bcc .MaxCompWidth =MaxConnCompWidth ;case _f .ComponentCharacters :_bcc .MaxCompWidth =MaxCharCompWidth ;case _f .ComponentWords :_bcc .MaxCompWidth =MaxWordCompWidth ;};};if _bcc .MaxCompHeight ==0{_bcc .MaxCompHeight =MaxCompHeight ;};if _bcc .Thresh ==0.0{_bcc .Thresh =0.9;};if _bcc .WeightFactor ==0.0{_bcc .WeightFactor =0.75;};if _bcc .RankHaus ==0.0{_bcc .RankHaus =0.97;};if _bcc .SizeHaus ==0{_bcc .SizeHaus =2;};};func (_ff *Classer )verifyMethod (_fee Method )error {if _fee !=RankHaus &&_fee !=Correlation {return _bc .Error ("\u0076\u0065\u0072i\u0066\u0079\u004d\u0065\u0074\u0068\u006f\u0064","\u0069\u006e\u0076\u0061li\u0064\u0020\u0063\u006c\u0061\u0073\u0073\u0065\u0072\u0020\u006d\u0065\u0074\u0068o\u0064");};return nil ;};func Init (settings Settings )(*Classer ,error ){const _a ="\u0063\u006c\u0061s\u0073\u0065\u0072\u002e\u0049\u006e\u0069\u0074";_bd :=&Classer {Settings :settings ,Widths :map[int ]int {},Heights :map[int ]int {},TemplatesSize :_ge .IntsMap {},TemplateAreas :&_ge .IntSlice {},ComponentPageNumbers :&_ge .IntSlice {},ClassIDs :&_ge .IntSlice {},ComponentsNumber :&_ge .IntSlice {},CentroidPoints :&_f .Points {},CentroidPointsTemplates :&_f .Points {},UndilatedTemplates :&_f .Bitmaps {},DilatedTemplates :&_f .Bitmaps {},ClassInstances :&_f .BitmapsArray {},FgTemplates :&_ge .NumSlice {}};if _ae :=_bd .Settings .Validate ();_ae !=nil {return nil ,_bc .Wrap (_ae ,_a ,"");};return _bd ,nil ;};func (_fbd *Classer )classifyCorrelation (_ecf *_f .Boxes ,_bbc *_f .Bitmaps ,_fgc int )error {const _bgd ="\u0063\u006c\u0061\u0073si\u0066\u0079\u0043\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e";if _ecf ==nil {return _bc .Error (_bgd ,"\u006e\u0065\u0077\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0020\u0062\u006f\u0075\u006e\u0064\u0069\u006e\u0067\u0020\u0062o\u0078\u0065\u0073\u0020\u006eo\u0074\u0020f\u006f\u0075\u006e\u0064");};if _bbc ==nil {return _bc .Error (_bgd ,"\u006e\u0065wC\u006f\u006d\u0070o\u006e\u0065\u006e\u0074s b\u0069tm\u0061\u0070\u0020\u0061\u0072\u0072\u0061y \u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064");};_dcd :=len (_bbc .Values );if _dcd ==0{_eb .Log .Debug ("\u0063l\u0061\u0073s\u0069\u0066\u0079C\u006f\u0072\u0072\u0065\u006c\u0061\u0074i\u006f\u006e\u0020\u002d\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0070\u0069\u0078\u0061s\u0020\u0069\u0073\u0020\u0065\u006d\u0070\u0074\u0079");return nil ;};var (_dfb ,_deb *_f .Bitmap ;_gee error ;);_cff :=&_f .Bitmaps {Values :make ([]*_f .Bitmap ,_dcd )};for _dfe ,_feg :=range _bbc .Values {_deb ,_gee =_feg .AddBorderGeneral (JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,JbAddedPixels ,0);if _gee !=nil {return _bc .Wrap (_gee ,_bgd ,"");};_cff .Values [_dfe ]=_deb ;};_dbe :=_fbd .FgTemplates ;_fdc :=_f .MakePixelSumTab8 ();_fec :=_f .MakePixelCentroidTab8 ();_gdc :=make ([]int ,_dcd );_edc :=make ([][]int ,_dcd );_gfe :=_f .Points (make ([]_f .Point ,_dcd ));_bdb :=&_gfe ;var (_gbd ,_ggda int ;_fa ,_ce ,_cef int ;_ee ,_fgb int ;_gbf byte ;);for _abb ,_bac :=range _cff .Values {_edc [_abb ]=make ([]int ,_bac .Height );_gbd =0;_ggda =0;_ce =(_bac .Height -1)*_bac .RowStride ;_fa =0;for _fgb =_bac .Height -1;_fgb >=0;_fgb ,_ce =_fgb -1,_ce -_bac .RowStride {_edc [_abb ][_fgb ]=_fa ;_cef =0;for _ee =0;_ee < _bac .RowStride ;_ee ++{_gbf =_bac .Data [_ce +_ee ];_cef +=_fdc [_gbf ];_gbd +=_fec [_gbf ]+_ee *8*_fdc [_gbf ];};_fa +=_cef ;_ggda +=_cef *_fgb ;};_gdc [_abb ]=_fa ;if _fa > 0{(*_bdb )[_abb ]=_f .Point {X :float32 (_gbd )/float32 (_fa ),Y :float32 (_ggda )/float32 (_fa )};}else {(*_bdb )[_abb ]=_f .Point {X :float32 (_bac .Width )/float32 (2),Y :float32 (_bac .Height )/float32 (2)};};};if _gee =_fbd .CentroidPoints .Add (_bdb );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0063\u0065\u006et\u0072\u006f\u0069\u0064\u0020\u0061\u0064\u0064");};var (_dfg ,_bad ,_gbe int ;_bceb float64 ;_caf ,_bae ,_abf ,_daa float32 ;_bgg ,_cag _f .Point ;_efd bool ;_ede *similarTemplatesFinder ;_gfb int ;_cffg *_f .Bitmap ;_ceb *_e .Rectangle ;_aea *_f .Bitmaps ;);for _gfb ,_deb =range _cff .Values {_bad =_gdc [_gfb ];if _caf ,_bae ,_gee =_bdb .GetGeometry (_gfb );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0070t\u0061\u0020\u002d\u0020\u0069");};_efd =false ;_ccg :=len (_fbd .UndilatedTemplates .Values );_ede =_ged (_fbd ,_deb );for _gad :=_ede .Next ();_gad > -1;{if _cffg ,_gee =_fbd .UndilatedTemplates .GetBitmap (_gad );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0075\u006e\u0069dl\u0061\u0074\u0065\u0064\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0062\u006d\u0032");};if _gbe ,_gee =_dbe .GetInt (_gad );_gee !=nil {_eb .Log .Trace ("\u0046\u0047\u0020T\u0065\u006d\u0070\u006ca\u0074\u0065\u0020\u005b\u0069\u0063\u006ca\u0073\u0073\u005d\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_gee );};if _abf ,_daa ,_gee =_fbd .CentroidPointsTemplates .GetGeometry (_gad );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074T\u0065\u006d\u0070\u006c\u0061\u0074e\u0073\u005b\u0069\u0063\u006c\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u00782\u002c\u0079\u0032\u0020");};if _fbd .Settings .WeightFactor > 0.0{if _dfg ,_gee =_fbd .TemplateAreas .Get (_gad );_gee !=nil {_eb .Log .Trace ("\u0054\u0065\u006dp\u006c\u0061\u0074\u0065A\u0072\u0065\u0061\u0073\u005b\u0069\u0063l\u0061\u0073\u0073\u005d\u0020\u003d\u0020\u0061\u0072\u0065\u0061\u0020\u0025\u0076",_gee );};_bceb =_fbd .Settings .Thresh +(1.0-_fbd .Settings .Thresh )*_fbd .Settings .WeightFactor *float64 (_gbe )/float64 (_dfg );}else {_bceb =_fbd .Settings .Thresh ;};_abd ,_gff :=_f .CorrelationScoreThresholded (_deb ,_cffg ,_bad ,_gbe ,_bgg .X -_cag .X ,_bgg .Y -_cag .Y ,MaxDiffWidth ,MaxDiffHeight ,_fdc ,_edc [_gfb ],float32 (_bceb ));if _gff !=nil {return _bc .Wrap (_gff ,_bgd ,"");};if _cga {var (_bda ,_gdb float64 ;_cbdg ,_aee int ;);_bda ,_gff =_f .CorrelationScore (_deb ,_cffg ,_bad ,_gbe ,_caf -_abf ,_bae -_daa ,MaxDiffWidth ,MaxDiffHeight ,_fdc );if _gff !=nil {return _bc .Wrap (_gff ,_bgd ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");};_gdb ,_gff =_f .CorrelationScoreSimple (_deb ,_cffg ,_bad ,_gbe ,_caf -_abf ,_bae -_daa ,MaxDiffWidth ,MaxDiffHeight ,_fdc );if _gff !=nil {return _bc .Wrap (_gff ,_bgd ,"d\u0065\u0062\u0075\u0067Co\u0072r\u0065\u006c\u0061\u0074\u0069o\u006e\u0053\u0063\u006f\u0072\u0065");};_cbdg =int (_g .Sqrt (_bda *float64 (_bad )*float64 (_gbe )));_aee =int (_g .Sqrt (_gdb *float64 (_bad )*float64 (_gbe )));if (_bda >=_bceb )!=(_gdb >=_bceb ){return _bc .Errorf (_bgd ,"\u0064\u0065\u0062\u0075\u0067\u0020\u0043\u006f\u0072r\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0063\u006f\u0072\u0065\u0020\u006d\u0069\u0073\u006d\u0061\u0074\u0063\u0068\u0020-\u0020\u0025d\u0028\u00250\u002e\u0034\u0066\u002c\u0020\u0025\u0076\u0029\u0020\u0076\u0073\u0020\u0025d(\u0025\u0030\u002e\u0034\u0066\u002c\u0020\u0025\u0076)\u0020\u0025\u0030\u002e\u0034\u0066",_cbdg ,_bda ,_bda >=float64 (_bceb ),_aee ,_gdb ,_gdb >=float64 (_bceb ),_bda -_gdb );};if _bda >=_bceb !=_abd {return _bc .Errorf (_bgd ,"\u0064\u0065\u0062\u0075\u0067\u0020\u0043o\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e \u0073\u0063\u006f\u0072\u0065 \u004d\u0069\u0073\u006d\u0061t\u0063\u0068 \u0062\u0065\u0074w\u0065\u0065\u006e\u0020\u0063\u006frr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020/\u0020\u0074\u0068\u0072\u0065s\u0068\u006f\u006c\u0064\u002e\u0020\u0043\u006f\u006dpa\u0072\u0069\u0073\u006f\u006e:\u0020\u0025\u0030\u002e\u0034\u0066\u0028\u0025\u0030\u002e\u0034\u0066\u002c\u0020\u0025\u0064\u0029\u0020\u003e\u003d\u0020\u00250\u002e\u0034\u0066\u0028\u0025\u0030\u002e\u0034\u0066\u0029\u0020\u0076\u0073\u0020\u0025\u0076",_bda ,_bda *float64 (_bad )*float64 (_gbe ),_cbdg ,_bceb ,float32 (_bceb )*float32 (_bad )*float32 (_gbe ),_abd );};};if _abd {_efd =true ;if _gff =_fbd .ClassIDs .Add (_gad );_gff !=nil {return _bc .Wrap (_gff ,_bgd ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _gff =_fbd .ComponentPageNumbers .Add (_fgc );_gff !=nil {return _bc .Wrap (_gff ,_bgd ,"\u006f\u0076\u0065\u0072\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064");};if _fbd .Settings .KeepClassInstances {if _dfb ,_gff =_bbc .GetBitmap (_gfb );_gff !=nil {return _bc .Wrap (_gff ,_bgd ,"\u004b\u0065\u0065\u0070Cl\u0061\u0073\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u002d \u0069");};if _aea ,_gff =_fbd .ClassInstances .GetBitmaps (_gad );_gff !=nil {return _bc .Wrap (_gff ,_bgd ,"K\u0065\u0065\u0070\u0043\u006c\u0061s\u0073\u0049\u006e\u0073\u0074\u0061\u006e\u0063\u0065s\u0020\u002d\u0020i\u0043l\u0061\u0073\u0073");};_aea .AddBitmap (_dfb );if _ceb ,_gff =_ecf .Get (_gfb );_gff !=nil {return _bc .Wrap (_gff ,_bgd ,"\u004be\u0065p\u0043\u006c\u0061\u0073\u0073I\u006e\u0073t\u0061\u006e\u0063\u0065\u0073");};_aea .AddBox (_ceb );};break ;};};if !_efd {if _gee =_fbd .ClassIDs .Add (_ccg );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};if _gee =_fbd .ComponentPageNumbers .Add (_fgc );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_aea =&_f .Bitmaps {};if _dfb ,_gee =_bbc .GetBitmap (_gfb );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_aea .AddBitmap (_dfb );_edee ,_dbg :=_dfb .Width ,_dfb .Height ;_ac :=uint64 (_dbg )*uint64 (_edee );_fbd .TemplatesSize .Add (_ac ,_ccg );if _ceb ,_gee =_ecf .Get (_gfb );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_aea .AddBox (_ceb );_fbd .ClassInstances .AddBitmaps (_aea );_fbd .CentroidPointsTemplates .AddPoint (_caf ,_bae );_fbd .FgTemplates .AddInt (_bad );_fbd .UndilatedTemplates .AddBitmap (_dfb );_dfg =(_deb .Width -2*JbAddedPixels )*(_deb .Height -2*JbAddedPixels );if _gee =_fbd .TemplateAreas .Add (_dfg );_gee !=nil {return _bc .Wrap (_gee ,_bgd ,"\u0021\u0066\u006f\u0075\u006e\u0064");};};};_fbd .NumberOfClasses =len (_fbd .UndilatedTemplates .Values );return nil ;};func (_fd *Classer )getULCorners (_aeg *_f .Bitmap ,_ba *_f .Boxes )error {const _ca ="\u0067\u0065\u0074U\u004c\u0043\u006f\u0072\u006e\u0065\u0072\u0073";if _aeg ==nil {return _bc .Error (_ca ,"\u006e\u0069l\u0020\u0069\u006da\u0067\u0065\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ba ==nil {return _bc .Error (_ca ,"\u006e\u0069\u006c\u0020\u0062\u006f\u0075\u006e\u0064\u0073");};if _fd .PtaUL ==nil {_fd .PtaUL =&_f .Points {};};_bb :=len (*_ba );var (_gd ,_ead ,_gf ,_ad int ;_ccf ,_ec ,_fef ,_edf float32 ;_gca error ;_gcd *_e .Rectangle ;_de *_f .Bitmap ;_bg _e .Point ;);for _geg :=0;_geg < _bb ;_geg ++{_gd =_fd .BaseIndex +_geg ;if _ccf ,_ec ,_gca =_fd .CentroidPoints .GetGeometry (_gd );_gca !=nil {return _bc .Wrap (_gca ,_ca ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0050o\u0069\u006e\u0074\u0073");};if _ead ,_gca =_fd .ClassIDs .Get (_gd );_gca !=nil {return _bc .Wrap (_gca ,_ca ,"\u0043\u006c\u0061s\u0073\u0049\u0044\u0073\u002e\u0047\u0065\u0074");};if _fef ,_edf ,_gca =_fd .CentroidPointsTemplates .GetGeometry (_ead );_gca !=nil {return _bc .Wrap (_gca ,_ca ,"\u0043\u0065\u006etr\u006f\u0069\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065\u0073");};_be :=_fef -_ccf ;_ef :=_edf -_ec ;if _be >=0{_gf =int (_be +0.5);}else {_gf =int (_be -0.5);};if _ef >=0{_ad =int (_ef +0.5);}else {_ad =int (_ef -0.5);};if _gcd ,_gca =_ba .Get (_geg );_gca !=nil {return _bc .Wrap (_gca ,_ca ,"");};_dcg ,_dg :=_gcd .Min .X ,_gcd .Min .Y ;_de ,_gca =_fd .UndilatedTemplates .GetBitmap (_ead );if _gca !=nil {return _bc .Wrap (_gca ,_ca ,"\u0055\u006e\u0064\u0069\u006c\u0061\u0074\u0065\u0064\u0054e\u006d\u0070\u006c\u0061\u0074\u0065\u0073.\u0047\u0065\u0074\u0028\u0069\u0043\u006c\u0061\u0073\u0073\u0029");};_bg ,_gca =_fde (_aeg ,_dcg ,_dg ,_gf ,_ad ,_de );if _gca !=nil {return _bc .Wrap (_gca ,_ca ,"");};_fd .PtaUL .AddPoint (float32 (_dcg -_gf +_bg .X ),float32 (_dg -_ad +_bg .Y ));};return nil ;};func (_ffgf *Classer )classifyRankHouseOne (_egd *_f .Boxes ,_bf ,_fbga ,_bag *_f .Bitmaps ,_efc *_f .Points ,_dfc int )(_cfb error ){const _fc ="\u0043\u006c\u0061\u0073s\u0065\u0072\u002e\u0063\u006c\u0061\u0073\u0073\u0069\u0066y\u0052a\u006e\u006b\u0048\u006f\u0075\u0073\u0065O\u006e\u0065";var (_dcab ,_dcabc ,_cac ,_fea float32 ;_bff int ;_ega ,_bgf ,_gga ,_adc ,_bcgf *_f .Bitmap ;_aad ,_afb bool ;);for _gadg :=0;_gadg < len (_bf .Values );_gadg ++{_bgf =_fbga .Values [_gadg ];_gga =_bag .Values [_gadg ];_dcab ,_dcabc ,_cfb =_efc .GetGeometry (_gadg );if _cfb !=nil {return _bc .Wrapf (_cfb ,_fc ,"\u0066\u0069\u0072\u0073\u0074\u0020\u0067\u0065\u006fm\u0065\u0074\u0072\u0079");};_cbc :=len (_ffgf .UndilatedTemplates .Values );_aad =false ;_gbfb :=_ged (_ffgf ,_bgf );for _bff =_gbfb .Next ();_bff > -1;{_adc ,_cfb =_ffgf .UndilatedTemplates .GetBitmap (_bff );if _cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"\u0062\u006d\u0033");};_bcgf ,_cfb =_ffgf .DilatedTemplates .GetBitmap (_bff );if _cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"\u0062\u006d\u0034");};_cac ,_fea ,_cfb =_ffgf .CentroidPointsTemplates .GetGeometry (_bff );if _cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"\u0043\u0065\u006e\u0074\u0072\u006f\u0069\u0064\u0054\u0065\u006d\u0070l\u0061\u0074\u0065\u0073");};_afb ,_cfb =_f .HausTest (_bgf ,_gga ,_adc ,_bcgf ,_dcab -_cac ,_dcabc -_fea ,MaxDiffWidth ,MaxDiffHeight );if _cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"");};if _afb {_aad =true ;if _cfb =_ffgf .ClassIDs .Add (_bff );_cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"");};if _cfb =_ffgf .ComponentPageNumbers .Add (_dfc );_cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"");};if _ffgf .Settings .KeepClassInstances {_fed ,_cgc :=_ffgf .ClassInstances .GetBitmaps (_bff );if _cgc !=nil {return _bc .Wrap (_cgc ,_fc ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_ega ,_cgc =_bf .GetBitmap (_gadg );if _cgc !=nil {return _bc .Wrap (_cgc ,_fc ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_fed .AddBitmap (_ega );_gcc ,_cgc :=_egd .Get (_gadg );if _cgc !=nil {return _bc .Wrap (_cgc ,_fc ,"\u004be\u0065\u0070\u0050\u0069\u0078\u0061a");};_fed .AddBox (_gcc );};break ;};};if !_aad {if _cfb =_ffgf .ClassIDs .Add (_cbc );_cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"");};if _cfb =_ffgf .ComponentPageNumbers .Add (_dfc );_cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"");};_dbgg :=&_f .Bitmaps {};_ega ,_cfb =_bf .GetBitmap (_gadg );if _cfb !=nil {return _bc .Wrap (_cfb ,_fc ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_dbgg .Values =append (_dbgg .Values ,_ega );_gdf ,_fce :=_ega .Width ,_ega .Height ;_ffgf .TemplatesSize .Add (uint64 (_fce )*uint64 (_gdf ),_cbc );_acc ,_gbfg :=_egd .Get (_gadg );if _gbfg !=nil {return _bc .Wrap (_gbfg ,_fc ,"\u0021\u0066\u006f\u0075\u006e\u0064");};_dbgg .AddBox (_acc );_ffgf .ClassInstances .AddBitmaps (_dbgg );_ffgf .CentroidPointsTemplates .AddPoint (_dcab ,_dcabc );_ffgf .UndilatedTemplates .AddBitmap (_bgf );_ffgf .DilatedTemplates .AddBitmap (_gga );};};return nil ;};const (MaxDiffWidth =2;MaxDiffHeight =2;);