void DrawComps(Handle hCCOM) { CCOM_handle hccom = (CCOM_handle) hCCOM; extern Handle hDrawComp; CCOM_comp * comp; for (comp = CCOM_GetFirst(hccom, NULL); comp; comp = CCOM_GetNext(comp, NULL)) DrawRect(MainWindowD, 117, RGB(255,0,0), comp->upper, comp->upper + comp->h - 1, comp->left, comp->left + comp->w - 1); LDPUMA_WaitUserInput(hDrawComp, MainWindowD); LDPUMA_DeleteRects(MainWindowD, 117); }
Bool32 CheckAreaForComps(CCOM_handle hCCOM, CCOM_handle hCCOM_big, Rect32 rect, int32_t Height, uint32_t *Result1, uint32_t *Result2) { CCOM_comp * comp; uint32_t i; comp = NULL; Rect16 rect1; uint32_t key = 111; uint32_t color = 23000; Handle MainWindowD = NULL; MainWindowD = LDPUMA_GetWindowHandle("Изображение после разворота"); if (!MainWindowD) MainWindowD = LDPUMA_GetWindowHandle("Main"); *Result1 = 0; *Result2 = 0; if (!LDPUMA_Skip(hShowCheckLetters)) { rect1.top = (uint16_t) rect.top; rect1.left = (uint16_t) rect.left; rect1.bottom = (uint16_t) rect.bottom; rect1.right = (uint16_t) rect.right; LDPUMA_DrawRect(MainWindowD, &rect1, 0, 23635, 4, key); } //stepa_am comp = CCOM_GetFirst(hCCOM_big, NULL); while (comp) { if (comp->h < Height / 6) goto lNextComp_big; if (comp->h > Height * 1.5) goto lNextComp_big; if (comp->upper < rect.top) goto lNextComp_big; if (comp->left < rect.left) goto lNextComp_big; if (comp->upper + comp->h > rect.bottom) goto lNextComp_big; if (comp->left + comp->w > rect.right) goto lNextComp_big; if ((comp->h < Height / 3) && (comp->upper < rect.top)) goto lNextComp_big; for (i = 0; i < nPics; i++) { if ((comp->upper >= pPics[i].upper) && (comp->left >= pPics[i].left) && (comp->upper + comp->h < pPics[i].upper + pPics[i].h) && (comp->left + comp->w <= pPics[i].left + pPics[i].w)) { goto lNextComp_big; } } if ((comp->h > Height * 0.5) && (comp->h < Height * 1.5)) { (*Result1)++; if (!LDPUMA_Skip(hShowCheckLetters)) { rect1.left = comp->left; rect1.top = comp->upper; rect1.right = comp->left + comp->w; rect1.bottom = comp->upper + comp->h; LDPUMA_DrawRect(MainWindowD, &rect1, 0, color, 8, key); } goto lNextComp_big; } if ((comp->h > Height / 3 * 0.5) && (comp->h < Height / 3* 1.5 )) { (*Result2)++; if (!LDPUMA_Skip(hShowCheckLetters)) { rect1.left = comp->left; rect1.top = comp->upper; rect1.right = comp->left + comp->w; rect1.bottom = comp->upper + comp->h; LDPUMA_DrawRect(MainWindowD, &rect1, 0, color, 2, key); } goto lNextComp_big; } lNextComp_big: comp = CCOM_GetNext(comp, NULL); } //end stepa_am comp = CCOM_GetFirst(hCCOM, NULL); while (comp) { if (comp->h < Height / 6) goto lNextComp; if (comp->h > Height * 1.5) goto lNextComp; if (comp->upper < rect.top) goto lNextComp; if (comp->left < rect.left) goto lNextComp; if (comp->upper + comp->h > rect.bottom) goto lNextComp; if (comp->left + comp->w > rect.right) goto lNextComp; if ((comp->h < Height / 3) && (comp->upper < rect.top)) goto lNextComp; for (i = 0; i < nPics; i++) { if ((comp->upper >= pPics[i].upper) && (comp->left >= pPics[i].left) && (comp->upper + comp->h < pPics[i].upper + pPics[i].h) && (comp->left + comp->w <= pPics[i].left + pPics[i].w)) { goto lNextComp; } } if ((comp->h > Height * 0.5) && (comp->h < Height * 1.5)) { (*Result1)++; if (!LDPUMA_Skip(hShowCheckLetters)) { rect1.left = comp->left; rect1.top = comp->upper; rect1.right = comp->left + comp->w; rect1.bottom = comp->upper + comp->h; LDPUMA_DrawRect(MainWindowD, &rect1, 0, color, 8, key); } goto lNextComp; } if ((comp->h > Height / 3* 0.5 )&&(comp->h < Height/3*1.5)) { (*Result2)++; if(!LDPUMA_Skip(hShowCheckLetters)) { rect1.left = comp->left; rect1.top = comp->upper; rect1.right = comp->left + comp->w; rect1.bottom = comp->upper + comp->h; LDPUMA_DrawRect(MainWindowD, &rect1, 0, color, 2, key); } goto lNextComp; } lNextComp: comp = CCOM_GetNext(comp,NULL); } if(!LDPUMA_Skip(hShowCheckLetters)) { LDPUMA_Console("RPIC_Анализ на заголовки \n"); LDPUMA_WaitUserInput(hShowCheckLetters, MainWindowD); LDPUMA_DeleteRects(MainWindowD, key); } return TRUE; }
Bool32 RPIC_SearchPictures(CCOM_handle hCCOM, CCOM_handle hCCOM_big, Handle hCPAGE) { CCOM_comp * comp = NULL; CCOM_comp common; PAGEINFO pInfo; POLY_ block; uint32_t i, j; Rect16 rect; uint32_t key; uint32_t color; uint32_t tmp_comp = 0; Handle MainWindowD = NULL; MainWindowD = LDPUMA_GetWindowHandle("Изображение после разворота"); if (!MainWindowD) MainWindowD = LDPUMA_GetWindowHandle("Main"); OpenLogRes(); file_name = (char*) LDPUMA_GetFileName(NULL); //color = 23650; color = 200; key = 111; nPics = 0; if (pPics) { free(pPics); pPics = NULL; } nComps = 0; CPAGE_GetPageData(hCPAGE, PT_PAGEINFO, (void*) &pInfo, sizeof(pInfo)); for (i = 0; i < MaxHeightOfLetter; i++) { pHystogram[i] = 0; } //LDPUMA_FPuts(hFile, (char*)&pInfo.szImageName); LDPUMA_FPuts(logFile_comp, "*******************************************************\n"); LDPUMA_FPuts(logFile_comp, "new_file \n"); if ((pInfo.Angle == 90) || (pInfo.Angle == 270)) { uint32_t tmp; tmp = pInfo.Width; pInfo.Width = pInfo.Height; pInfo.Height = tmp; } //stepa_am comp = CCOM_GetFirst(hCCOM_big, NULL); while (comp) { tmp_comp++; if ((comp->h > MinHeightOfLetter) && (comp->h < MaxHeightOfLetter)) { nComps++; pHystogram[comp->h]++; } if (comp->scale < 1) goto lNextComp_big; /* if( comp->cs == 255) { comp->type = CCOM_CH_LETTER; goto lNextComp; } */ if (IsNotGoodComp(pInfo, comp)) { if (!LDPUMA_Skip(hShowAllCancelledGreat)) { rect.left = comp->left; rect.top = comp->upper; rect.right = comp->left + comp->w; rect.bottom = comp->upper + comp->h; LDPUMA_DrawRect(MainWindowD, &rect, 0, color, 4, key); } goto lNextComp_big; } if (nPics % PICS_QUANTUM == 0) { pPics = (CCOM_comp *) realloc(pPics, (size_t) ((nPics / PICS_QUANTUM + 1) * PICS_QUANTUM * sizeof(CCOM_comp))); } pPics[nPics++] = *comp; lNextComp_big: comp = CCOM_GetNext(comp, NULL); } //end stepa_am comp = CCOM_GetFirst(hCCOM, NULL); while (comp) { tmp_comp++; if ((comp->h > MinHeightOfLetter) && (comp->h < MaxHeightOfLetter)) { nComps++; pHystogram[comp->h]++; } if ( /*comp->scale < */1) goto lNextComp; /* if( comp->cs == 255) { comp->type = CCOM_CH_LETTER; goto lNextComp; } */ if (IsNotGoodComp(pInfo, comp)) { if (!LDPUMA_Skip(hShowAllCancelledGreat)) { rect.left = comp->left; rect.top = comp->upper; rect.right = comp->left + comp->w; rect.bottom = comp->upper + comp->h; LDPUMA_DrawRect(MainWindowD, &rect, 0, color, 4, key); } goto lNextComp; } if (nPics % PICS_QUANTUM == 0) { pPics = (CCOM_comp *) realloc(pPics, (size_t) ((nPics / PICS_QUANTUM + 1) * PICS_QUANTUM * sizeof(CCOM_comp))); } pPics[nPics++] = *comp; lNextComp: comp = CCOM_GetNext(comp, NULL); } if (!LDPUMA_Skip(hShowAllCancelledGreat)) { LDPUMA_Console("RPIC_Отмененные большие компоненты \n"); LDPUMA_WaitUserInput(hShowAllCancelledGreat, MainWindowD); LDPUMA_DeleteRects(MainWindowD, key); } if (!nComps) // OLEG return TRUE; // STEPA_AM if (!nPics) return TRUE; /**************************************************/ for (i = 0; i < MaxHeightOfLetter; i++) { nAverageHeight += pHystogram[i] * i; /* sprintf(tmp_str, " %i (i)\n", i); LDPUMA_FPuts(logFile,tmp_str); sprintf(tmp_str, " %i (pHystogram[i])\n", pHystogram[i]); LDPUMA_FPuts(logFile,tmp_str); */ } nAverageHeight /= nComps; sprintf(tmp_str, "Average height %i (nAverageHeight)\n", nAverageHeight); LDPUMA_FPuts(logFile_comp, tmp_str); /**************************************************/ /************** first union all crossed and included pictures ******************/ /* for (i=0; i<nPics; i++) { for (j=0; j<nPics; j++) { if ( (pPics[i].upper < pPics[j].upper)&& (pPics[i].left < pPics[j].left)&& (pPics[i].left + pPics[i].w > pPics[j].left + pPics[j].w)&& (pPics[i].upper + pPics[i].h > pPics[j].upper + pPics[j].h) ) { DeleteFromPics (j); j--; } } } for (i=0; i<nPics; i++) { for (j=0; j<nPics; j++) { if (i==j) continue; if ( (pPics[i].upper - VER_BOUND_SIZE < pPics[j].upper + pPics[j].h)&& (pPics[i].left - HOR_BOUND_SIZE < pPics[j].left + pPics[j].w)&& (pPics[i].left + pPics[i].w + HOR_BOUND_SIZE > pPics[j].left)&& (pPics[i].upper + pPics[i].h + VER_BOUND_SIZE > pPics[j].upper) ) { common = pPics[i]; if (pPics[i].upper >= pPics[j].upper) common.upper = pPics[j].upper; if (pPics[i].left >= pPics[j].left) common.left = pPics[j].left; if (pPics[i].upper + pPics[i].h < pPics[j].upper + pPics[j].h) common.h = pPics[j].upper + pPics[j].h - pPics[i].upper; if (pPics[i].left + pPics[i].w < pPics[j].left + pPics[j].w) common.w = pPics[j].left + pPics[j].w - pPics[i].left; common.h += pPics[i].upper - common.upper; common.w += pPics[i].left - common.left; pPics[i] = common; DeleteFromPics (j); j=0; i=0; } } } */ /***********************************************************************************/ color = 200; key = 111; if ((!LDPUMA_Skip(hShowAllGreat)) && nPics) { for (i = 0; i < nPics; i++) { rect.left = pPics[i].left; rect.top = pPics[i].upper; rect.right = pPics[i].left + pPics[i].w; rect.bottom = pPics[i].upper + pPics[i].h; LDPUMA_DrawRect(MainWindowD, &rect, 0, color, 2, key); } LDPUMA_Console("RPIC_Рассматриваемые большие компоненты \n"); LDPUMA_WaitUserInput(hShowAllGreat, MainWindowD); LDPUMA_DeleteRects(MainWindowD, key); } //sprintf(tmp_str, "Amount of 'letters' on the first step %i (nComps)\n", nComps); //LDPUMA_FPuts(logFile_comp,tmp_str); //sprintf(tmp_str, " <2 Н Страница = %d \n", page_count++); //LDPUMA_FPuts(resFile_comp,tmp_str); //char* str; //str = LDPUMA_GetFileName(NULL); LDPUMA_FPuts(resFile_comp, " <2 Н Страница ="); LDPUMA_FPuts(resFile_comp, file_name); LDPUMA_FPuts(resFile_comp, " \n"); //LDPUMA_FPuts(resFile_comp, " <2 Н Страница \n"); LDPUMA_FPuts(resFile_comp, " <3 Н Компоненты \n"); sprintf(tmp_str, " <4 П Перед выделением линий \n", nComps); LDPUMA_FPuts(resFile_comp, tmp_str); sprintf(tmp_str, " <4 Р %d \n", nComps); LDPUMA_FPuts(resFile_comp, tmp_str); sprintf(tmp_str, "Amount of pictures on the before first step %i (nPics)\n", nPics); LDPUMA_FPuts(logFile_comp, tmp_str); /*******************************************************************/ if (LDPUMA_Skip(hRectanglePictures)) SearchRectanglePictures(hCCOM, hCCOM_big, hCPAGE); if (LDPUMA_Skip(hPolyPictures)) SearchPolyPictures(hCCOM, hCPAGE); /*******************************************************************/ /************** final union all crossed and included pictures ******************/ for (i = 0; i < nPics; i++) { if (pPics[i].large & CCOM_LR_KILLED) { continue; } for (j = 0; j < nPics; j++) { if ((pPics[i].upper < pPics[j].upper) && (pPics[i].left < pPics[j].left) && (pPics[i].left + pPics[i].w > pPics[j].left + pPics[j].w) && (pPics[i].upper + pPics[i].h > pPics[j].upper + pPics[j].h)) { /* if((pPics[i].type!=CCOM_CH_LETTER)||(pPics[j].type!=CCOM_CH_LETTER)) { pPics[i].type = CCOM_CH_MERGE; } */ if (pPics[j].large & CCOM_LR_KILLED) { // it's bad, but will work cause pPics[].large not initialised in RPIC pPics[i].large |= CCOM_LR_TAKEN; continue; } DeleteFromPics(j); //j--; } } } for (i = 0; i < nPics; i++) { if (pPics[i].large & CCOM_LR_KILLED) { continue; } for (j = 0; j < nPics; j++) { if (pPics[j].large & CCOM_LR_KILLED) { continue; } if (i == j) continue; if ((pPics[i].upper - VER_BOUND_SIZE < pPics[j].upper + pPics[j].h) && (pPics[i].left - HOR_BOUND_SIZE < pPics[j].left + pPics[j].w) && (pPics[i].left + pPics[i].w + HOR_BOUND_SIZE > pPics[j].left) && (pPics[i].upper + pPics[i].h + VER_BOUND_SIZE > pPics[j].upper)) { common = pPics[i]; if (pPics[i].upper >= pPics[j].upper) common.upper = pPics[j].upper; if (pPics[i].left >= pPics[j].left) common.left = pPics[j].left; if (pPics[i].upper + pPics[i].h < pPics[j].upper + pPics[j].h) common.h = pPics[j].upper + pPics[j].h - pPics[i].upper; if (pPics[i].left + pPics[i].w < pPics[j].left + pPics[j].w) common.w = pPics[j].left + pPics[j].w - pPics[i].left; common.h += pPics[i].upper - common.upper; common.w += pPics[i].left - common.left; pPics[i] = common; DeleteFromPics(j); } } } LastCheck(hCCOM, hCCOM_big, hCPAGE); LDPUMA_FPuts(resFile_pict, " <2 Н Страница ="); LDPUMA_FPuts(resFile_pict, file_name); LDPUMA_FPuts(resFile_pict, " \n"); LDPUMA_FPuts(resFile_pict, " <3 Н Картинки \n"); LDPUMA_FPuts(resFile_pict, " <4 Н После первого прохода \n"); sprintf(tmp_str, " <4 Р %d %d %d \n", nPics, 0, 0); LDPUMA_FPuts(resFile_pict, tmp_str); int32_t min_image_width = (int32_t)(100 * ((double) (pInfo.DPIX + 1) / 300)); int32_t min_image_height = (int32_t)(100 * ((double) (pInfo.DPIY + 1) / 300)); for (i = 0; i < nPics; i++) { if (pPics[i].large & CCOM_LR_KILLED && !(pPics[i].large & CCOM_LR_TAKEN)) { continue; } block.com.type = TYPE_TEXT;//Текст, Картинка, Таблица; block.com.number = 0;//порядковый номер block.com.count = 4; block.com.Flags = 0; block.com.Vertex[0].rx() = pPics[i].left; block.com.Vertex[0].ry() = pPics[i].upper; block.com.Vertex[1].rx() = pPics[i].left + pPics[i].w; block.com.Vertex[1].ry() = pPics[i].upper; block.com.Vertex[2].rx() = pPics[i].left + pPics[i].w; block.com.Vertex[2].ry() = pPics[i].upper + pPics[i].h; block.com.Vertex[3].rx() = pPics[i].left; block.com.Vertex[3].ry() = pPics[i].upper + pPics[i].h; block.alphabet = 0; sprintf(tmp_str, " <4 О 1 %4d %4d %4d %4d %d \n", pPics[i].left, pPics[i].upper, pPics[i].left + pPics[i].w, pPics[i].upper, pPics[i].h); LDPUMA_FPuts(resFile_pict, tmp_str); if (pPics[i].large & CCOM_LR_TAKEN || pPics[i].w < min_image_width && pPics[i].h < min_image_height) { CPAGE_CreateBlock(hCPAGE, POSSIBLE_PICTURES, 0, 0, &block, sizeof(POLY_)); } else { CPAGE_CreateBlock(hCPAGE, TYPE_IMAGE, 0, 0, &block, sizeof(POLY_)); } } LDPUMA_FPuts(resFile_pict, " <4 К После первого прохода \n"); sprintf(tmp_str, "Amount of comps on the first step %i (tmp_comp) \n", tmp_comp); LDPUMA_FPuts(logFile_comp, tmp_str); sprintf(tmp_str, "Amount of pictures on the first step %i (nPics) \n", nPics); LDPUMA_FPuts(logFile_comp, tmp_str); LDPUMA_FPuts(logFile_comp, "*******************************************************\n"); if (pPics != NULL) { free(pPics); pPics = NULL; } nPics = 0; CloseLogRes(); Handle h = NULL; if (!LDPUMA_Skip(hShowFirstAttempt)) { h = NULL; nPics = 0; for (h = CPAGE_GetBlockFirst(hCPAGE, TYPE_IMAGE); h != NULL; h = CPAGE_GetBlockNext(hCPAGE, h, TYPE_IMAGE)) { nPics++; CPAGE_GetBlockData(hCPAGE, h, TYPE_IMAGE, &block, sizeof(block)); rect.left = block.com.Vertex[0].x(); rect.top = block.com.Vertex[0].y(); rect.right = block.com.Vertex[1].x(); rect.bottom = block.com.Vertex[2].y(); LDPUMA_DrawRect(MainWindowD, &rect, 0, color, 2, key); } if (nPics) { LDPUMA_Console("RPIC_Картинки после первого прохода \n"); LDPUMA_WaitUserInput(hShowFirstAttempt, MainWindowD); LDPUMA_DeleteRects(MainWindowD, key); } } if (!LDPUMA_Skip(hShowPossiblePics)) { h = NULL; nPics = 0; for (h = CPAGE_GetBlockFirst(hCPAGE, POSSIBLE_PICTURES); h != NULL; h = CPAGE_GetBlockNext(hCPAGE, h, POSSIBLE_PICTURES)) { nPics++; CPAGE_GetBlockData(hCPAGE, h, POSSIBLE_PICTURES, &block, sizeof(block)); rect.left = block.com.Vertex[0].x(); rect.top = block.com.Vertex[0].y(); rect.right = block.com.Vertex[1].x(); rect.bottom = block.com.Vertex[2].y(); LDPUMA_DrawRect(MainWindowD, &rect, 0, color, 2, key); } if (nPics) { LDPUMA_Console("RPIC_Неуверенные картинки после первого прохода \n"); LDPUMA_WaitUserInput(hShowPossiblePics, MainWindowD); LDPUMA_DeleteRects(MainWindowD, key); } } Handle BlockType = CPAGE_GetInternalType("pic's to letters boxes"); RPIC_Comp_Rect CompRect; if (!LDPUMA_Skip(hShowBigLetters)) { h = NULL; nPics = 0; for (h = CPAGE_GetBlockFirst(hCPAGE, BlockType); h != NULL; h = CPAGE_GetBlockNext(hCPAGE, h, BlockType)) { nPics++; CPAGE_GetBlockData(hCPAGE, h, BlockType, &CompRect, sizeof(CompRect)); rect.left = CompRect.left; rect.top = CompRect.upper; rect.right = CompRect.left + CompRect.w - 1; rect.bottom = CompRect.upper + CompRect.h - 1; LDPUMA_DrawRect(MainWindowD, &rect, 0, color, 2, key); } if (nPics) { LDPUMA_Console("RPIC_Буквицы \n"); LDPUMA_WaitUserInput(hShowBigLetters, MainWindowD); LDPUMA_DeleteRects(MainWindowD, key); } } return TRUE; }
RNEG_FUNC(void) RNEG_RecogNeg(CCOM_handle hCCOM, Handle hCPage,uchar* pImageName,int skew) { MainWindowD=NULL; MainWindowD=LDPUMA_GetWindowHandle ("Изображение после разворота"); if(!MainWindowD) MainWindowD=LDPUMA_GetWindowHandle ("Main"); dpTime=!LDPUMA_Skip(hTime); dpPrintResConsole=!LDPUMA_Skip(PrintResConsole); dpNegResD=!LDPUMA_Skip(NegResD); dpNegRecD=!LDPUMA_Skip(NegRecD); dpRecOneLetter=!LDPUMA_Skip(RecOneLetter); // LDPUMA_ConsoleN(""); if(dpTime) LDPUMA_ConsoleN("Активизируется функция поиска и разпознования негативов"); int time=clock(); if(!(LDPUMA_Skip (NegSearch)) ) return; uint32_t code_sersized=(512<<16); uint32_t code_normd=(512<<17); uint32_t code_colord=(512<<17)+(512<<16); uint32_t code_cutd=(512<<18); uint32_t code_cutstrd=(512<<18)+(512<<16); uint32_t code_sized=(512<<18)+(512<<17); #define NEGA 1<<14 #define VERTICA 1<<13 inf_neg_h=30; inf_neg_w=100; neg_cut_black=.95; neg_cut_white=.3; neg_cut_str=.8; min_let_h=2; min_let_w=2; inf_betw_str_h=10; sup_square=500000; PAGEINFO info = {0}; GetPageInfo(hCPage,&info); DPIX=info.DPIX; DPIY=info.DPIY; inf_neg_h=inf_neg_h*((int)(DPIY)+1)/300; inf_neg_w=inf_neg_w*((int)(DPIX)+1)/300; inf_betw_str_h=inf_betw_str_h*((int)(DPIY)+1)/300; sup_square=(int)(((double)sup_square*(double)(DPIY+1)*(double)(DPIX+1))/90000); min_let_w=min_let_w*((int)(DPIX)+1)/300; min_let_h=min_let_h*((int)(DPIY)+1)/300; if((info.Angle==90)||(info.Angle==270)) { Height=info.Width; Width=info.Height; } else { Height=info.Height; Width=info.Width; } NegList* root=NULL; NegList* now; NegList* temp; int nRC=0; int i; Bool fl_del_mas_neg; Bool flag_rotate; Bool flag_rimage_rotate; if(!LDPUMA_Skip(SetSkew)) skew=Skew; for(i=0;i<CPAGE_MAXNAME&&pImageName[i]!='\0';i++) ImageName[i]=pImageName[i]; if(i<CPAGE_MAXNAME) ImageName[i]='\0'; if(!InitMyImage()) return; if(dpTime) { LDPUMA_ConsoleN("Time prep=%d",clock()-time); time=clock(); } /* Осуществляется поиск кандидатов в негативы по размеру*/ if(LDPUMA_Skip (NegSearchSize) ) { fl_del_mas_neg=SearchNegBySize(hCCOM,hCPage,&root,nRC); /*Прорисовка найденных кандидатов в негативы по размерам*/ if(nRC>0) { now=root; if(!(LDPUMA_Skip (NegSearchSizeD)) ) { for(i=0;i<nRC;i++) { NegDrawRect(MainWindowD,code_sersized,RGB(0,0,255),(now->neg).pRc[0]); now=now->next; } LDPUMA_ConsoleN("По размерам"); LDPUMA_WaitUserInput (NegSearchSizeD,MainWindowD); if(LDPUMA_Skip (NegSearchSizeDC) ) LDPUMA_DeleteRects (MainWindowD,code_sersized); } } } flag_rimage_rotate=IfNeedGlobalRotate(root,skew); now=root; while(now) { while((now->neg).pRc[0].top<=0) ((now->neg).pRc[0].top)++; while(((now->neg).pRc[0].bottom+1)>Height ) ((now->neg).pRc[0].bottom)--; while((now->neg).pRc[0].left<0) ((now->neg).pRc[0].left)++; while( ((now->neg).pRc[0].right+1)>Width ) ((now->neg).pRc[0].right)--; int prewide=(((now->neg).pRc[0].right-(now->neg).pRc[0].left+8)/8)*8; if( ((now->neg).pRc[0].left+prewide)>Width ) (now->neg).pRc[0].right-=8; now=now->next; } /* Осуществляется удаление(если повезёт) грязи, т.е. приведение негатива к каноническому виду*/ if(LDPUMA_Skip (NegNorm) ) { /* Поворот (если необходим) негативов*/ flag_rotate=NegRotate(hCPage,root,nRC,skew); now=root; for(i=1;i<nRC;i++) now=now->next; i=nRC-1; while(i>=0) { temp=now->prev; NormNeg(hCPage,now,&root,nRC); i--; now=temp; } /*Обратное преобразование*/ if(flag_rotate) { now=root; while(now) { if((now->neg).rot.pmasp) { RSELSTR_UnRotateRect(-skew,&((now->neg).pRc[0]),1,(now->neg).rot.Rc,(now->neg).rot.begx,(now->neg).rot.movey,(now->neg).rot.flmovey,(now->neg).rot.hi); PostRotate(now,skew); } DeleteRotateMas(&((now->neg).rot.pmasp),&((now->neg).rot.begx),&((now->neg).rot.movey),&((now->neg).rot.flmovey),&((now->neg).rot.hi)); now=now->next; } } /* Прорисовка нормализованных кандидатов в негативы*/ if(nRC>0) { now=root; if(!(LDPUMA_Skip (NegNormD)) ) { for(i=0;i<nRC;i++) { NegDrawRect(MainWindowD,code_normd,RGB(0,255,0),(now->neg).pRc[0]); now=now->next; } LDPUMA_ConsoleN("Нормализованные"); LDPUMA_WaitUserInput (NegNormD,MainWindowD); if(LDPUMA_Skip (NegNormDC) ) LDPUMA_DeleteRects (MainWindowD,code_normd); } } } /* Резка сложных негативов*/ if(LDPUMA_Skip (NegCut) ) { /* Поворот (если необходим) негативов*/ flag_rotate=NegRotate(hCPage,root,nRC,skew); CutNeg(hCPage,&root,nRC,skew); /* Поворот (если необходим) негативов*/ flag_rotate=NegRotate(hCPage,root,nRC,skew); now=root; for(i=1;i<nRC;i++) now=now->next; i=nRC-1; while(i>=0) { temp=now->prev; NormNeg(hCPage,now,&root,nRC); i--; now=temp; } /*Обратное преобразование*/ if(flag_rotate) { now=root; while(now) { if((now->neg).rot.pmasp) { RSELSTR_UnRotateRect(-skew,&((now->neg).pRc[0]),1,(now->neg).rot.Rc,(now->neg).rot.begx,(now->neg).rot.movey,(now->neg).rot.flmovey,(now->neg).rot.hi); PostRotate(now,skew); } DeleteRotateMas(&((now->neg).rot.pmasp),&((now->neg).rot.begx),&((now->neg).rot.movey),&((now->neg).rot.flmovey),&((now->neg).rot.hi)); now=now->next; } } /* Прорисовка разрезанных негативов*/ if(nRC>0) { now=root; if(!(LDPUMA_Skip (NegCutD)) ) { for(i=0;i<nRC;i++) { NegDrawRect(MainWindowD,code_cutd,RGB(255,0,0),(now->neg).pRc[0]); now=now->next; } LDPUMA_ConsoleN("Разрезанные"); LDPUMA_WaitUserInput (NegCutD,MainWindowD); if(LDPUMA_Skip (NegCutDC) ) LDPUMA_DeleteRects (MainWindowD,code_cutd); } } } now=root; for(i=1;i<nRC;i++) now=now->next; int h; int w; Rect16 Rc; /*Отсев по размеру*/ if(LDPUMA_Skip (NegSize) ) { while(now) { h=(now->neg).pRc[0].bottom-(now->neg).pRc[(now->neg).nRc-1].top+1; w=(now->neg).pRc[0].right-(now->neg).pRc[0].left+1; if( ((h<2*w)&&(w<2*h)) || ((h*w)>sup_square) ) { temp=now; if(!temp->prev) root=temp->next; nRC--; now=now->prev; delete temp; } else now=now->prev; } /* Прорисовка отсеянных по размеру*/ if(nRC>0) { now=root; if(!(LDPUMA_Skip (NegSizeD)) ) { for(i=0;i<nRC;i++) { Rc.left=(now->neg).pRc[0].left; Rc.right=(now->neg).pRc[0].right; Rc.bottom=(now->neg).pRc[0].bottom; Rc.top=(now->neg).pRc[(now->neg).nRc-1].top; NegDrawRect(MainWindowD,code_sized,RGB(255,255,0),Rc); now=now->next; } LDPUMA_ConsoleN("Окончательная прорисовка"); LDPUMA_WaitUserInput (NegSizeD,MainWindowD); if(LDPUMA_Skip (NegSizeDC) ) LDPUMA_DeleteRects (MainWindowD,code_sized); } } } /* Поворот (если необходим) негативов*/ flag_rotate=NegRotate(hCPage,root,nRC,skew); /* Осуществляется отсев кандидатов в негативы по насыщенности чёрного цвета*/ if(LDPUMA_Skip (NegColor) ) { SearchNegByBlack(hCPage,&root,nRC); /*Прорисовка кандидатов в негативы после отсева по цветовой гамме*/ if(nRC>0) { now=root; if(!(LDPUMA_Skip (NegColorD)) ) { for(i=0;i<nRC;i++) { NegDrawRect(MainWindowD,code_colord,RGB(0,255,255),(now->neg).pRc[0]); now=now->next; } LDPUMA_ConsoleN("Отсеянные по цветовой гамме"); LDPUMA_WaitUserInput (NegColorD,MainWindowD); if(LDPUMA_Skip (NegColorDC) ) LDPUMA_DeleteRects (MainWindowD,code_colord); } } } /* Резка многострочных негативов*/ if(LDPUMA_Skip (NegCutStr) ) { CutNegStr(hCPage,&root,nRC,skew); /* Прорисовка разрезанных негативов*/ if(nRC>0) { now=root; if(!(LDPUMA_Skip (NegCutStrD)) ) { while(now) { for(i=0;i<(now->neg).nRc;i++) NegDrawRect(MainWindowD,code_cutstrd,RGB(255,0,255),(now->neg).pRc[i]); now=now->next; } LDPUMA_ConsoleN("Разрезанные на строки"); LDPUMA_WaitUserInput (NegCutStrD,MainWindowD); if(LDPUMA_Skip (NegCutStrDC) ) LDPUMA_DeleteRects (MainWindowD,code_cutstrd); } } } /*Отсев пересекающихся*/ DelIn(hCPage,&root,nRC); int time_stuff=clock(); if(dpTime) LDPUMA_ConsoleN("Time stuff=%d",time_stuff-time); /* Осуществляется распознование из массива кандидатов*/ if(flag_rimage_rotate) { UnRotateNeg(root,skew); ResetMyImage(); if(!InitMyImage()) return; CheckNega(root); if(!flag_rotate) flag_rotate=NegRotate(hCPage,root,nRC,skew); } if(LDPUMA_Skip (NegRec) ) { NegRecog(hCPage,&root,nRC,skew); } if(dpTime) LDPUMA_ConsoleN("Time recog=%d",clock()-time_stuff); if(!(LDPUMA_Skip (NegPrintFILE) )) { FILE *f; f=fopen("recneg.res","a"); if(f==NULL) f=fopen("recneg.res","w+"); if(f!=NULL) { NegPrintInFile(f,root,nRC); fclose(f); } } /* Отпись в CPage*/ now=root; if(1/*!(LDPUMA_Skip (PutToCPage) )*/) { POLY_ block={0}; uint32_t size_poly=sizeof(POLY_); while(now) { if((now->neg).p>inf_prob) { block.com.Flags=0; Rc.left=(now->neg).pRc[0].left; Rc.right=(now->neg).pRc[0].right; Rc.top=(now->neg).pRc[(now->neg).nRc-1].top; Rc.bottom=(now->neg).pRc[0].bottom; block.com.type = TYPE_TEXT; //Текст, Картинка, Таблица; block.com.count = 4; block.negative=TYPE_NEGATIVE; block.com.Flags=NEGA; //Andrey: moved from RBLOCK (keyword:TYPE_NEGATIVE) //------------------------------ block.alphabet=0; block.com.number=0; //------------------------------ //commented by Andrey /* if(Rc.bottom-Rc.top>Rc.right-Rc.left) { block.orient=TYPE_DOWNUP; block.com.Flags|=VERTICA; } else block.orient=TYPE_LEFTRIGHT; */ if ((now->neg).Flags&FlVert) { block.com.Flags |= VERTICA; block.orient = (now->neg).Flags&FlDown2Up ? TYPE_DOWNUP : TYPE_UPDOWN; } else block.orient = TYPE_LEFTRIGHT; block.com.Vertex[0].x = Rc.left; block.com.Vertex[0].y = Rc.top; block.com.Vertex[1].x = Rc.right; block.com.Vertex[1].y = Rc.top; block.com.Vertex[2].x = Rc.right; block.com.Vertex[2].y = Rc.bottom; block.com.Vertex[3].x = Rc.left; block.com.Vertex[3].y = Rc.bottom; //Andrey: create TYPE_TEXT block CPAGE_CreateBlock(hCPage, TYPE_IMAGE,0,0,&block,size_poly); // CPAGE_CreateBlock(hCPage, TYPE_TEXT,0,0,&block,size_poly); } now=now->next; } } if(!(LDPUMA_Skip (PutToCHSTR) )) { now=root; uchar Name[CPAGE_MAXNAME]; for (int j=0; j<CPAGE_MAXNAME; j++) Name[j] = ImageName[j]; if(!(LDPUMA_Skip (TestCHSTR) )) { CHSTR_Objects Hstr; Hstr.Rc.top=TOP; Hstr.Rc.bottom=BOTTOM; Hstr.Rc.left=LEFT; Hstr.Rc.right=RIGHT; Hstr.block_number=1000; Hstr.ImageName[0]='\0'; Hstr.type_neg=NEGATIVE; Hstr.type_vert=VERTICALE; RSELSTR_PutObjects(hCPage,(void*)hCCOM,&Hstr,1); } } PutTempToCPAGE(hCPage,root); if( (LDPUMA_Skip (NegSearchSize))&&(fl_del_mas_neg==TRUE) ) { while(root) { now=root; root=root->next; delete now; } } ResetMyImage(); // LDPUMA_ConsoleN("Time work RNEG=%d",clock()-time); }
void NegRecog(Handle hCPage,NegList** proot,int& nRC,int skew) { uint32_t code_recd=512<<19; uint32_t code_resd=(512<<19)+(512<<16); CCOM_handle hNegCCOM; CCOM_comp * pcomp; Rect16* pN; Rect16* pRc; int i,j,r; int medium_w; int nN=0; int len_neg_mas=100; int add_len_mas=50; Bool vertical; char Alf[256]; Bool nomem=FALSE; NegList* root=(*proot); NegList* now=root; NegList* temp; uchar Prob[3]; double neg_str_control; int len_result; double prec; double prob0[2], prob1[2]; for(i=1;i<nRC;i++) now=now->next; NegSetAlf(Alf); while(now) { if((now->neg).rot.pmasp) { if((now->neg).nRc>10) { delete[] (now->neg).rot.hi; (now->neg).rot.hi= new int[(now->neg).nRc]; } RSELSTR_UnRotateRect(-skew,(now->neg).pRc,(now->neg).nRc,(now->neg).rot.Rc,(now->neg).rot.begx,(now->neg).rot.movey,(now->neg).rot.flmovey,(now->neg).rot.hi); } pRc=(now->neg).pRc; vertical=FALSE; if(!((pRc[(now->neg).nRc-1].bottom-pRc[0].top)*2<(pRc[0].right-pRc[0].left))) { vertical=TRUE; } for(i=(now->neg).nRc-1;i>=0;i--) { nomem=FALSE; len_neg_mas=100; nN=0; hNegCCOM=0; hNegCCOM=GetNegCCOM(hCPage,pRc,i); if(!hNegCCOM) continue; if(i<MAX_STR) now->neg.hCCOM[i]=hNegCCOM; pcomp = CCOM_GetFirst (hNegCCOM, NULL); if(pcomp==NULL) { NegMoveMas((now->neg).pRc,(now->neg).nRc,i); NegMoveMas(now->neg.hCCOM,now->neg.nRc,i); if(i==0) { (now->neg).p_rec/=(double)((now->neg).nRc); (now->neg).p_str/=(double)((now->neg).nRc); (now->neg).p=((now->neg).p_rec+(now->neg).p_str)/2.; if(dpPrintResConsole) { LDPUMA_ConsoleN(""); LDPUMA_Console("Ќегатив с веро¤тностью :"); LDPUMA_ConsoleN(""); LDPUMA_Console("по внутренней структуре "); NegPrintConsol((now->neg).p_str); LDPUMA_Console("по результатам распозновани¤ "); NegPrintConsol((now->neg).p_rec); LDPUMA_Console("итого "); NegPrintConsol((now->neg).p); LDPUMA_ConsoleN("площадь=%d",(int)((now->neg).pRc[0].right-(now->neg).pRc[0].left+1)*(int)((now->neg).pRc[0].bottom-(now->neg).pRc[(now->neg).nRc-1].top+1)); } if(dpNegResD ) { Rect16 Rect; Rect.bottom=(now->neg).pRc[0].bottom; Rect.left=(now->neg).pRc[0].left; Rect.right=(now->neg).pRc[0].right+1; Rect.top=(now->neg).pRc[(now->neg).nRc-1].top-1; LDPUMA_DrawRect (MainWindowD, &(Rect),0,RGB(0,0,255), 1,code_resd ); LDPUMA_WaitUserInput (NegResD,MainWindowD); LDPUMA_DeleteRects (MainWindowD,code_resd); } } } if(pcomp==NULL) continue; if(!(InitNegMas(&pN,len_neg_mas))) continue; InitRc(pN,nN,pcomp); nN++; for(;;) { pcomp = CCOM_GetNext (pcomp, NULL); if (pcomp==NULL) break; if (nN>=len_neg_mas) { AddLenNegMas(&pN,len_neg_mas,add_len_mas); } InitRc(pN,nN,pcomp); nN++; } if(i>=MAX_STR) CCOM_DeleteContainer(hNegCCOM); if((now->neg).rot.pmasp) { RSELSTR_CleanStr(pN,NULL,nN,pRc[i].top,pRc[i].left,(now->neg).rot.hi[i],pRc[i].right-pRc[i].left+1,skew,FALSE); } if(!nN) DelNegMas(&pN); if(!nN) continue; /*ѕрорисовка компонент в негативе*/ if(nN>0) { if(dpNegRecD) { for(j=0;j<nN;j++) NegDrawRect(MainWindowD,code_recd,RGB(0,0,255),pN[j]); LDPUMA_WaitUserInput (NegRecD,MainWindowD); if(LDPUMA_Skip (NegRecDC) ) LDPUMA_DeleteRects (MainWindowD,code_recd); } } SortLetter(pN,nN,vertical); neg_str_control=NegStrControl(pN,nN,vertical,&(now->neg.pRc[i])); (now->neg).p_str+=neg_str_control; RecVersions* vs; UniVersions* uvs; if(!(InitNegMas(&vs,nN))) { nomem=TRUE; DelNegMas(&pN); } if(nomem==TRUE) continue; if(!(InitNegMas(&uvs,nN))) { nomem=TRUE; DelNegMas(&pN); DelNegMas(vs); } if(nomem==TRUE) continue; RecRaster rec; int16_t Language; int turn; if(neg_str_control/2.>inf_prob-.5) { if( !(CCOM_GetLanguage(hNegCCOM, &Language)) ) Language=7; for(j=0; j<2; j++) { prob0[j] = 0; prob1[j] = 0; } Bool32 ShowNegByOne = !LDPUMA_Skip(hShowNegComps); Handle comp_window = NULL; for(j=0;j<nN;j++) { if( NegGetRaster(hCPage,pN[j],&rec,vertical) ) { if(!dpRecOneLetter) { // if (vertical) TurnOverNeg(&rec); for(turn=0; turn<2; turn++) { //----------------------------------------------------------- if (ShowNegByOne/* && vertical*/) { BITMAPINFOHEADER lpBI; // Pointer to DIB info structure RGBQUAD Palette1; RGBQUAD Palette2; uint32_t bfSize, dwDIBSize; HANDLE hDIB; uchar* pDIB; uchar* pTmpDIB; uchar* pTmpBuffer; uint16_t Height, Width, ByteWidth; CIMAGEBITMAPINFOHEADER image_info = {0}; Height = (uint16_t)rec.lnPixHeight; Width = (uint16_t)rec.lnPixWidth; ByteWidth = (Width+7)/8; dwDIBSize = 64 * Height; bfSize = dwDIBSize + sizeof(BITMAPINFOHEADER) + 2*sizeof(RGBQUAD); ///////////////// Bitmap information header ////////////////////////////////// lpBI.biSize = sizeof(BITMAPINFOHEADER); lpBI.biWidth = 64; lpBI.biHeight = Height; lpBI.biPlanes = 0x1; lpBI.biBitCount = 0x1; lpBI.biCompression = 0; lpBI.biSizeImage = dwDIBSize; CIMAGE_GetImageInfo((puchar)PUMA_IMAGE_USER, &image_info); lpBI.biXPelsPerMeter = image_info.biXPelsPerMeter; lpBI.biYPelsPerMeter = image_info.biYPelsPerMeter; lpBI.biClrUsed = 0; lpBI.biClrImportant = 0; /////////////// Palette /////////////////////////////////////////////////////////// Palette1.rgbBlue = 0xFF; Palette1.rgbGreen = 0xFF; Palette1.rgbRed = 0xFF; Palette1.rgbReserved = 0; Palette2.rgbBlue = 0; Palette2.rgbGreen = 0; Palette2.rgbRed = 0; Palette2.rgbReserved = 0; hDIB = calloc(1, bfSize); if (hDIB != 0) { pDIB = static_cast<uchar*> (hDIB); pTmpDIB = pDIB; ///////// filling Dib /////////////////////////////////////////////////////////// memcpy(pTmpDIB, &lpBI, sizeof(BITMAPINFOHEADER)); pTmpDIB += sizeof(BITMAPINFOHEADER); memcpy(pTmpDIB, &Palette1, sizeof(RGBQUAD)); pTmpDIB += sizeof(RGBQUAD); memcpy(pTmpDIB, &Palette2, sizeof(RGBQUAD)); pTmpDIB += sizeof(RGBQUAD); pTmpBuffer = rec.Raster; uchar* pTempDib = pTmpDIB; for(int i=0; i<Height; i++ ) { memcpy(pTmpDIB, pTmpBuffer, 8); pTmpDIB += 8; pTmpBuffer += 8; } TurnOverNeg(rec, pTempDib); const char *pText; pText = turn ? "Component up-down" : "Component down-up"; comp_window = LDPUMA_CreateWindow(pText, pDIB); // LDPUMA_WaitUserInput(hShowNegComps, comp_window); free(hDIB); } } //---------------------------------------------------------------------- if( !(RSTR_RecogOneLetter_all (&rec,Alf, &(vs[j]),(int32_t)(1)) ) ) Prob[1]=0; else { if (!turn) Prob[1]=vs[j].Alt[0].Prob; prob1[turn] += NegRecControl((int)vs[j].Alt[0].Prob); if (ShowNegByOne) LDPUMA_ConsoleN("handprint symbol: %c , probability = %d", (char)vs[j].Alt[0].Code, vs[j].Alt[0].Prob); } // if( !(RSTR_RecogOneLetter_all (&rec,Alf, &(vs[j]),(int32_t)(2)) ) ) // Prob[2]=0; // else // Prob[2]=vs[j].Alt[0].Prob; if( !(RSTR_RecogOneLetter_all (&rec,Alf, &(vs[j]),(int32_t)(0)) ) ) Prob[0]=0; else { if (!turn) Prob[0]=vs[j].Alt[0].Prob; prob0[turn] += NegRecControl((int)vs[j].Alt[0].Prob); if (ShowNegByOne) LDPUMA_ConsoleN("print symbol: %c , probability = %d", (char)vs[j].Alt[0].Code, vs[j].Alt[0].Prob); } if (ShowNegByOne) LDPUMA_WaitUserInput(hShowNegComps, comp_window); if (!vertical) break; if (!turn) TurnRaster(&rec); } vs[j].Alt[0].Prob=(uchar)( ((int)(Prob[0])+(int)(Prob[1])/*+(int)(Prob[2])*/)/2/*3*/); /*else { vs[j].lnAltMax =uvs[j].lnAltMax; vs[j].lnAltCnt=uvs[j].lnAltCnt; for(int alt=0;alt<uvs[j].lnAltCnt;alt++) { vs[j].Alt[alt].Code=uvs[j].Alt[alt].Code[0]; vs[j].Alt[alt].Prob=uvs[j].Alt[alt].Prob; } }*/ } else { if( !(RSTR_RecogOneLetter (&rec, (uchar)(Language), &(vs[j])) ) ) vs[j].Alt[0].Prob=0; } } else vs[j].Alt[0].Prob=0; } } if(vertical) ToHoriz(pN,nN); medium_w=GetMediumW(pN,nN); int medium_h=GetMediumH(pN,nN); uchar* result=NULL; if(!(result=new uchar[nN*2])) { nomem=TRUE; DelNegMas(&pN); DelNegMas(vs); DelNegMas(uvs); } if(nomem==TRUE) continue; len_result=0; NegPutLetter(result,len_result,vs[0].Alt[0],FALSE); if(neg_str_control/2.>inf_prob-.5) { prec=NegRecControl(vs[0].Alt[0].Prob); for(j=1;j<nN;j++) { prec+=NegRecControl(vs[j].Alt[0].Prob); /* if( (pN[j].left-pN[j-1].right)>(medium_w/2)*3+2) { NegPutLetter(result,len_result,vs[j].Alt[0],TRUE); if( (pN[j].right-pN[j].left+1>(pN[j].bottom-pN[j].top+1)*2) && (pN[j].bottom-pN[j].top+1<medium_h/2) ) result[len_result-1]='-'; if( (pN[j].top<pN[j-1].top) && (pN[j].bottom-pN[j].top+1<medium_h/2) ) { len_result--; if( IfExistI(vs[j-1]) ) result[len_result-1]=256+'…'; } if((pN[j].bottom-pN[j].top+1<(medium_h/3)*2)&&( (result[len_result-1]=='I')||(result[len_result-1]=='|')||((result[len_result-1]=='?') && (IfExistDef(vs[j]))) ) ) result[len_result-1]=','; } else { NegPutLetter(result,len_result,vs[j].Alt[0],FALSE); if( (pN[j].right-pN[j].left+1>(pN[j].bottom-pN[j].top+1)*2) && (pN[j].bottom-pN[j].top+1<medium_h/2) ) result[len_result-1]='-'; if( (pN[j].top<pN[j-1].top) && (pN[j].bottom-pN[j].top+1<medium_h/2) ) { len_result--; if( IfExistI(vs[j-1]) ) result[len_result-1]=256+'…'; } if((pN[j].bottom-pN[j].top+1<(medium_h/3)*2)&&( (result[len_result-1]=='I')||(result[len_result-1]=='|')||((result[len_result-1]=='?') && (IfExistDef(vs[j]))) ) ) result[len_result-1]=','; }*/ } r=1; (now->neg).p_rec+=prec/(double)(nN); } /* for(j=1;j<nN;j++) { if(result[r]!='?') { if(result[r]!=' ') { if(result[r]=='|') result[r]='I'; if(Language==7) { if( ((result[r-1]==256+'ь')||(result[r-1]==256+'№'))&&((result[r]=='I' )||(result[r]=='i')||(result[r]=='1')||(result[r]=='l')) ) { if(result[r-1]==256+'ь') result[r-1]=256+'ы'; else result[r-1]=256+'џ'; NegMoveResult(result,len_result,r); r--; } if( (result[r-1]!=' ')&&(result[r-1]!='?')&&(!(IfGl(result[r-1])))&&(result[r]==256+'ƒ') ) { if(IfExistA(vs[j])) { if(j<nN-1) { if(!(IfGl(result[r+1]))) result[r]=256+'ј'; } else result[r]=256+'ј'; } } } if( (pN[j].right-pN[j].left+1>pN[j].bottom-pN[j].top+1) && (result[r]=='I') ) result[r]='-'; r++; } else { j--; r++; } } else r++; } */ //Andrey (now->neg).Flags = 0; if (vertical) { if(dpPrintResConsole) { LDPUMA_Console("\n down-up print:"); NegPrintConsol((double)prob0[0]/nN); LDPUMA_Console("down-up handprint:"); NegPrintConsol((double)prob1[0]/nN); LDPUMA_Console("up-down print:"); NegPrintConsol((double)prob0[1]/nN); LDPUMA_Console("up-down handprint:"); NegPrintConsol((double)prob1[1]/nN); } double down_up = (prob0[0]+prob1[0])/2; double up_down = (prob0[1]+prob1[1])/2; (now->neg).Flags |= FlVert; if (down_up > up_down) (now->neg).Flags |= FlDown2Up; } if(i==(now->neg).nRc-1) { if(dpPrintResConsole) NegPrintConsol(pRc[0].left,pRc[(now->neg).nRc-1].top,pRc[0].right,pRc[0].bottom); } if(dpPrintResConsole) NegPrintConsol(result,len_result); if(i==0) { (now->neg).p_rec/=(double)((now->neg).nRc); (now->neg).p_str/=(double)((now->neg).nRc); (now->neg).p=((now->neg).p_rec+(now->neg).p_str)/2.; if(dpPrintResConsole) { LDPUMA_ConsoleN(""); LDPUMA_Console("Ќегатив с веро¤тностью :"); LDPUMA_ConsoleN(""); LDPUMA_Console("по внутренней структуре "); NegPrintConsol((now->neg).p_str); LDPUMA_Console("по результатам распозновани¤ "); NegPrintConsol((now->neg).p_rec); LDPUMA_Console("итого "); NegPrintConsol((now->neg).p); LDPUMA_ConsoleN("площадь=%d",(int)((now->neg).pRc[0].right-(now->neg).pRc[0].left+1)*(int)((now->neg).pRc[0].bottom-(now->neg).pRc[(now->neg).nRc-1].top+1)); } } if(i==0) { if(dpNegResD) { Rect16 Rect; Rect.bottom=(now->neg).pRc[0].bottom; Rect.left=(now->neg).pRc[0].left; Rect.right=(now->neg).pRc[0].right+1; Rect.top=(now->neg).pRc[(now->neg).nRc-1].top-1; LDPUMA_DrawRect (MainWindowD, &(Rect),0,RGB(0,0,255), 1,code_resd ); LDPUMA_WaitUserInput (NegResD,MainWindowD); LDPUMA_DeleteRects (MainWindowD,code_resd); } } DelNegMas(vs); DelNegMas(uvs); delete[] result; DelNegMas(&pN); } // if((now->neg).rot.pmasp) // DeleteRotateMas(&((now->neg).rot.pmasp),&((now->neg).rot.begx),&((now->neg).rot.movey),&((now->neg).rot.flmovey),&((now->neg).rot.hi)); if(!(now->neg).nRc) { temp=now; if(!temp->prev) root=temp->next; now=now->prev; delete temp; nRC--; } else now=now->prev; } (*proot)=root; }
void SnpHideRects(uint32_t key) { LDPUMA_DeleteRects(NULL,key); }