同樣是車牌識別,此次的車牌識別,需要進行連續兩次的仿射變化,才能成功識別。
**如下:
* 讀影象
read_image (chepai2, 'e:/halcon實戰/chepai2.jpg')
* rgb影象轉灰度影象
rgb1_to_gray(chepai2, grayimage)
* 1. 此次blob分析,主要是獲得乙個區域,從而得到區域的角度
* 閾值處理
threshold (grayimage, regions, 217, 255)
* 計算連通域,得到聯通域
connection(regions, connectedregions)
* 特徵直方圖,通過height、area、width特徵篩選區域
select_shape (connectedregions, selectedregions, ['height','area','width'], 'and', [66.69,0,25.52], [87.47,1004.62,55.33])
* 將所有區域連成乙個區域
union1(selectedregions, regionunion)
* 將區域轉成矩形區域
shape_trans(regionunion, regiontrans, 'rectangle2')
* 獲得聯通區域的角度
orientation_region(regiontrans, phi)
* 獲取區域的中心點和面積
area_center(regiontrans, area, row, column)
* 2. 進行仿射變換,將影象轉正
* 獲得進行仿射變換的矩陣
vector_angle_to_rigid(row, column, phi, row, column, 0, hommat2d1)
* 仿射變換
affine_trans_image(grayimage, imageaffintrans, hommat2d1, 'constant', 'false')
* 3. 此次blob分析,主要是從轉正後的區域獲得乙個區域,從而能得到文字的傾斜角度
* 再次進行閾值處理
threshold (imageaffintrans, regions2, 202, 255)
* 計算聯通域,得到聯通域
connection(regions2, connectedregions2)
* 特徵直方圖,通過height、area、width特徵篩選區域
select_shape (connectedregions2, selectedregions2, ['height','area'], 'and', [61.07,473.44], [106.36,1374.13])
* 將區域聯合成乙個區域
union1(selectedregions2, regionunion1)
* 聽過聯合區域,得到文字的傾斜角度
text_line_slant(regionunion1, imageaffintrans, 75, -0.523599, 0.523599, slantangle)
* 4. 再次進行仿射變換,將影象轉正
hom_mat2d_identity (hommat2didentity)
hom_mat2d_slant (hommat2didentity, -slantangle, 'x', 0, 0, hommat2dslant)
affine_trans_image(imageaffintrans, imageaffintrans1, hommat2dslant, 'constant', 'false')
* 5. 此次blob分析,得到需要被識別的字元區域
* 閾值處理
threshold (imageaffintrans1, regions3, 204, 253)
* 計算連通域,獲得連通域
connection(regions3, connectedregions3)
* 特徵直方圖,通過height、area、width特徵篩選區域
select_shape (connectedregions3, selectedregions3, ['height','area','width'], 'and', [42.5,493.24,20.86], [81.06,938.56,80.61])
* 對區域按列排序
sort_region(selectedregions3, sortedregions, 'character', 'true', 'column')
* 6. 進行字元識別
* 翻轉影象,將背景和前景反轉
invert_image(imageaffintrans1, imageinvert2)
* 讀分類器
read_ocr_class_mlp('document_0-9a-z_norej.omc',ocrhandle2)
* 進行字元識別
do_ocr_multi_class_mlp(sortedregions, imageinvert2, ocrhandle2, class2, confidence2)
* 釋放分類器資源
clear_ocr_class_mlp(ocrhandle2)
以上**,處理的是如下的車牌:
進行第一次仿射變換,將車牌影象進行第一次轉正,得到如下影象:
我們可以看到,影象確實轉正了。但是,在這個影象上,我們進行字元識別,會發現,無法正確的識別字元。
通過分析,通過將以上影象中的各個字元區域轉成矩形區域,如下圖所示:
我們可以看到,某一些字元的矩形區域之間是重疊的,同時,我們也可以看到,確實就是這些有重複的字元區域,在識別的時候,出現識別出錯的現象。所以,我們需要將這個影象再次進行轉正處理。
進行第二次仿射變換,將車牌影象進行第二次轉正處理,得到如下影象:
再次對以上影象的字元區域,轉成矩形區域,確認各個字元區域之間是佛還有重疊,如下圖所示:
此時,各個字元之間沒有重疊了。在這個影象的基礎上進行字元識別,此時,已經可以正確的進行字元識別了,如下圖所示:
剛性仿射變換演算法 仿射變換
哎慢慢來吧,感覺一大堆東西看不懂.仿射變換就是affine transformation 這是乙個跟影象相關的變換,影象變換是通過矩陣變換來實現的。影象的幾個基本變換有平移 縮放 旋轉 仿射 透視。剛性變換 就像這個題目這樣顯示的,就是非常強硬的變換,在這個二維平面上開始是怎麼樣,後來就是怎麼樣 仿...
仿射變換transform
void viewdidload void clickmeaction 2 仿射變換比例 uiview animatewithduration 1animations 3 仿射變換旋轉 uiview animatewithduration 1animations 4 三種變換的結合 1 transl...
warpAffine OPENCV 仿射變換原理
在opencv中,目前並沒有現成的函式直接用來實現影象旋轉,它是用仿射變換函式cv warpaffine來實現的,此函式目前支援4種插值演算法,最近鄰 雙線性 雙三次 蘭索斯插值,如果傳進去的引數為基於畫素區域關係插值演算法 inter area 則按雙線性插值。通常使用2 3矩陣來表示仿射變換 其...