èªèãšã³ãžã³ã®æ§é
å åŠèªèã·ã¹ãã ã®ãšã³ãžã³ã®æ§é ã衚瀺ããããã®æãäžè¬çãªãªãã·ã§ã³ã®1ã€ã¯æ¬¡ã®ãšããã§ãã
åŸæ¥ãåŠçæ¹æ³ã¯3ã€ã®ã¬ãã«ã«åé¡ã§ããŸãã
- ã©ã¹ã¿ãŒã¬ãã«ïŒäžé£ã®ç»åãã¯ã»ã«ã䜿çšïŒ;
- ããªããã£ãã®ã¬ãã«ïŒã·ã³ãã«ãç·ãåãªã©ãç¹å®ã®ããªããã£ãã§ãã¯ã»ã«ã®ã°ã«ãŒããèå¥ããŸãïŒ;
- æ§é ã¬ãã«ïŒããªããã£ãã®ã°ã«ãŒããè«çãŠãããã«éããŸã-ãããŒãã«ãããããŒãã«ã»ã«ãããã©ãã«ããªã©ïŒ
é»ãç¢å°ã§ããŒã¿è»¢éã®äž»ãªæ¹åã瀺ããŸãããç»åãããŒãããåŠçã«äŸ¿å©ãªåœ¢åŒã«å€æããããªããã£ããååŸããããªããã£ããæ§é ã«æŽçããçµæãæžã蟌ã¿ãŸãã
éãç¢å°ã¯ããã£ãŒãããã¯ããè¡šããŸã -å Žåã«ãã£ãŠã¯ãç¹å®ã®ã¬ãã«ã§ãªããžã§ã¯ããèªèã§ããªããªããŸãïŒå°ãªããšãè«ççã«èš±å®¹ãããæ§é ãããªããã£ãããã¢ã»ã³ãã«ãããããã€ã³ãã®ã»ããããå°ãªããšãããã€ãã®ããªããã£ããåé¢ããŸãïŒã ããã¯ãåã®ã¹ãããã®ãæªããå ã®ç»åãŸãã¯ãšã©ãŒã®ããããã瀺ããŸãããã®ãããªãšã©ãŒãåé¿ããããã«ã以åã®æ§é ã¬ãã«ã§ãããããä»ã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠãªããžã§ã¯ããå床åŠçããŸãã
ãã®æ®µéã§ã¯ã詳现ã¯èª¬æããŸãããããããæ§é æ å ±ã®å åŠèªèã·ã¹ãã ããäžè¬èªèããšå€§ããç°ãªãçç±ã§ããå¿ èŠãªåºåæ§é ãç解ããããšã«ããããšã©ãŒãä¿®æ£ããæ©äŒããããŸãã ãã®ç¶æ³ã¯ãç¹å®ã®èªèæ¹æ³ã®æ§ç¯ãžã®ã¢ãããŒãããããã«å€æŽããåŠçäžã«å€æŽãããæ§é åŠçã®æ®µéã§èšç®ã§ããå質ã¡ããªãã¯ãæã€ããã€ãã®èš±å®¹å€ã«äŸåããé©å¿ã¢ã«ãŽãªãºã ãäœæããããšãå¯èœã«ããŸãã
ã©ã¹ã¿ãŒã¬ãã«ïŒç»åã®ããŠã³ããŒã
ãã°ãããOpenCVã©ã€ãã©ãªã䜿çšããããããã®æé ã¯å¯èœãªéãç°¡åã§ãã OpenCVã¯ãPNGãJPGãBMPãDIBãTIFFãPBMãRASãEXRãªã©ãå€ãã®äžè¬çãªã©ã¹ã¿ãŒåœ¢åŒãããŒãã§ããŸããå®éã1è¡ã§ïŒ
cv::Mat mat = cv::imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
éžæãããã©ã¡ãŒã¿CV_LOAD_IMAGE_GRAYSCALEã䜿çšãããšããã¯ã»ã«åŒ·åºŠã®ãããªãã¯ã¹åœ¢åŒã§ç»åãã¢ããããŒãã§ããŸãïŒã°ã¬ãŒã¹ã±ãŒã«ãžã®å€æã¯èªåçã«è¡ãããŸãïŒã äžéšã®ã¿ã¹ã¯ã§ã¯è²æ å ±ã䜿çšããå¿ èŠããããŸãããç§ãã¡ã®ã¿ã¹ã¯ã§ã¯å¿ èŠãããŸãããããã«ãããã¡ã¢ãªå²ãåœãŠãå€§å¹ ã«ç¯çŽã§ããŸãã ãéæãªãPNGã®èªã¿èŸŒã¿ãé€ãããªãã¯ã®ãã¡ãéæãªèæ¯ã¯é»ãšè§£éãããŸããããã¯ãCV_LOAD_IMAGE_UNCHANGEDãã©ã¡ãŒã¿ãŒã䜿çšããŠããŠã³ããŒãããBGRAè²æ å ±ãæåã§åŠçããããšã§ç°¡åã«å®è¡ã§ããŸãïŒã¯ããOpenCVã¯ãã®é åºã§è²ããŒã¿ãä¿åããŸãïŒã
ãã®æ®µéã§ã次ã®ããã«ãªããŸãã
ç§ã¯æ æã«ãæªãããšããç»åãéžãã§ãå åŠèªèãããã«è§£æ±ºããå€ãã®å°é£ã«é¢é£ããŠããããšã瀺ããŸããããããã¯ãå®ç掻ãããã®ãã®ã§ãã
ã©ã¹ã¿ãŒã¬ãã«ïŒäºåãã£ã«ã¿ãªã³ã°
äºåãã£ã«ã¿ãªã³ã°ã®äž»ãªã¿ã¹ã¯ã¯ãç»åã®ãå質ããæ¹åããããšã§ãã詳现ã倱ãããšãªããã€ãºãé€å»ããã³ã³ãã©ã¹ãã埩å ããŸãã
ã°ã©ãã£ãã¯ãšãã£ã¿ãŒã§æŠè£ ãããšãç»è³ªãåäžãããæ¹æ³ã«ã€ããŠå€ãã®ããªãããŒãªã¹ããŒã ãç解ã§ããŸãããããã§ã¯ã1ã€ã®ç»åã«ã®ã¿é©çšã§ããèªåãã£ã¯ã·ã§ã³ãšãã£ã¯ã·ã§ã³ãšã®å¢çãç解ããããšãéèŠã§ãã 以äžã«ãå€ããå°ãªããèªååãããã¢ãããŒãã®äŸã瀺ããŸãã ã¹ããŒã¹ãã¹ã¯ ã äžå€®å€ãã£ã«ã¿ãŒ ã ã°ãŒã°ã«ã奜ããªäººåã ã
æ¹æ³ãæ¯èŒããç¹å®ã®æ¹æ³ãéžæããçç±ã瀺ããããšæããŸãããå®éã«ã¯ããã¯å°é£ã§ãã ããŸããŸãªç»åã§ã¯ãç¹å®ã®æ¹æ³ã«ã¯é·æãšçæããããå¹³åããŠãã以äžã®è§£æ±ºçã¯ãããŸããããããã£ãŠãImago OCRã§ã¯ãç¹å®ã®ã±ãŒã¹ã§äœ¿çšã§ãããã£ã«ã¿ãŒã®ã¹ã¿ãã¯ãèšèšããŸããããçµæã®éžæã¯å質ã¡ããªãã¯ã«äŸåããŸãã
ãããã1ã€ã®èå³æ·±ã解決çã«ã€ããŠã話ããããšæããŸãïŒ Retinex Poisson Equation
ãã®æ¹æ³ã®å©ç¹ã¯æ¬¡ã®ãšããã§ãã
- ããªãé«éã
- çµæã®ãã©ã¡ãŒã¿ãŒåå¯èœãªå質ã
- äœæ¥äžã®æµžé£ã®æ¬ åŠãããã³ãã®çµæã詳现ã«å¯Ÿãããæ床ãã
- ãããŠãäž»ãªèå³æ·±ãæ©èœã¯ãç §æã®ããŒã«ã«ã¬ãã«ã®æ£èŠåã§ãã
æåŸã®ç¹æ§ã¯èšäºã®ç»åã§å®å šã«ç€ºãããŠãããæ®åœ±æã«ç©äœã®ç §æãäžåäžã«ãªãå¯èœæ§ããããããèªèã«ãšã£ãŠéèŠã§ãïŒçŽçãå æºã«åããŠå ãäžåäžã«èœã¡ãïŒïŒ
ã¢ã«ãŽãªãºã ã®è¡šé¢èšè¿°ïŒ
- ãããå€Tã«ããããŒã«ã«ãããå€ç»åãã£ã«ã¿ãªã³ã°ïŒ ã©ãã©ã·ã¢ã³ãããå€ ïŒ;
- åä¿¡ããç»åã®é¢æ£ã³ãµã€ã³å€æ ã
- é«åšæ³¢ç¹æ§ããã£ã«ã¿ãªã³ã°ããäœããã³äžåšæ³¢æ°çšã®ç¹å¥ãªæ¹çšåŒïŒRetinexæ¹çšåŒïŒã解ããŸãã
- éé¢æ£ã³ãµã€ã³å€æã
ã¢ã«ãŽãªãºã èªäœã¯ãã©ã¡ãŒã¿ãŒTã«ããªãææã§ããããã®é©å¿ã䜿çšããŸããã
- T = 1,2,4,8ã®RetinexïŒTïŒãèæ ®ããŸã
- Retinexã®çµæéã®ãã¯ã»ã«ããšã®äžå€®å€ãã£ã«ã¿ãªã³ã°
- ã³ã³ãã©ã¹ããæ£èŠåãã
OpenCVãã©ã®ããã«åœ¹ç«ã€ãïŒé¢æ£ã³ãµã€ã³å€æãèšç®ããããã®æ¢è£œã®é¢æ°ããããŸãã
void dct(const Mat& src, Mat& dst, int flags=0); // flags = DCT_INVERSE for inverse DCT
ãŸããäžè¬çãªã±ãŒã¹ïŒCore i5ãCore Duoã§ãã¹ãæžã¿ïŒã§ãããèšãããšã¯æ³å®ããŠããŸããããlibfftwã®åæ§ã®ãã®ãããé床ã¯æªããããŸããã
å ã®ç»åã®å Žåãäžèšã®æ¹æ³ã§ã¯ããªãè¯ãçµæãåŸãããŸãã
ããã§ãäºåãã£ã«ã¿ãªã³ã°ãäœããã¹ããããããŸãã«ç解ãããã£ãŒãããã¯ã¡ã«ããºã ã§å€æŽã§ãããã©ã¡ãŒã¿ãŒã1ã€ãããŸããããã¯ã䜿çšãããã£ã«ã¿ãŒã®ã€ã³ããã¯ã¹ã§ã ã
ä»¥äž ïŒå®éããã¡ãããä»ã«ãå€ãã®ãã©ã¡ãŒã¿ãŒããããŸãïŒããšãã°ãåããã®ããããžãã¯ãT = 1,2,4,8ïŒãããé ãæºãã¶ããããšã®ãªãããã«ãããã§ã¯èª¬æããŸããã ãããã®å€ãããããããããžã®åç §ã¯æ©æ¢°åŠç¿ã®ã»ã¯ã·ã§ã³ã«è¡šç€ºãããŸããããã©ã¡ãŒã¿ãŒã®æ°ã§ãã¬ãŒã³ããŒã·ã§ã³ããªãŒããŒããŒãããªãããã«ã詳现ãçç¥ããŸãã
ã©ã¹ã¿ãŒã¬ãã«ïŒäºå€å
次ã®ã¹ãããã§ã¯ãé»ãšçœã®ç»åãååŸããŸããé»ã¯ããã€ã³ããã®ååšã«å¯Ÿå¿ããçœã¯ãã®äžåšã«å¯Ÿå¿ããŸãã ããã¯ãããšãã°ãªããžã§ã¯ãã®èŒªéãååŸãããªã©ãå€ãã®ã¢ã«ãŽãªãºã ãããŒãããŒã³ã§å»ºèšçã«æ©èœããªãããã«è¡ãããŸãã æãåçŽãª2å€åæ¹æ³ã®1ã€ã¯ãããå€ãã£ã«ã¿ãªã³ã°ã§ãïŒãããå€ãšããŠtãéžæããtãã倧ãã匷床ãæã€ãã¹ãŠã®ãã¯ã»ã«ãèæ¯ã§ãããå°ãªããã®ã¯ããã€ã³ããã§ãïŒããé©å¿æ§ãäœãããã otsuãããå€ãŸãã¯é©å¿ã¬ãŠã¹ãããå€ãããé »ç¹ã«äœ¿çšãããŸãã
ããé«åºŠãªæ¹æ³ã®é©å¿æ§ã«ãããããããåºåæ å ±ã®ãéãã決å®ãããããå€ãå«ãŸããŠããŸãã ããå³ãããããå€ã®å Žå-ããã€ãã®èŠçŽ ã倱ãããå¯èœæ§ããããŸã;ããœããããããå€ã®å Žåãããã€ãºããåºãå¯èœæ§ããããŸãã
匷åãªãããå€åŠç | 匱ããããå€åŠç |
åç»åã®ãããå€ãæ£ç¢ºã«æšæž¬ããããšãã§ããŸãããå¥ã®æ¹æ³ã§è¡ã£ã-åä¿¡ããç»åãšç°ãªãé©å¿äºå€åãããå€ãšã®çžé¢ã䜿çšããŸããã
- ïŒäžãããããããå€t1ããã³t2ã§ïŒåŒ·ãããã³åŒ±ã2å€åãèæ ®ããŸãã
- ç»åããã¯ã»ã«ããšã®é£çµãããé åã®ã»ããã«åå²ããŸãïŒ ã»ã°ã¡ã³ãã®ããŒãã³ã° ïŒã
- 察å¿ãã匷åãªã»ã°ã¡ã³ããšçžé¢é¢ä¿ããããæå®ãããïŒcratioïŒãããå°ãããã¹ãŠã®ã匱ããã»ã°ã¡ã³ããåé€ããŸãã
- äœå¯åºŠã®ã匱ããã»ã°ã¡ã³ãããã¹ãŠåé€ããŸãïŒé»/çœãã¯ã»ã«ã®æ¯çã¯æå®ãããæ¯çãããå°ããïŒã
- æ®ãã®ã匱ããã»ã°ã¡ã³ãã¯ã2å€åã®çµæã§ãã
ãã®çµæã ã»ãšãã©ã®å Žå ããã€ãºããªãã詳现ãªæ倱ã®ãªãç»åãåŸãããŸãã
説æãããœãªã¥ãŒã·ã§ã³ã¯ã1ã€ã®ãã©ã¡ãŒã¿ãŒããåãé€ãããä»ã®ãã©ã¡ãŒã¿ãŒå šäœãå°å ¥ããããšããäºå®ã«ç §ãããŠå¥åŠã«èŠãããããããŸããããäž»ãªã¢ã€ãã¢ã¯ããå®éã®ã2å€åãããå€ãééã«åãŸãå Žåãæ£ãã2å€åãä¿èšŒãããããšã§ãç§ãã¡ãéžæããt1ãšt2ã®éã§çµè«ä»ããããŸãïŒãã®ééããç¡éã«ãå¢ããããšã¯ã§ããŸããããt1ãšt2ã®å·®ã«ãå¶éããããŸãïŒã
ãã®ã¢ã€ãã¢ã¯ãããŸããŸãªãããå€ãã£ã«ã¿ãªã³ã°æ¹æ³ãšOpenCVãé©çšãããšéåžžã«æå¹ã§ããOpenCVã¯ãçµã¿èŸŒã¿ã®é©å¿ãã£ã«ã¿ãªã³ã°æ©èœã®ååšã«ãã£ãŠãæ¯æŽããããŸãã
cv::adaptiveThreshold(image, strongBinarized, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, strongBinarizeKernelSize, strongBinarizeTreshold); cv::threshold(image, otsuBinarized, otsuThresholdValue, 255, cv::THRESH_OTSU);
æçµã€ã¡ãŒãžã«ã»ã°ã¡ã³ãããŸã£ããå«ãŸããŠããªãå Žåããã£ã«ã¿ãªã³ã°ãšã©ãŒãçºçããŠããå¯èœæ§ããããå¥ã®äºåãã£ã«ã¿ãŒãæ€èšãã䟡å€ããããŸãïŒããã£ãŒãããã¯ã;ãšã³ãžã³æ§é ã®ã€ã¡ãŒãžã®ãåããéãç¢å°ïŒã
ããªããã£ãã¬ãã«ïŒãã¯ãã«å
èªèããã»ã¹ã®æ¬¡ã®ã¹ãããã¯ããã¯ã»ã«ã®ã»ããïŒã»ã°ã¡ã³ãïŒãããªããã£ãã«å€æããããšã§ãã ããªããã£ãã¯ãåãã»ã°ã¡ã³ãã®ã»ãããé·æ¹åœ¢ïŒç¹å®ã®ããªããã£ãã®ã»ããã¯è§£æ±ºããåé¡ã«ãã£ãŠç°ãªããŸãïŒããŸãã¯ã·ã³ãã«ã§ãã
åãªããžã§ã¯ããã©ã®ã¯ã©ã¹ã«å±ããŠãããã¯ããããŸããããããŸããŸãªæ¹æ³ã§ãã¯ãã«åããããšããŠããŸãã åããã¯ã»ã«ã®ã»ããããã»ã°ã¡ã³ãã®ã»ãããšããŠãããã³ã·ã³ãã«ïŒããšãã°ããNãããIãïŒã®äž¡æ¹ãšããŠæ£åžžã«ãã¯ãã«åã§ããŸãã ãŸãã¯ãåãšèšå·ã¯ãOãã§ãã ãã®æ®µéã§ã¯ããªããžã§ã¯ããã©ã®ã¯ã©ã¹ãæã£ãŠãããã確å®ã«ç¥ãå¿ èŠã¯ãããŸããããç¹å®ã®ã¯ã©ã¹ã§ã®ãã¯ãã«åãšãªããžã§ã¯ãã®é¡äŒŒæ§ã®ç¹å®ã®ã¡ããªãã¯ãå¿ èŠã§ãã ããã¯éåžžãäžé£ã®èªèæ©èœã«ãã£ãŠè§£æ±ºãããŸãã
ããšãã°ããã¯ã»ã«ã®ã»ããã®å Žå 次ã®ãªããžã§ã¯ãã®ã»ãããååŸããŸãïŒã¡ããªãã¯ã®ç¹å®ã®æ°ã«ã€ããŠã¯èããªãã§ãã ããããããã¯èªèããã»ã¹ã«å¿ èŠãªãã®ãè¡šãããã«äžããããŸãããããèªäœã¯ãŸã æå³ããªããŸããïŒã
- 0.1ã®ã¡ããªãã¯ïŒè·é¢ïŒå€ãæã€ãHãèšå·ã®åœ¢åŒã®ãã¯ãã«åïŒããã¯æ£ç¢ºã«Hã§ããå¯èœæ§ããããŸãïŒ ã
- 4.93ã®ã¡ããªãã¯å€ãæã€ã·ã³ãã«ãRãã®åœ¢åŒã§ã®ãã¯ãã«åïŒå¯èœæ§ã¯äœãã§ããããããRã§ããå¯èœæ§ããããŸãïŒ ã
- 3ã€ã®ã»ã°ã¡ã³ã ã|ããã-ããã|ã ã®åœ¢åŒã§ã®ãã¯ãã«å ã¡ããªãã¯å€ã0.12ã®å ŽåïŒãããã3ã€ã®ã»ã°ã¡ã³ãã§ããå¯èœæ§ããããŸãïŒ ã
- 45.4ã®ã¡ããªãã¯å€ãæã€èŸºxãyã®å¯žæ³ãæã€é·æ¹åœ¢ãšããŠã®ãã¯ãã«åïŒãŸã£ããé·æ¹åœ¢ã§ã¯ãªãïŒ ã
- ã¡ããªãã¯å€+ infã®åãšããŠã®ãã¯ãã«åïŒä¿èšŒã¯åã§ã¯ãããŸããïŒ ;
- ...
ãã¯ãã«åã®ãªã¹ããååŸããã«ã¯ãç¹å®ã®ã¯ã©ã¹ããšã«èªèããªããã£ããå®è£ ããå¿ èŠããããŸãã
ã»ã°ã¡ã³ãã»ããã®èªè
éåžžãã©ã¹ã¿é åã¯æ¬¡ã®ããã«äžé£ã®ã»ã°ã¡ã³ãã«ãã¯ãã«åãããŸãã
- éåŒããã£ã«ã¿ãŒã®å®è¡ïŒ -> ïŒ;
- ã»ã°ã¡ã³ããŒã·ã§ã³ïŒãã³ã«ãïŒïŒ ïŒ;
- åã»ã°ã¡ã³ãã®ãã€ã³ãã®è¿äŒŒ ;
- çµæã¯ãè¿äŒŒã®ã»ãããšãå ã®è¿äŒŒããã®åå·®ã§ã ã
OpenCVã«ã¯æ¢è£œã®éåŒããã£ã«ã¿ãŒã¯ãããŸããããå®è£ ããããšã¯ãŸã£ããé£ãããããŸãã ã ã»ã°ã¡ã³ããŒã·ã§ã³ïŒdecornerïŒããããŸãããããã¯å®å šã«äºçŽ°ãªããšã§ãã3ã€ä»¥äžã®è¿åãããé åãããã¹ãŠã®ãã€ã³ããç Žæ£ããŸãã ããããOpenCVã®äžé£ã®ã»ã°ã¡ã³ããšããŠã®ãã€ã³ãã®è¿äŒŒãååšãããããããã䜿çšããŸããã
cv::approxPolyDP(curve, approxCurve, approxEps, closed); // approximation of curve -> approxCurve
éèŠãªãã©ã¡ãŒã¿ãŒã¯è¿äŒŒèš±å®¹èª€å·®ïŒè¿äŒŒEps ïŒã§ãããå¢å ãããšçµæãšããŠããå€ãã®ã»ã°ã¡ã³ããåŸãããæžå°ãããš-ç²ãè¿äŒŒãšãªããçµæãšããŠã¡ããªãã¯å€ã倧ãããªããŸãã æ£ããéžææ¹æ³ã¯ ïŒ
ãŸããå¹³åç·ã®å€ªãã«åŒ·ãäŸåããŸãïŒçŽæçã«-ç·ã®å€ªãã倧ããã»ã©ã现éšã¯å°ãªããªããŸããã·ã£ãŒããã³ã·ã«ã§æãããå³é¢ã¯ãããŒã«ãŒã§æãããå³é¢ãããã¯ããã«è©³çŽ°ã«ãªããŸãïŒã
approxEps = averageLineThickness * magicLineVectorizationFactor;
第äºã«ããªããžã§ã¯ãã®åé¡ã«å¯Ÿããäžèšã®ã¢ãããŒããèæ ®ããŠãç°ãªãapproiceEpsãæã€ã»ã°ã¡ã³ããïŒç¹å®ã®ã¹ãããã§ïŒãã¯ãã«åããè«çæ§é ãåæãã段éã§ãããé©åãªããéžæããããšãã§ããŸãã
ãµãŒã¯ã«èªè
ãšãŠãç°¡åã§ãïŒ
- åã®äžå¿ãæ¢ããŠããŸãïŒãã€ã³ãã®åº§æšã®å¹³åïŒ-ïŒxãyïŒ;
- ååŸïŒäžå¿ããã®ãã€ã³ãã®å¹³åè·é¢ïŒ-rãæ¢ããŠããŸãã
- ãšã©ãŒãèæ ®ããŸãïŒäžå¿ïŒxãyïŒãšååŸrããã³åãaverageLineThicknessãæã€åãžã®ãã€ã³ãã«ããå¹³åè·é¢ã
- ãµãŒã¯ã«ãã¬ãŒã¯ã«è¿œå ã®ããã«ãã£ãæ€èšããŸãïŒmagicCirclePenalty *ïŒãã¬ãŒã¯ã®ïŒ ïŒã
magicCirclePenaltyãéžæããåŸããã®ã³ãŒããããã³ããã«é¡äŒŒããé·æ¹åœ¢ã®èªèã«ãŸã£ããåé¡ã¯ãããŸããã§ããã
æåèªè
ã¯ããã«èå³æ·±ãéšåãšããŠã ããã¯ææŠçãªåé¡ã§ã-ãæé©ãªãèªèææšã§ãããšäž»åŒµããåäžã®ã¢ã«ãŽãªãºã ã¯ãããŸããã ãã¥ãŒãªã¹ãã£ãã¯ã«åºã¥ãéåžžã«åçŽãªæ¹æ³ããããŸããããšãã°ã ãã¥ãŒã©ã«ãããã¯ãŒã¯ã䜿çšãããªã©ãããè€éãªæ¹æ³ããããŸããããè¯ããèªèå質ãä¿èšŒãããã®ã¯ãããŸããã
ãããã£ãŠãæåèªèã®ããã€ãã®ãµãã·ã¹ãã ã䜿çšãã決å®ãšéèšçµæã®éžæã¯éåžžã«èªç¶ã«èŠããŸããïŒp1 =ã¢ã«ãŽãªãºã 1ã«ãã£ãŠé åAãã·ã³ãã«sãšããŠèªèãããp2 =ã¢ã«ãŽãªãºã 2ãé åAãã·ã³ãã«sãšããŠèªèããã¡ããªãã¯å€ã®å Žåãæçµå€p = fïŒp1ãp2ïŒã 䟿å©ã§å¹æµããå€ãé«éãååãªå®å®æ§ãåãã2ã€ã®ã¢ã«ãŽãªãºã ãéžæããŸããã
- ããŒãªãšèšè¿°åã«åºã¥ãèªè;
- ãã€ã³ãã®äºæ¬¡åå·®ã®ãã¹ã¯ã
ããŒãªãšèšè¿°åã«åºã¥ãæåèªè
æºåïŒ
- ãªããžã§ã¯ãã®å€éšèŒªéã®ååŸã
- 茪éç¹ïŒx; yïŒã®åº§æšã®è€çŽ æ°x + iyãžã®å€æã
- ãããã®æ°å€ã®ã»ããã®é¢æ£ããŒãªãšå€æã
- ã¹ãã¯ãã«ã®é«åšæ³¢éšåã®é€å»ã
éããŒãªãšå€æãå®è¡ãããšãäžããããè¿äŒŒåºŠïŒNã¯æ®ã£ãŠããä¿æ°ã®æ°ïŒã§å ã®å³ãèšè¿°ããç¹ã®ã»ãããååŸããŸãã
ãèªèãæäœã¯ãèªèãããé åã®ããŒãªãšèšè¿°åãèšç®ãããããããµããŒããããæåã«å¯Ÿå¿ããäºåå®çŸ©ãããã»ãããšæ¯èŒããããšã§æ§æãããŸãã 2çµã®èšè¿°åããã¡ããªãã¯å€ãååŸããã«ã¯ãç³ã¿èŸŒã¿ãšåŒã°ããæäœãå®è¡ããå¿ èŠããããŸããd= sumïŒïŒd1 [i] -d2 [i]ïŒ* w [i]ãi = 1ãNïŒãd1ããã³d2ã¯èšè¿°åã®ã»ããã§ãããŒãªãšãwã¯åä¿æ°ã®éã¿ãã¯ãã«ã§ãïŒæ©æ¢°åŠç¿ã§ååŸããŸããïŒã ã³ã³ããªã¥ãŒã·ã§ã³å€ã¯ãæ¯èŒãããã·ã³ãã«ã®ã¹ã±ãŒã«ã«é¢ããŠäžå€ã§ãã ããã«ããã®é¢æ°ã¯é«åšæ³¢ãã€ãºïŒå³ã®ããžãªã¡ããªããå€æŽããªãã©ã³ãã ãã¯ã»ã«ïŒã«èæ§ããããŸãã
OpenCVã¯ããã®ã¡ãœããã®å®è£ ã«éåžžã«åœ¹ç«ã¡ãŸãã ãªããžã§ã¯ãã®å€éšèŒªéãååŸããããã®æ¢è£œã®é¢æ°ããããŸãã
cv::findContours(image, storage, CV_RETR_EXTERNAL);
ãããŠãé¢æ£ããŒãªãšå€æãèšç®ããé¢æ°ããããŸãïŒ
cv::dft(src, dst);
ç³ã¿èŸŒã¿ããã³äžéåå€æãå®è£ ããããã ãã«æ®ããèšè¿°åã®ã»ãããä¿åããŸãã
ãã®æ¹æ³ã¯ææžãæåã«ã¯é©ããŠããŸããïŒããããä»ã®äžéšã¯é«å質ãªçµæãåŸãããªãããïŒãç»åå šäœã«å¯ŸããŠé«åšæ³¢ãã€ãºãã€ãŸããäœåãªããã¯ã»ã«ã倧ãããªããããäœè§£å床ã®æåã«ã¯ããŸãé©ããŠããŸãããç Žæ£ããªãèŠçŽ ã«åœ±é¿ãäžãå§ããŸãã æ¯èŒããä¿æ°ã®æ°ãæžããããšã¯ã§ããŸãããåããããªå°ããªæåãéžæããããšã¯é£ãããªããŸãã ãããŠãå¥ã®èªèæ¹æ³ãå°å ¥ãããŸããã
äºæ¬¡åå·®ãã¹ã¯ã«åºã¥ãæåèªè
ããã¯éåžžã«çŽæçãªãœãªã¥ãŒã·ã§ã³ã§ãããå€æããããã«ããããã解å床ã®å°å·æåã«æé©ã§ãã åã解å床ã®2ã€ã®çœé»ç»åãããå Žåããããããã¯ã»ã«ããšã«æ¯èŒããããšãåŠã¶ããšãã§ããŸãã
ç»å1ã®åãã€ã³ãã«ã€ããŠãããã«ãã£ãèæ ®ãããŸããåãè²ã®ç»å2ã®ãã€ã³ããŸã§ã®æå°è·é¢ã§ãã ãããã£ãŠãã¡ããªãã¯ã¯åçŽã«çœ°éãšæ£èŠåä¿æ°ã®åèšã§ãã ãã®æ¹æ³ã¯ããã€ãºã®ããå°ããªè§£å床ã®ç»åã§ã¯ããã«å®å®ããŸãã蟺ã®é·ããnã®ç»åã®å Žåãæ倧ãã¯ã»ã«ã®kããŒã»ã³ããŸã§ã®åã ã®ãã¯ã»ã«ã¯ãææªã®å Žåk * nãè¶ ããŸãããã»ãšãã©ã®å Žåãç»åã®ãæ£ããããã¯ã»ã«ã«é£æ¥ããŠããããã§ãã
ç§ã説æããããã«ããã®æ¹æ³ã®æ¬ ç¹ã¯äœéã§ãã åãã¯ã»ã«ïŒOïŒn 2 ïŒïŒã«ã€ããŠãå¥ã®ç»åïŒOïŒn 2 ïŒïŒã®åãè²ã®ãã¯ã»ã«ãŸã§ã®æå°è·é¢ãèæ ®ããŸããããã«ãããOïŒn 4 ïŒãåŸãããŸãã
ããããããã¯äºåèšç®ã«ãã£ãŠéåžžã«ç°¡åã«åŠçã§ããŸããããã«ãã£_ãã¯ã€ãïŒxãyïŒãšããã«ãã£_ãã©ãã¯ïŒxãyïŒã®2ã€ã®ãã¹ã¯ãäœæããŸããèšç®ããã眰éã¯ãããããçœãŸãã¯é»ã®ãã¯ã»ã«ïŒxãyïŒã«å¯ŸããŠä¿åãããŸãã 次ã«ããèªèãã®ããã»ã¹ïŒã€ãŸããã¡ããªãã¯ã®èšç®ïŒã¯OïŒn 2 ïŒã«é©åããŸãã
for (int y = 0; y < img.cols; y++) { for (int x = 0; x < img.rows; x++) { penalty += (image(y,x) == BLACK) ? penalty_black(y,x) : penalty_white(y,x); } }
åæåã®ã¹ãã«ããšã«ãã¹ã¯ïŒpenalty_whiteãpenalty_blackïŒãä¿åããèªèããã»ã¹ã§ãããããœãŒãããã ãã§ãã OpenCVã¯ãã®ã¢ã«ãŽãªãºã ã®å®è£ ã«ã»ãšãã©åœ¹ç«ã¡ãŸããããç°¡åã§ãã ããããç§ãèšã£ãããã«ãæ¯èŒãããç»åã¯åã解å床ã§ãªããã°ãªããªãã®ã§ãäžæ¹ãããäžæ¹ã«æã£ãŠããã«ã¯ãé¢æ°ãå¿ èŠãããããŸããïŒ
cv::resize(temp, temp, cv::Size(size_x, size_y), 0.0, 0.0);
æåèªèã®äžè¬çãªããã»ã¹ã«æ»ããšãäž¡æ¹ã®ã¡ãœãããå®è¡ããçµæãã¡ããªãã¯å€ã®ããŒãã«ãååŸãããŸãã
èªèå€ã¯1ã€ã®èŠçŽ ã§ã¯ãªããæãé«ã確çã§ã·ã³ãã«ãCãã§ããããšãããã£ãŠããããŒãã«å šäœã§ãããã0ããŸãã¯ã6ãïŒãŸãã¯ãOããŸãã¯ãcãã§ããå¯èœæ§ããããŸããç»é¢ã«åãŸããŸããã§ããïŒã ãããŠãããããã©ã±ããã®å Žåãéããããéãå¯èœæ§ãé«ããªããŸãã ããããä»ã®ãšããããããã·ã³ãã«ã§ãããã©ããããããããŸãã...
ããªããã£ãã¬ãã«ïŒåé¢
è¶ çç£çãªïŒéåïŒïŒã³ã³ãã¥ãŒã¿ãŒã®çæ³çãªäžçã«äœãã§ãããªãããããããã®ã¹ãããã¯å¿ èŠãªãã§ãããïŒããã€ãã®ãªããžã§ã¯ãã®ã»ããããããããããã«æ£ç¢ºã«ãããäœã§ãããã決å®ããã確çãã®è¡šããããŸãã åãªããžã§ã¯ãã®ããŒãã«å ã®ãã¹ãŠã®èŠçŽ ã䞊ã¹æ¿ããè«çæ§é ãæ§ç¯ããæå¹ãªãªããžã§ã¯ãããæãå¯èœæ§ã®é«ããã®ïŒåã ã®ãªããžã§ã¯ãã®ã¡ããªãã¯ã®åèšã«ããïŒãéžæããŸãã ããããã¢ã«ãŽãªãºã ã®ææ°é¢æ°çãªè€éããé€ããŠãããžãã¹ã
ãã ããå®éã«ã¯ãéåžžãããã©ã«ãã§ãªããžã§ã¯ãã®ã¿ã€ããå€å¥ããå¿ èŠããããŸãã ã€ãŸããç»åå ã®ãªããžã§ã¯ãã®æ¢è£œã®è§£éãéžæããããã«ããããã«å€æŽããããšãå¯èœã§ãã åã®ã¹ãããïŒãã¯ãã«åïŒã§ãªããžã§ã¯ãã®ã¿ã€ããéžæã§ããªãã£ãã®ã¯ãªãã§ããïŒ ãã¹ãŠã®ãªããžã§ã¯ãã«é¢ããååãªçµ±èšæ å ±ããããŸããã§ãããç»åå šäœããç¹å®ã®ãã¯ã»ã«ã»ãããåé¢ããŠè§£éãããšããã®æå³ã確å®ã«å€æããããšãåé¡ã«ãªããŸãã
ããã¯ãæ§é æ å ±ãèªèããäžã§æãéèŠãªåé¡ã®1ã€ã§ãã 圌ã¯åã«ãã¯ã»ã«ãåå¥ã«èŠãæ¹æ³ãç¥ããªãã®ã§ããããæã£ãŠãã人ã«ãšã£ãŠã¯è»ãããã¯ããã«åªããŠããŸãã ãããŠãOCRã·ã¹ãã ãæ§ç¯ããéã®å€±æã®åæ段éã®1ã€ã¯ãäžèŠäººéçãªã¢ãããŒããã段éçã«ãã¢ã«ãŽãªãºã åããäžæºè¶³ãªçµæãåŸãè©Šã¿ã§ãã çŸæç¹ã§ã¯ãããªããã£ãã®èªèã¢ã«ãŽãªãºã ãå°ãæ¹åããŠã誀解ãããªãããã«ãã䟡å€ããããããè¯ãçµæãåŸãããããã§ãããåžžã«è«çããç Žããåçãããã€ããããŸãã
ãããŠãç§ãã¡ã¯ãããäœã§ãããã人ã«å°ããŸã-
ãã¡ãããããã¯åãªãæ²ç·ã§ãã ããããã·ã³ãã«ãŸãã¯çŽç·ã»ã°ã¡ã³ãã®ã»ãããšããŠã©ã³ã¯ä»ãããå¿ èŠãããå Žåãããã¯äœã§ããïŒ æ¬¡ã«ãããã¯ã»ãšãã©ã®å ŽåãæåãlããŸãã¯æãã®2æ¬ã®çŽç·ã®ããããã§ãïŒè§ã ããäžžãæãããŸãïŒã ããããæ£ãã解éãéžæããæ¹æ³ã¯ïŒ åã®ã¹ãããã®ãã·ã³ã¯ãããããã®åé¡ã解決ãã1/2ã®ç¢ºçã§æ£ãã解決ããããšãã§ããŸãã ãããã1/2ã¯æ§é æ å ±ã®èªèã·ã¹ãã ã®å®å šãªåŽ©å£ã§ãããæ§é ãå°ç¡ãã«ããŠããŸããŸããæ€èšŒã«åæ ŒããŸãããããšã©ãŒããä¿®æ£ããå¿ èŠããããŸãã .
, :
, - (, ). , , , « » â .
:
, , «» , , . , , , â . , «Cl» () , , - «l».
. .
:
- «» ( ), C, .
, .
:
- ;
- , ;
- ;
- , ;
- , hu moments ( OpenCV ).
, â , , â " ".
, : ( __-1 __+2, 3*__ 0.5* ), . , .
. â . , , - ( ). «» ( â , «l» , «l». , ).
:
- ;
- , ;
- : , .
« » â .
, , .
. , .
, Imago OCR , , ( ), . , . , . , .
, . , â , «» «», :
, «» , :
â . , , , , .
:
â (, ). , , , â ( , â ).
, . , «» ( ), «». , , â «» .
, «» . , â .
« » :
( baseline_y), , â . baseline_y :
- ( );
- y , .
, ( )? ; , , , « ». baseline_y , â .
, . :
- % , ;
- .
: 30% â . 29? duck test. - , â . , - .
? , . . ( , ?). . , :
- k% , f(k) ;
- n% , , a..z g(n) .
, â , . «» .
â . â : â , , â . .
: {c1, c2}
c1 â «Y» 0.1 «X» 0.4;
c2 â «c» 0.3 «e» 0.8
, â Yc . Yc . . â .
4 , " Xe ", 1.2.
, . , «Yc» , . , (1.2) (0.4), (0.8). , , . ?
, , ? , , ?
â , . , , .
, â , . , . .
, , , , , , ; ( ) . , , â .
çµè«ã®ä»£ããã«
« » OCR , . , , , , . .
, , open-source Imago OCR , google .