bwlabel函數和regionprops函數用法詳解__matlab筆記

來源:互聯網
上載者:User
1、bwlabel是用來標記二維的二值映像中的連通組的,簡言之,就是黑背景下面有多少白的塊,也就是從黑背景甄別白塊塊的。   L = BWLABEL(BW,N) returns a matrix L, of the same size as BW, containing labels for the connected components in BW. N 即為4連通或8連通 [L,NUM] = BWLABEL(BW,N) returns in NUM the number of connected objects found in BW. 就是說bwlabel能從一個讀入二值映像後產生的BW數組(也可能自己建立,只要符合元素是0或者1就行)中,區別出其中的1有多少塊(註:在BW數組中,0代表黑背景,1代表白) 比如 0 1 1 0 0 0 1
0 1 1 0 0 0 1
0 1 1 0 0 0 1 這樣的數組中,顯然在0背景上有兩塊1,於是,bwlabe之後返回的L數組是 : 0 1 1 0 0 0 2
0 1 1 0 0 0 2
0 1 1 0 0 0 2 (當然,這個我沒有實際運行,但應該沒問題。)這是什麼意思呢。就是說返回的L裡面通過1,2,3,。。。。。n來標識某一個位置(像素)屬於這個二值映像的第幾個connected components。 要更深入的清晰的理解,需要理解這裡面聯通的定義,實際上,有4-連通(上下左右)和8-連通(八方都算連通)(甚至還有不常用的自訂連通,以後help裡看到CONN這樣的輸入參數的時候才有用)。 如果設兩個返回參數,NUM可以返回有多少個區塊。 另外,類似的還有一個函數叫bwlabeln,兩者差別如下: 速度的差別把,函數實現時對某些特殊情形做了特殊的最佳化。bwlabel在區塊垂直方向比較長的時候比較快,其他情況下,都是bwlabeln更快。另bwlabel接受的L還可以是多維的,而bwlabel只能接受二維的L。 具體的延伸應用會有很多的,以這個標記為起始,我們可以寫一些自己的函數,當然MATLAB 影像處理工具箱裡面的一些函數就可以和這個很好的配合實現一些很好的應用。 比如通過regionprops函數確定每一個區塊的一些特性(如中心,面積等等) STATS = REGIONPROPS(L,PROPERTIES) measures a set of properties for each labeled region in the label matrix L.

2、Regionprops

用途是get the properties of region,即用來度量映像地區屬性的函數。

文法:STATS = regionprops(L,properties)

描述:測量標註矩陣L中每一個標註地區的一系列屬性。L中不同的正整數元素對應不同的地區,例如:L中等於整數1的元素對應地區1;L中等於整數2的元素對應地區2;以此類推。傳回值STATS是一個長度為max(L(:))的結構數組,結構數組的相應域定義了每一個地區相應屬性下的度量。properties 可以是由逗號分割的字串列表、飽含字串的單元數組、單個字串 'all' 或者 'basic'。如果 properties 等於字串 'all',則所有下述字串列表中的度量資料都將被計算,如果 properties 沒有指定或者等於 'basic',則屬性: 'Area', 'Centroid', 和 'BoundingBox' 將被計算。下面的列表就是所有有效屬性字串,它們大小寫敏感並且可以縮寫。

屬性字串列表

Area

EquivDiameter

MajorAxisLength

BoundingBox

EulerNumber

MinorAxisLength

Centroid

Extent

Orientation

ConvexArea

Extrema

PixelIdxList

ConvexHull

FilledArea

PixelList

ConvexImage

FilledImage

Solidity

Eccentricity

Image

 

屬性詳細定義:本部分將結合一個具體的例子說明各種字串相關屬性的意義,矩陣取自在蟻蛉模式識別中做過預先處理後的斑紋分割映像,如下圖:

這是一幅二值映像,在應用regionprops函數之前必須將其標註,可以調用 bwlabel函數和偽彩色處理,標註後的映像如下圖:

下面基於以上的材料來考察屬性的含義。

'Area':是標量,計算出在映像各個地區中像素總個數。注意:這個數值可能與由函數 bwarea 計算的值有輕微的不同。對於這樣一個數值,我們可以使用它除以整個映像地區的像素個數而得到斑紋比例,可以作為模式識別的候選特徵,並且這個特徵是仿射不變的。

'BoundingBox':是1行ndims(L)*2列的向量,即包含相應地區的最小矩形。BoundingBox 形式為 [ul_corner width],這裡 ul_corner 以 [x y z ...] 的座標形式給出邊界盒子的左上方、boxwidth 以 [x_width y_width ...] 形式指出邊界盒子沿著每個維數方向的長度。本例的各部分地區最小矩形如下圖。注意:請在這熟悉一下函數rectangle的使用方法。

'Centroid':是1行ndims(L)列的向量,給出每個地區的質心(重心)。注意:Centroid 的第一個元素是重心水平座標(x座標)、第二個元素是重心垂直座標(y座標)。Centroid 所有其它元素則按照維順序排列。下圖採用以中心為圓心的小圓來示範質心檢測的效果:

 'MajorAxisLength':是標量,與地區具有相同標準二階中心矩的橢圓的長軸長度(像素意義下)。本屬性只支援二維標註矩陣。

