CreateStructuringElementEx

CreateStructuringElementEx:IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape, int* values=NULL );

簡介

cvCreateStructuringElementEx

創建結構元素

IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

int shape, int* values=NULL );

cols

結構元素的列數目

rows

結構元素的行數目

anchor_x

錨點的相對水平偏移量

anchor_y

錨點的相對垂直偏移量

shape

結構元素的形狀,可以是下列值:

CV_SHAPE_RECT, 長方形元素;

CV_SHAPE_CROSS, 交錯元素 a cross-shaped element;

CV_SHAPE_ELLIPSE, 橢圓元素;

CV_SHAPE_CUSTOM, 用戶自定義元素。這種情況下參數 values 定義了 mask,即象素的那個鄰域必須考慮。

values

指向結構元素的指針,它是一個平面數組,表示對元素矩陣逐行掃描。(非零點表示該點屬於結構元)。如果指針為空,則表示平面數組中的所有元素都是非零的,即結構元是一個長方形(該參數僅僅當shape參數是 CV_SHAPE_CUSTOM 時才予以考慮)。

函式cv CreateStructuringElementEx 分配和填充結構 IplConvKernel, 它可作為形態操作中的結構元素。舉個例子比較好說清楚

比如一個圖

00000

01110

00000

用一個cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)的元素來腐蝕,則結果為

00000

01000

00000

理解:cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)中的3,1表示要腐蝕的對象是一個3列1行的矩陣,即結構元素為[1(anchor),1,1],如果該矩陣里元素全為非零,則將其轉化為同樣大小隻包含一個非零元素,而該非零元素的位置是(0,0),即錨點位置,效果上講,可以看做是對圖像從y方向上進行截斷。同理cvCreateStructuringElementEx( 3,1,1 0,CV_SHAPE_RECT)中的3,1表示要腐蝕的對象是一個3列1行的矩陣。

假如用下面這個去腐蝕圖像,中心是在右下角1 0 01 1 01 1 1 那么應該怎么表示呢?

理論上應該是int mask[9] = {1, 0, 0, 1, 1, 0, 1, 1, 1}; IplConvKernel* strel = cvCreateStructuringElementEx( 3, 3, 0, 2, CV_SHAPE_CUSTOM, mask );其中0,2可按自己要求設定。

結構元素的不同設定對於處理結果有著重要影響,當需要對y方向進行腐蝕操作時,同理,可如下操作。

比如一個圖

01000

01000

01000

而用了一個cvCreateStructuringElementEx( 1,3,1 0,CV_SHAPE_RECT)的元素來腐蝕,則結果為

00000

01000

00000

理解

CreateStructuringElementEx CreateStructuringElementEx

此時創建的結構元素為1x3的列矩陣,即[1,1(anchor),1]的轉置矩陣,如右圖 所示,錨點位置在第二行一列處,即(1,0),具體處理的思路同上所述。圖像處理的效果是從x方向上進行了截斷,一定程度上剔除該方向的毛刺。

相關詞條

相關搜尋

熱門詞條

聯絡我們