ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/8/23 18:33:39ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
³µÅÆÊ¶±ðÔ´´úÂ벿·ÝÁ÷³Ì(¹©²Î¿¼Ò»)
ʵ¼ÊÉϳµÅÆÊ¶±ð´úÂëÁ¿²¢²»ÊǺܴó£¬Èç¹û²»Í£µÄÊÖ¹¤ÊäÈ룻Óò»µ½Ò»ÌìµÄʱ¼ä£¬¼´¿É´ó¹¦¸æ³É¡£µ«ÊdzÌÐòÐèÒª·´¸´µ÷ÊÔ£¬²Å¿ÉÒÔ×ßÏò³ÉÊì¡£ËùÒÔ¹¤×÷Á¿ÊǺܴóµÄ¡£ÁíÍâ³µÅÆÊ¶±ð»¹ÓÐÆä±¾ÉíµÄÌØµã¡ª¡ªÀíÂÛ²¢²»³ÉÊì¡£Õâ¾Í¸ø³µÅÆÊ¶±ð´øÀ´Á˸ü¶àµÄ¹¤×÷Á¿¡£Ò»°ãÀ´Ëµ£¬¿ª·¢³µÅÆÊ¶±ð³ÌÐò£¬ÏȰ´ÕÕ×îÔʼ×îÆÓËØµÄ˼Ïë±àÂ룬ȻºóÊDz»¶ÏµØÓÅ»¯¡£Õ⽫¹á³¹µ½Õû¸ö³µÅÆÊ¶±ðµÄ¿ª·¢¹ý³ÌÖÐÈ¥¡£
³µÅÆÊ¶±ð×î»ù±¾µÄÁ÷³ÌÊÇ£º½«²É¼¯ºóµÄͼÏñ¶þÖµ»¯£¬È»ºóÒÀ´Î¾¹ý³µÅƶ¨Î»¡¢×Ö·û·Ö¸î¡¢È¥³ý¸ÉÈÅ£¬×îºóÊÇ×Ö·ûʶ±ð¡£ÓÐʱ»¹»á¼ÓÈë±¾½ÚÇ°Ãæ²¿·ÖËùÐðÊöµÄ˼Ï루±ÈÈç»ØËÝ£©¡£ ÏÂÃæ½«·ÖÎåÕ¾ßÌå½éÉÜÿһ¸öÄ£¿é¡£ Ò»¡¢¶þÖµ»¯
¶þÖµ»¯ÊdzµÅÆÊ¶±ðµÄµÚÒ»²½¡£¶þÖµ»¯Ç°ºóµÄ¶Ô±ÈÈçÏÂͼ£º
¶þÖµ»¯µÄËã·¨ºÜ¼òµ¥£¬Ê×ÏÈÓÐÒ»¸öÁÁ¶ÈµÄãÐÖµ(threshold)£¬¶Ôÿһ¸öÏñËØµÄÁÁ¶ÈºÍÕâ¸öãÐÖµ×ö±È½Ï£¬¸ù¾Ý±È½Ï½á¹ûµÃ³ö³µÅƵÄǰ¾°ºÍ±³¾°¡£ÓÃc/c++ÃèÊöÈçÏ£º void CLPR::Binary(int threshold) {
int y;
for(y=0;y int x; for(x=0;x unsigned char red,green,blue; GetPixel(red,green,blue,x,y); int bright; bright=red+green; if(m_search_blue_plate) { if(bright<=threshold) SetBinary(x,y,BACKGROUND); else SetBinary(x,y,FOREGOUND); } else //we are searching yellow plate { if(bright>=threshold) SetBinary(x,y,FOREGOUND); else SetBinary(x,y,BACKGROUND); } } } } ¶þÖµ»¯Ëã·¨ËäÈ»¼òµ¥£¬µ«ÊÇãÐֵȴ²»ÈÝÒ×ѰÕÒ¡£±¾ÕºóÃæµÄ²¿·Ö£¬½«Öصã½éÉܸ÷ÖÖÇó½âãÐÖµµÄËã·¨¡£ 1¡¢OTSUËã·¨ OTSUËã·¨µÄ˼ÏëÊÇ£º°ÑÊäÈëͼÏñÊ×ÏÈת»»³É»Ò¶ÈͼÏó£¬È»ºó¶ÔͼÏñ½øÐÐÖ±·½Í¼·ÖÎö¡£Èç¹ûÖ±·½Í¼³ÊË«·å·Ö²¼¡£ÄÇô˫·åÖ®¼äµÄ¡°¹È¡±¾ÍÊÇãÐÖµ¡£´Óͳ¼ÆÑ§½Ç¶È½²£¬ãÐÖµÁ½±ßµÄ¾àÀë×î´ó¡£ ÓÉÓÚ³µÅÆÊ¶±ðµÄÌØÊâÐÔ£¬Í¼ÏóÏóËØµãµÄÁÁ¶ÈΪ¸ÃÏóËØµãµÄºìÉ«·ÖÁ¿ºÍÂÌÉ«·ÖÁ¿µÄºÍ£¬²¢ÇÒºöÂÔÀ¶É«·ÖÁ¿¡£ÕâÒ»µã¶ÔÀ¶É«³µÅƺͻÆÉ«³µÅƶ¼ÊÇÊÊÓõġ£ OTSUËã·¨½ö¶ÔÖ±·½Í¼³ÊË«·å·Ö²¼µÄͼÏñÓÐЧ¡£ È«²¿´úÂëÈçÏ£º void LPR::OTSU() { //Ö±·½Í¼Í³¼Æ { int index; for(index=0;index int y; for(y=0;y<=m_height;y++) { int x; for(x=0;x<=m_width;x++) { int bright; bright=Bright(x,y); m_pixel_number[bright]++; } } } //ÕæÕýÇóãÐÖµ double sum; sum=0; int n; n=0; int k; for(k=0;k<=(m_bright_level_count-1);k++) { sum+=k*m_pixel_number[k]; n+=m_pixel_number[k]; } double c_sum; c_sum=0.0; double f_max; f_max=-1.0; int n1; n1=0; for(k=0;k<(m_bright_level_count-1);k++) { n1+=m_pixel_number[k]; if (n1==0) continue; int n2; n2=n-n1; if(n2==0) break; c_sum+=(double)k*m_pixel_number[k]; double m_1,m_2; m_1=c_sum/n1; m_2=(sum-c_sum)/n2; double sb; sb=(m_1-m_2)*(m_1-m_2)*(double)n1*(double)n2; if (f_max f_max=sb; m_prepare_threhold=(int)(k+0.5); } } } 2¡¢MatlabËã·¨ ʹÓÃMatlab½øÐгµÅÆÊ¶±ð£¬Ò²ÊÇÒ»¸ö±È½ÏºÃµÄÑ¡Ôñ¡£ÔÚMatlabµÄ»·¾³ÖÐÊ×ÏȰÑÊäÈëµÄ²ÊɫͼÏñʹÓÃÃüÁîrgb2grayת»»³É»Ò¶ÈͼÏñ¡£ÓÐÁ˻ҶÈͼÏñ¾Í¿ÉÒÔʹÓÃÃüÁîgraythresh»ñµÃãÐÖµÁË¡£×îºóʹÓÃÃüÁîim2bw¶ÔͼÏñ½øÐжþÖµ»¯¡£Ê®·Ö·½±ã£¡´úÂëÈçÏ£º I=imread('blood1.tif'); imhist(I); % È˹¤¹Û²ì»Ò¶ÈÖ±·½Í¼£¬·¢ÏÖ»Ò¶È120´¦Óйȣ¬È·¶¨ãÐÖµT=120 I1=im2bw(I,120/255); % im2bwº¯ÊýÐèÒª½«»Ò¶Èֵת»»µ½[0,1]·¶Î§ÄÚ figure,imshow(I1); ¸Ä½øÎª I=imread('blood1.tif'); imhist(I); I1=graythresh(I); % im2bwº¯ÊýÐèÒª½«»Ò¶Èֵת»»µ½[0,1]·¶Î§ÄÚ figure,imshow(I1); ¶þ¡¢³µÅƶ¨Î» ͼÏñ¶þÖµ»¯£¬Õ¼ÓóµÅÆÊ¶±ðÖеĴ󲿷Öʱ¼ä£¬Ò²ÊÇ×îÄѵġ£ÔÚ¶þÖµ»¯Ö®ºó£¬³µÅÆÊ¶±ð½«±äµÃ±È½ÏÄÑ¡£³µÅƶ¨Î»Îª¶þÖµ»¯ºóµÄµÚÒ»²½¡£ÏÂÃæ·ÖС½Ú·Ö±ð½éÉܸ÷ÖÖ³µÅƶ¨Î»Ëã·¨¡£ ³µÅÆÊ¶±ð¹ý³ÌÖУ¬½Çµã¶¨Î»µÄ»ù±¾Ë¼ÏëÊÇ¡£ÔÚËùÓеı߽çµãÖУ¬Èç¹ûijЩµãµÄÇúÂʰ뾶±È½ÏС£¬ÄÇôÕâЩµã½Ð×ö¡°½Çµã¡±£ºÈçÏÂͼËùʾ£¨½ÇµãÓúìµã±íʾ£©£º ͼÖÐ×Ö·ûÉϺͳµÅƵÄËĽǶ¼Óнǵ㡣µ«ÊÇÕâ²¢²»Ó°Ïì³µÅÆµÄ¶¨Î»¡£ ¸ù¾Ý¾àÀë×î´óµÄËĸö½Çµã£¬µÃµ½Á˳µÅƵÄËĸö½Ç£¬´Ó¶ø¶¨Á˳µÅÆ¡£´Ó½Çµã¶¨Î»µÄÔÀí¿´³ö£¬Èç¹û¾¹ýÐýתºó³µÅƲ¢²»»áÓ°Ïì½Çµã¶¨Î»µÄ³É¹¦ÂʺÍËÙ¶È¡£ ¸ÃËã·¨µÄʵÏÖ¿ÉÒÔ²ÉÈ¡±éÀúÆ¥ÅäµÄËã·¨£¬ÊµÏÖÈçÏ£º void LPR::GetConere() { int y; for(y=0;y int x; for(x=0;x if(Line(x,y,x+4,y)>=3) { if(Line(x,y,x,y+4)>=3) { if(Line(x+1,y+1,x+4,y+4)<=1) Add(x,y,LEFT_TOP_CONNER); } if(Line(x,y,x,y-4)>=3) { if(Line(x+1,y-1,x+4,y-4)<=1) Add(x,y,LEFT_DOWN_CONNER); } } if(Line(x,y,x-4,y)>=3) { if(Line(x,y,x,y+4)>=3) { if(Line(x-1,y+1,x-4,y+4)<=1) Add(x,y,RIGHT_TOP_CONNER); } if(Line(x,y,x,y-4)>=3) { if(Line(x-1,y-1,x-4,y-4)<=1) Add(x,y,RIGHT_DOWN_CONNER); } } } } } º¯ÊýLine(x1,y1,x2,y2)·µ»Ø¹ýÁ½µã(x1,y1),(x2,y2)µÄÖ±Ïߣ¬Ç°¾°µÄÏóËØ¸öÊý¡£ ×¢ÒâÕâÀïµÄ4£¬ÊǼìÑé½ÇµãµÄÇøÓò·¶Î§£¬Èç¹ûÇøÓò¹ý´ó£¬Í¼ÏñÐýתʱ¾Í»áÓ°Ïì³µÅÆ¶¨Î»µÄ³É¹¦ÂÊ¡£ 1¡¢ÉÏ϶¨Î»·½·¨