用法:
L = bwlabel(BW,n)
返回一個和BW大小相同的L矩陣,包含了標記了BW中每個連通區域的類別標簽,這些標簽的值為1、2、num(連通區域的個數)。n的值為4或8,表示是按4連通尋找區域,還是8連通尋找,默認為8。
4連通或8連通是圖像處理里的基本感念:而8連通,是說一個像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角連接着,則認為他們是聯通的;4連通是指,如果像素的位置在其他像素相鄰的上、下、左或右,則認為他們是連接着的,連通的,在左上角、左下角、右上角或右下角連接,則不認為他們連通。請注意“或”字的含義,就是滿足其中一個條件就認為是連通的。
[L,num] = bwlabel(BW,n)這里num返回的就是BW中連通區域的個數。
通俗的說,這個函數的作用是用來找這個二值圖像中的連通區域的,對於不同的符合條件的連通區域(4連通,8連通)分別用不同的標號加以區別,結果保存在L這個矩陣里,而num里保存的是輸入圖像中連通區域的總數。
舉例說明:
BW =
1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0
按4連通計算,方形的區域,和翻轉的L形區域,有用是對角連接,不屬於連通,所以分開標記,連通區域個數為3,就是有3個不同的連接區域。
L = bwlabel(BW,4)
結果如下:
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 3 3 0
1 1 1 0 0 0 0 0
而8連通標記,它們是連通的:
[L, num] = bwlabel(BW,8)
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 2 2 0
1 1 1 0 0 0 0 0
這里
num =2
http://blog.csdn.net/wanrenwangxuejing/article/details/25108191
函數bwlabel,belabeln和bwconncomp都是標記二值圖像中的連通域。Bwconncomp可以替代bwlabel and bwlabeln的用法,而且需要相當小的計算空間並且比一些較早的函數計算速度更快。
函數 | 輸入圖像維數 | 輸出形式 | 內存使用 | 鄰域類型 |
bwlabel | 2-D | 雙精度標記矩陣 | 高 | 4 或 8 |
bwlabeln | N-D | 雙精度標記矩陣 | 高 | 任意 |
bwconncomp | N-D | CC 結構 | 低 | 任意 |
Matlab 中 imregionalmax函數 和 bwconncomp函數的使用
imregionalmax函數
找出當前連通區域內元素大於或等於強度t的元素,將其置為1,,其他像素都設置為0。返回二值圖像。
舉例說明
三種用法如下:
BW = imregionalmax(I)
BW = imregionalmax(I,conn)
gpuarrayBW = imregionalmax(gpuarrayI,___)
-
BW = imregionalmax(I) 默認2維數據為8聯通,3維數據為26聯通。
假設A如下:A =
10 10 10 10 10 10 10 10 10 10 10 22 22 22 10 10 44 10 10 10 10 22 22 22 10 10 10 45 10 10 10 22 22 22 10 10 10 10 44 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 33 33 33 10 10 10 10 10 10 10 33 33 33 10 10 10 10 10 10 10 33 33 33 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
regmax = imregionalmax(A)
上述命令的結果為:
regmax =
10×10 logical array0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
若A(3,3) = 23,則相同命令結果為:
regmax =
10×10 logical array
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
若A(3,3) = 20,則相同命令結果為:
regmax =
10×10 logical array
0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 1 0 1 0 0 0 1 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- BW = imregionalmax(I,conn)
conn:指定函數中使用的連通度。 - gpuarrayBW = imregionalmax(gpuarrayI,___)
gpuarrayBW = imregionalmax(gpuarrayI,___) 在GPU上執行該操作,輸入圖像必須是一個gpuArray,函數返回一個gpuArray。需要支持 Parallel Computing Toolbox™ .
bwconncomp函數
找出二值圖像中所有的連通區域。
舉例說明
用法如下:
CC = bwconncomp(BW)
CC = bwconncomp(BW,conn)
-
BW = imregionalmax(I) 默認2維數據為8聯通,3維數據為26聯通。
假設S如下:
S =0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0
- 1
- 2
- 3
- 4
- 5
D = bwconncomp(S);
上述命令的結果為:
D=1*1 struct
D.Connectivity 使用的連通度
D.ImageSize 圖像大小
D.NumObjects 連通區域數
D.PixelIdxList 連通區域的索引
這里具體看看 D.PixelIdxList:
因為是默認的8聯通,所以7,8,12,13和19,24為一個連通區域,若使用4連通,這里就是兩個連通區域。