freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

車牌識別采購、研發(fā)縱覽(編輯修改稿)

2025-06-12 12:03 本頁面
 

【文章內(nèi)容簡介】 別過程中,角點定位的基本思想是:在所有的邊界點中,如果某些點的曲率半徑比較小,那么這些點叫做“角點”:如下圖所示(角點用紅點表示):圖中字符上和車牌的四角都有角點。但是這并不影響車牌的定位。根據(jù)距離最大的四個角點,得到了車牌的四個角,從而定了車牌。從角點定位的原理看出,如果經(jīng)過旋轉(zhuǎn)后車牌并不會影響角點定位的成功率和速度。該算法的實現(xiàn)可以采取遍歷匹配的算法,實現(xiàn)如下:voidLPR::GetConere(){inty。for(y=0。ym_height。y++) {intx。for(x=0。xm_width。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,y4)=3) {if(Line(x+1,y1,x+4,y4)=1) Add(x,y,LEFT_DOWN_CONNER)。 } }if(Line(x,y,x4,y)=3) {if(Line(x,y,x,y+4)=3) {if(Line(x1,y+1,x4,y+4)=1) Add(x,y,RIGHT_TOP_CONNER)。 }if(Line(x,y,x,y4)=3) {if(Line(x1,y1,x4,y4)=1) Add(x,y,RIGHT_DOWN_CONNER)。 } } } }}函數(shù)Line(x1,y1,x2,y2)返回過兩點(x1,y1),(x2,y2)的直線,前景的象素個數(shù)。注意這里的4,是檢驗角點的區(qū)域范圍,如果區(qū)域過大,圖像旋轉(zhuǎn)時就會影響車牌定位的成功率。第2節(jié) 上下定位方法仔細觀察二值化后的圖像,在車牌的上邊和下邊各有一條較長的背景線(上圖用紅線表示)。根據(jù)這兩條背景線可以準確的定位車牌。定位算法如下:intLPR::HorizontalLine(intx,inty,intcount){intret。 ret=0。intx_loop。for(x_loop=0。x_loopcount。x_loop++)if(!IsForegournd(x+x_loop,y)) ret++。returnret。}IsForegournd(x,y)為詢問點(x,y)是不是前景點的函數(shù)。該算法比角點定位算法要快,但是不適合經(jīng)過旋轉(zhuǎn)后的車牌。雖然經(jīng)過改進后也可以識別出旋轉(zhuǎn)后的車牌,但是速度很慢,不能出現(xiàn)在成熟的產(chǎn)品中。第3節(jié) 變化率定位法圖中有三條直線,如果沿著這三條直線掃描的話,會發(fā)現(xiàn):黑色的掃描線前景占很大的比例,綠色的掃描線背景占很大的比例;紅色的掃描線前景背景比例都不突出,但是前景背景交替較為頻繁。這說明根據(jù)前景背景變化率可以定位車牌。這種算法可以有效防止車牌旋轉(zhuǎn)的干擾。獲得變化率的代碼如下:doubleCLPR::ScanLine(intx,inty,intcount){boolcurrent_foreground。 current_foreground=IsForeground(x,y)。intchange_times。 change_times=0。intloop。for(loop=1。loopcount。loop++) {if(current_foreground) {if(!IsForeground(x+loop,y)) { change_times++。 current_foreground=false。 } }else{if(IsForeground(x+loop,y)) { change_times++。 current_foreground=true。 } } }doubleret。 ret=change_times。 ret/=(count+1)。//do not div 0returnret。}第5章 字符分割在車牌識別過程中,車牌定位后的工作便是分割字符。本章將分若干節(jié)介紹字符分割的算法。第1節(jié) 連續(xù)點分割法對于一個數(shù)字或者字母,前景的點是連續(xù)的。用填充算法對種子點填充即可得到整個字符。當然漢字就不是了,所以這種分割算法僅僅適合數(shù)字或者字母。但是當整個車牌的數(shù)字和字母都得到之后,剩下的那個必定是漢字。這個思想用c/c++描述如下:voidLPR::Scan(){inty。for(y=m_plate_top。y=m_plate_bottom。y++) {intx。for(x=m_plate_left。x=m_plate_right。x++) {if(IsForeGround(x,y)amp。amp。!IsVisited(x,y)) { Fill(x,y)。 } } }}Fill是種子填充,算法有多種。下面分別介紹。遞歸填充算法的基本思想是,首先訪問當前點,然后訪問當前點的四個鄰居。每次訪問時,要做一個記號,否則遞歸過程無法結(jié)束。具體到車牌識別,每訪問一個點,還要記錄該點的坐標,從而得到當前字符點的集合。voidLPR::Fill(intx,inty){if(!IsForground(x,y))return。if(IsVisited(x,y))return。 AddPixelToCharacter(x,y)。 MarkPixelVisited(x,y)。 Fill(x+1,y)。 Fill(x,y+1)。 Fill(x1,y)。 Fill(x,y1)。}可以看出用c/c++描述的填充算法十分簡單?;镜倪f歸填充算法,函數(shù)遞歸調(diào)用較為頻繁,引起系統(tǒng)資源消耗巨大。人們后來又提出了改進了的“掃描線種子填充算法”。其基本思想是:在種子的左右兩邊水平掃描暫時不需要遞歸,以減少不必要的函數(shù)調(diào)用。水平掃描結(jié)束后,僅僅考慮掃描線兩個端點即可。算法如下:voidLPR::Fill(intx,inty){int(*stack)[2]。 stack=(int(*)[2])newint[m_width*2]。intstack_length。 stack_length=0。 stack[stack_length][0]=x。 stack[stack_length][1]=y。 stack_length++。while(true) {if(stack_length==0)break。 x=stack[stack_length1][0]。 y=stack[stack_length1][1]。 stack_length。intleft_x。for(left_x=x1。left_x=0。left_x)if(!IsForeGround(left_x,y)||IsVisited(left_x,y))break。 left_x++。for(x=left_x。xm_width。x++) {if(!IsForeGround(x,y)||IsVisited(left_x,y))break。 Visit(x,y)。 }intright_x。 right_x=x。if(right_x=m_width) right_x=m_width1。 left_x。if(left_x0) left_x=0。intdown_y。 down_y=y+1。if(down_ym_height) {for(x=left_x。x=right_x。x++) {if(IsForeGround(x,down_y)amp。amp。!IsVisited(left_x,y)) { stack[stack_length][0]=x。 stack[stack_length][1]=down_y。 stack_length++。 } } }intup_y。 up_y=y1。if(up_y=0) {for(x=left_x。x=right_x。x++) {if(IsForeGround(x,up_y)amp。amp。!IsVisited(left_x,y)) { stack[stack_length][0]=x。 stack[stack_length][1]=up_y。 stack_length++。 } } } }delete[] (int*)stack。}雖然掃描線種子填充算法,比基本的種子填充算法復雜一些,但是在車牌識別測試后發(fā)現(xiàn),掃描線種子填充算法比種子填充算法要快三分之一左右。第2節(jié) 邊界法邊界法和連續(xù)點分割法很相似,只不過連續(xù)的邊界點,而不是所有的前景點。邊界法需要事先得到前景像素中的邊界點,這可能會花費一些時間。但是這樣會加速得到連續(xù)點的遞歸操作。邊界點如下圖:得到邊界點的算法如下:voidCLPR::GetEdge(){inty。for(y=0。ym_height。y++) {intx。for(x=0。xm_width。x++) {if(IsForeground(x,y)) {if(!IsForeground(x1,y)) SetEdge(x,y)。elseif(!IsForeground(x+1,y)) SetEdge(x,y)。elseif(!IsForeground(x,y1)) SetEdge(x,y)。elseif(!IsForeground(x,y+1)) SetEdge(x,y)。 } } }}連接邊界點的算法和連接前景點的算法完全相同。第3節(jié) 根據(jù)尺寸分割從理論上講,圖片和實物相比,尺寸上有了很大的變化。并不一定圖片和實物幾何意義上的相似。也就是說未必圖像和實物成比例。但是實驗證實,在一到兩個像素范圍內(nèi),在水平方向上,實物和圖像基本上成比例。這個是來自于《GA362007中華人民共和國機動車號牌》的車牌尺寸說明。根據(jù)這幅圖片,我們可以在一定位的車牌上,找到各個字符的坐標。請看下面的代碼:voidGetCharacterPosition(intcharacter_position[7],intplate_left,intplate_right){ static constintmm[]= { 3+45/2, character_position_mm[0]+12+45, character_position_mm[1]+12+10+12+45, character_position_mm[2]+12+45, character_position_mm[3]+12+45, character_position_mm[4]+12+45, character_position_mm[5]+12+45, character_position_mm[6]+45/2+1, }。intindex。for(index=0。indexsizeof(mm)/sizeof(mm)1。index++) character_position[index]=plate_left+(plate_left+plate_right)*mm[index]/mm[sizeof(mm)/sizeof(mm[0])1]。}上面的代碼技巧性很大,需要讀者認真揣摩。第
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1