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

📄 field2.c

📁 NIST Handwriting OCR Testbed
💻 C
📖 第 1 页 / 共 2 页
字号:
int *nhyps, fld_i, bpi, iw, ih;HSFORM *tmplt;KL_PARAM *kl_param;MLP_PARAM *mlp_param;{   unsigned char *cfield;   int fpar_x, fpar_y, fw, fh;   MIS *nmis, *smis;   float *sfctr, *scal_x, *scal_y;   float *klts;   int nklts;   char msgstr[80];   BLOBLS *blobls, *noisels;   int *rlen, rn, ra;   /* isolate the field */   set_timer();   if(!iso_handprint_in_box(&blobls, &cfield, &fpar_x, &fpar_y, &fw, &fh,                   &rlen, &rn, &ra,                   icdata, bpi, iw, ih,                   tmplt->box[fld_i].vertex[0].x,                   tmplt->box[fld_i].vertex[0].y,                   tmplt->box[fld_i].vertex[3].x,                   tmplt->box[fld_i].vertex[3].y)){      /* field is rejected */      sprintf(msgstr, "Field %d Isolation Failed", fld_i);      verbose_print("process_alpha_field_Rel2", msgstr);      /* free field subimage (would be used for manual entry) */      free(cfield);      *nhyps = 0;      return(FALSE);   }   time_accum(_field_iso_);   sprintf(msgstr, "Field %d Isolated", fld_i);   verbose_print("process_alpha_field_Rel2", msgstr);   /* segment the alpha field */   set_timer();   blobs2chars8(&blobls, &noisels, rlen, rn);   time_accum(_field_seg_);   free(cfield);   free_blobls(noisels);   free(rlen);   sprintf(msgstr, "Field %d Segmented", fld_i);   verbose_print("process_alpha_field_Rel2", msgstr);   if(blobls->num == 0){      free_blobls(blobls);      *nhyps = 0;      return(TRUE);   }   /* normalize the segmented digits */   set_timer();   norm_2nd_gen_blobls8(&nmis, &scal_x, &scal_y, blobls);   free_blobls(blobls);   free(scal_x);   free(scal_y);   verbose_print("process_alpha_field_Rel2", "Character Images Normalized");   if(nmis->ent_num == 0)      fatalerr("process_alpha_field_Rel2",               "no character images normalized", NULL);   /* shear the normalized alpha images */   shear_mis8(&smis, &sfctr, nmis);   time_accum(_char_norm_);   freemis(nmis);   free(sfctr);   verbose_print("process_alpha_field_Rel2", "Character Images Sheared");   if(smis->ent_num == 0)      fatalerr("process_alpha_field_Rel2", "no character images sheared", NULL);   /* kl transform normalized alpha images */   set_timer();   kl_transform_mis8(&klts, smis,                kl_param->basis, kl_param->mu, kl_param->sume, kl_param->nbasis);   time_accum(_char_feat_);   nklts = smis->ent_num;   freemis(smis);   verbose_print("process_alpha_field_Rel2",                 "Character Images Feature Extracted");   /* classify kl feature vectors */   set_timer();   malloc_int(hyps_i, nklts, "process_alpha_field_Rel2 : hyps_i");   malloc_flt(cons, nklts, "process_alpha_field_Rel2 : cons");   mlphypscons(mlp_param->ninps, mlp_param->nhids, mlp_param->nouts,               mlp_param->acfunc_hids, mlp_param->acfunc_outs, mlp_param->weights,               klts, nklts, *hyps_i, *cons);   time_accum(_char_class_);   *nhyps = nklts;   free(klts);   verbose_print("process_alpha_field_Rel2", "Feature Vectors Classified");   return(TRUE);}/*************************************************************/process_const_field_Rel2(hypstr, constr, fld_i, icdata, bpi, iw, ih,                    tmplt, kl_param, mlp_param, dflag, pdict, fpout)char **hypstr, **constr;unsigned char *icdata;int fld_i, bpi, iw, ih;HSFORM *tmplt;KL_PARAM *kl_param;MLP_PARAM *mlp_param;int dflag;MFS *pdict;FILE *fpout;{   unsigned char *cfield;   int i;   int fpar_x, fpar_y, fw, fh;   MIS *nmis, *smis;   float *sfctr, *scal_x, *scal_y;   float *klts;   int nklts;   int *hyps_i, nhyps;   float *cons;   int **pi_lists, *pi_lens;   int nphrases;   char *phrases2hypstr2(), *phrases2constr2();   char msgstr[80];   int *rlen, rn, ra;   BLOBLS *blobls, *noisels;   int *noise_lens;   /* isolate the field */   set_timer();   if(!iso_handprint_in_box(&blobls, &cfield, &fpar_x, &fpar_y, &fw, &fh,                   &rlen, &rn, &ra,                   icdata, bpi, iw, ih,                   tmplt->box[fld_i].vertex[0].x,                   tmplt->box[fld_i].vertex[0].y,                   tmplt->box[fld_i].vertex[3].x,                   tmplt->box[fld_i].vertex[3].y)){      /* field is rejected */      sprintf(msgstr, "Field %d Isolation Failed", fld_i);      verbose_print("process_const_field_Rel2", msgstr);      /* free field subimage (would be used for manual entry) */      free(cfield);      *hypstr = NULL;      *constr = NULL;      return(FALSE);   }   time_accum(_field_iso_);   sprintf(msgstr, "Field %d Isolated", fld_i);   verbose_print("process_const_field_Rel2", msgstr);   free(cfield);   /* segment the const field */   set_timer();   if((blobls->num == 0) ||      !segment_paragraph_blobls(&blobls, &pi_lists, &pi_lens, &nphrases,                                &noisels, &noise_lens, rlen, rn, fw, fh)){      /* field is assumed to be empty */      sprintf(msgstr, "Field %d Presumed Empty", fld_i);      verbose_print("process_const_field_Rel2", msgstr);      free_blobls(blobls);      *hypstr = NULL;      *constr = NULL;      return(TRUE);   }   time_accum(_field_seg_);   free_blobls(noisels);   free(noise_lens);   free(rlen);   sprintf(msgstr, "Field %d Segmented", fld_i);   verbose_print("process_const_field_Rel2", msgstr);   /* normalize the segmented const characters */   set_timer();   norm_2nd_gen_blobls8(&nmis, &scal_x, &scal_y, blobls);   free_blobls(blobls);   free(scal_x);   free(scal_y);   verbose_print("process_const_field_Rel2", "Character Images Normalized");   if(nmis->ent_num == 0)      fatalerr("process_const_field_Rel2",               "no character images normalized", NULL);   /* shear the normalized const character images */   shear_mis8(&smis, &sfctr, nmis);   time_accum(_char_norm_);   freemis(nmis);   free(sfctr);   verbose_print("process_const_field_Rel2", "Character Images Sheared");   if(smis->ent_num == 0)      fatalerr("process_const_field_Rel2", "no character images sheared", NULL);   /* kl transform normalized const images */   set_timer();   kl_transform_mis8(&klts, smis,                kl_param->basis, kl_param->mu, kl_param->sume, kl_param->nbasis);   time_accum(_char_feat_);   nklts = smis->ent_num;   freemis(smis);   verbose_print("process_const_field_Rel2",                 "Character Images Feature Extracted");   /* classify kl feature vectors */   set_timer();   malloc_int(&hyps_i, nklts, "process_const_field_Rel2 : hyps_i");   malloc_flt(&cons, nklts, "process_const_field_Rel2 : cons");   mlphypscons(mlp_param->ninps, mlp_param->nhids, mlp_param->nouts,               mlp_param->acfunc_hids, mlp_param->acfunc_outs, mlp_param->weights,               klts, nklts, hyps_i, cons);   time_accum(_char_class_);   nhyps = nklts;   free(klts);   verbose_print("process_const_field_Rel2", "Feature Vectors Classified");   if(dflag == DO_DICT){      /* correct phrase classifications using dictionaries */      if((!_silent_) && (fpout != NULL)){         fprintf(fpout, "\nhsf_%d: ", fld_i);         fflush(fpout);      }      set_timer();      spell_phrases_Rel2(hypstr, hyps_i, nhyps,                     mlp_param->class_map, mlp_param->nouts,                     pi_lists, pi_lens, nphrases, pdict,                     ((!_silent_)?fpout:NULL));      time_accum(_field_spell_);      *constr = NULL;      if((!_silent_) && (fpout != NULL)){         fprintf(fpout, "\n\n");         fflush(fpout);      }   }   else{      /* convert phrases into one long string */      (*hypstr) = phrases2hypstr2(hyps_i, nhyps,                                  mlp_param->class_map, mlp_param->nouts,                                  pi_lists, pi_lens, nphrases);      (*constr) = phrases2constr2(cons, nhyps, pi_lists, pi_lens, nphrases);      if((!_silent_) && (fpout != NULL)){         fprintf(fpout, "\nhsf_%d: %s\n\n", fld_i, (*hypstr));         fflush(fpout);      }   }   free(hyps_i);   free(cons);   for(i = 0; i < nphrases; i++)      free(pi_lists[i]);   free(pi_lists);   free(pi_lens);   return(TRUE);}

⌨️ 快捷键说明

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