'MinorAxisLength':是標量,與地區具有相同標準二階中心矩的橢圓的短軸長度(像素意義下)。本屬性只支援二維標註矩陣。

'Eccentricity':是標量,與地區具有相同標準二階中心矩的橢圓的離心率(可作為特徵)。本屬性只支援二維標註矩陣。

'Orientation':是標量,與地區具有相同標準二階中心矩的橢圓的長軸與x軸的交角(度)。本屬性只支援二維標註矩陣。

我們可以考察離心率的變化趨勢,得到對於整個地區中的各地區的似圓性如何的大致感覺,比如下圖是12個地區的離心率變化情形:

由上圖可以看出地區整體的似圓性並不好,實際上可以考慮使用離心率向量作為一個模式識別的特徵。。

'Image':二值映像,與某地區具有相同大小的邏輯矩陣。你可以用這個屬性直接將每個子領域提取出來,然後再作相應的處理。

 'FilledImage':與上相同,唯一區別是這是個做了填充的邏輯矩陣。
本例中和上面的沒有區別,只有地區有空洞時才有明顯差別。

'FilledArea':是標量,填充地區映像中的 on 像素個數。

'ConvexHull':是p行2列的矩陣,包含某地區的最小凸多邊形。此矩陣的每一行儲存此多邊形一個頂點的xy座標。此屬性只支援2維標註矩陣。例如:本例中的所有子領域的最小凸多邊形圖形如下圖

看看第2個地區的大圖:

'ConvexImage':二值映像,用來畫出上述的地區最小凸多邊形。同時此凸包內的像素均開啟,映像尺寸和此地區對應邊界矩形相同。此屬性只支援2維標註矩陣。注意:此處函數roipoly很有用。

'ConvexArea':是標量,填充地區凸多邊形映像中的 on 像素個數。

'EulerNumber':是標量,幾何拓撲中的一個拓撲不變數--歐拉數,等於映像中目標個數減去這些目標中空洞的個數。此屬性只支援2維標註矩陣。本例中的歐拉數均為1。

'Extrema':8行2列矩陣,八方向地區極值點。矩陣每行儲存這些點的xy座標,向量格式為 [top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]。此屬性只支援2維標註矩陣。

'EquivDiameter':是標量,等價直徑:與地區具有相同面積的圓的直徑。計算公式為:sqrt(4*Area/pi)。. 此屬性只支援2維標註矩陣。

'Solidity':是標量,同時在地區和其最小凸多邊形中的像素比例。計算公式為:Area/ConvexArea,這也是個仿射特徵,實際上反映出地區的固靠性程度。此屬性只支援2維標註矩陣。

'Extent':是標量,同時在地區和其最小邊界矩形中的像素比例。計算公式為:Area除以邊界矩形面積,這也是個仿射特徵,實際上反映出地區的擴充範圍程度。此屬性只支援2維標註矩陣。不再給出計算結果。。

'PixelIdxList':p元向量,儲存地區像素的索引下標。

'PixelList':p行ndims(L)列矩陣,儲存上述索引對應的像素座標。

支援類:輸入的標註矩陣L可以有任意的數實值型別。

提醒

使用逗號分割列表文法:當你基於regionprops函數的輸出作演算法設計時,使用逗號分割列表文法就凸顯出其非常的價值。例如:對於一個儲存標量的屬性,可以利用此文法建立一個包含映像中不同地區內此屬性值的向量。例如以下兩句是等價的:

stats(1).Area, stats(2).Area, ..., stats(end).Area
stats.Area

因此,可以使用下面的方法建立相應的向量:

regionprops(L,'Area'); allArea = [stats.Area];

allArea 就是一個與結構數組 stats 具備相同長度的向量。

基於特定原則的地區選取項目:當你要基於特定準則條件選擇某個地區時,將函數 ismember 和 regionprops 聯合使用是很有用處的。例如:建立一個只包含面積大於80的二值映像,用以下命令

idx = find([stats.Area] > 80); BW2 = ismember(L,idx);

計算效能考慮:大多數的屬性測量計算時間都非常地少,除了那些非常依賴於映像L中地區個數和像素個數的屬性。例如:

'ConvexHull' 'ConvexImage' 'ConvexArea' 'FilledImage'

另外建議一次性計算所有屬性值,因為分開計算和一起計算時間相差無幾。

使用二值映像工作:在調用regionprops之前必須將二值映像轉變為標註矩陣。兩個函數可以做到:

L = bwlabel(BW); L = double(BW);

注意:雖然這兩個函數從同一二值映像產生不同的標註矩陣,但是它們是等效的。例如:給出如下的二值矩陣BW,

1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1

bwlabel 建立一個包含兩個分別由整數1和2標註的連續地區標註矩陣

mylabel = bwlabel(BW) mylabel = 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 2 2

double 建立一個包含一個由整數1標註的不連續地區標註矩陣。

mylabel2 = double(BW) mylabel2 = 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1

regionprops 並不負責自動轉換二值映像資料類型,而是由你自己決定使用何種資料轉換方法來儲存自己想要的資料。

regionprops函數的擴充思路:在regionprops函數的基礎上,你可以使用它提供的基本資料來擴充它的功能,將地區的曲率資料和骨架資料作為它的另外屬性值來開發,從而希望它能用來做更細緻的特徵提取。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.