車牌識別 仿射變換

2021-09-06 10:28:15 字數 3529 閱讀 5725

同樣是車牌識別,此次的車牌識別,需要進行連續兩次的仿射變化,才能成功識別。

**如下:

* 讀影象

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矩陣來表示仿射變換 其...