Matlab圖像處理函數(shù):regionprops
這里給出在Matlab圖像處理工具箱中非常重要的一個圖像分析函數(shù):regionprops声离。顧名思義:它的用途是get the properties of region勉躺,即用來度量圖像區(qū)域?qū)傩缘暮瘮?shù)。
語法
STATS = regionprops(L,properties)
描述
測量標注矩陣L中每一個標注區(qū)域的一系列屬性更扁。L中不同的正整數(shù)元素對應不同的區(qū)域,例如:L中等于整數(shù)1的元素對應區(qū)域1赫冬;L中等于整數(shù)2的元素對應區(qū)域2浓镜;以此類推。返回值STATS是一個長度為max(L(:))的結(jié)構(gòu)數(shù)組劲厌,結(jié)構(gòu)數(shù)組的相應域定義了每一個區(qū)域相應屬性下的度量膛薛。properties 可以是由逗號分割的字符串列表、飽含字符串的單元數(shù)組补鼻、單個字符串 'all' 或者 'basic'哄啄。如果 properties 等于字符串 'all'雅任,則所有下述字串列表中的度量數(shù)據(jù)都將被計算,如果 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
|
|
屬性詳細定義
本部分將結(jié)合一個具體的例子說明各種字串相關屬性的意義禽车,矩陣取自在蟻蛉模式識別中做過預處理后的斑紋分割圖像,如下圖:
這是一幅二值圖像拳喻,在應用regionprops函數(shù)之前必須將其標注哭当,可以調(diào)用 bwlabel函數(shù)和偽彩色處理,標注后的圖像如下圖:
下面基于以上的材料來考察屬性的含義冗澈。
'Area'
是標量钦勘,計算出在圖像各個區(qū)域中像素總個數(shù)。注意:這個數(shù)值可能與由函數(shù) bwarea 計算的值有輕微的不同亚亲。對于這樣一個數(shù)值彻采,我們可以使用它除以整個圖像區(qū)域的像素個數(shù)而得到斑紋比例,可以作為模式識別的候選特征捌归,并且這個特征是仿射不變的肛响。在本例中最后計算出的面積向量是
[3.8952,9.7213,17.663,3.5762,1.3432,1.6958,0.41974,0.41974,21.625,12.324,4.8187,1.5111]/10000.
'BoundingBox'
是1行ndims(L)*2列的向量,即包含相應區(qū)域的最小矩形惜索。BoundingBox 形式為 [ul_corner width]特笋,這里 ul_corner 以 [x y z ...] 的坐標形式給出邊界盒子的左上角、boxwidth 以 [x_width y_width ...] 形式指出邊界盒子沿著每個維數(shù)方向的長度巾兆。本例的各部分區(qū)域最小矩形如下圖猎物!注意:請在這熟悉一下函數(shù)rectangle的使用方法。
'Centroid'
是1行ndims(L)列的向量角塑,給出每個區(qū)域的質(zhì)心(重心)蔫磨。 注意:Centroid 的第一個元素是重心水平坐標(x坐標)、第二個元素是重心垂直坐標(y坐標)圃伶。Centroid 所有其它元素則按照維順序排列堤如。下圖采用以中心為圓心的小圓來演示質(zhì)心檢測的效果:
圖中各質(zhì)心坐標(標準化后的)依次為:
(x,y)= 0.10478, 0.76739 0.11883, 0.081545 0.19586, 0.61092 0.30701, 0.30807 0.65712, 0.31613 0.73165, 0.30531 0.74548, 0.35378 0.80624, 0.72802 0.84546, 0.61564 0.90554, 0.079574 0.93477, 0.77871 0.97611, 0.15576
'MajorAxisLength'
是標量,與區(qū)域具有相同標準二階中心矩的橢圓的長軸長度(像素意義下)窒朋。本屬性只支持二維標注矩陣搀罢。
'MinorAxisLength'
是標量,與區(qū)域具有相同標準二階中心矩的橢圓的短軸長度(像素意義下)侥猩。本屬性只支持二維標注矩陣揖膜。
'Eccentricity'
是標量耸别,與區(qū)域具有相同標準二階中心矩的橢圓的離心率(可作為特征)。本屬性只支持二維標注矩陣窘拯。
'Orientation'
是標量,與區(qū)域具有相同標準二階中心矩的橢圓的長軸與x軸的交角(度)。本屬性只支持二維標注矩陣。
本例的各區(qū)域橢圓數(shù)據(jù)為: 長軸:18.767,45.172,43.003,30.687,16.505,15.698,5.8833,5.8833,46.954,38.873,22.929,15.429 短軸:16.211,26.079,32.709,9.8458,6.8019,8.6386,5.8833,5.8833,35.976,31.022,16.98,7.8038 離心率:0.50387,0.81652,0.6492,0.94713,0.91114,0.83497,0,0,0.64262,0.60262,0.67205,0.86266 方向角:-29.219,-32.192,-9.3909,-50.904,-70.333,48.823,0,0,14.035,17.986,3.0319,-34.238
我們可以考察離心率的變化趨勢,得到對于整個區(qū)域中的各區(qū)域的似圓性如何的大致感覺彩匕,比如下圖是12個區(qū)域的離心率變化情形:
由上圖可以看出區(qū)域整體的似圓性并不好,實際上可以考慮使用離心率向量作為一個模式識別的特征C角驼仪!
'Image'
二值圖像,與某區(qū)域具有相同大小的邏輯矩陣袜漩。你可以用這個屬性直接將每個子區(qū)域提取出來绪爸,然后再作相應的處理!比如本例的第一個斑紋區(qū)域提出后是:'FilledImage'
與上相同宙攻,唯一區(qū)別是這是個做了填充的邏輯矩陣奠货!!
本例中和上面的沒有區(qū)別,只有區(qū)域有空洞時才有明顯差別座掘。
'FilledArea'
是標量递惋,填充區(qū)域圖像中的 on 像素個數(shù)。
'ConvexHull'
是p行2列的矩陣溢陪,包含某區(qū)域的最小凸多邊形萍虽。此矩陣的每一行存儲此多邊形一個頂點的xy坐標。此屬性只支持2維標注矩陣形真。例如:本例中的所有子區(qū)域的最小凸多邊形圖形如下圖
看看第2個區(qū)域的大圖:
'ConvexImage'
二值圖像杉编,用來畫出上述的區(qū)域最小凸多邊形。同時此凸包內(nèi)的像素均打開咆霜,圖像尺寸和此區(qū)域?qū)吔缇匦蜗嗤醪啤4藢傩灾恢С?維標注矩陣。例如:本例中的第2個子區(qū)域的最小凸多邊形圖形為裕便。注意:此處函數(shù)roipoly很有用!
'ConvexArea'
是標量见咒,填充區(qū)域凸多邊形圖像中的 on 像素個數(shù)偿衰。
'EulerNumber'
是標量,幾何拓撲中的一個拓撲不變量--歐拉數(shù)改览,等于圖像中目標個數(shù)減去這些目標中空洞的個數(shù)下翎。此屬性只支持2維標注矩陣。本例中的歐拉數(shù)均為1宝当。
'Extrema'
8行2列矩陣视事,八方向區(qū)域極值點。矩陣每行存儲這些點的xy坐標庆揩,向量格式為 [top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]俐东。此屬性只支持2維標注矩陣跌穗。
'EquivDiameter'
是標量,等價直徑:與區(qū)域具有相同面積的圓的直徑虏辫。計算公式為:sqrt(4*Area/pi)蚌吸。. 此屬性只支持2維標注矩陣。本例標準化后的12區(qū)域直徑向量為:
'Solidity'
是標量砌庄,同時在區(qū)域和其最小凸多邊形中的像素比例羹唠。計算公式為:Area/ConvexArea,這也是個仿射特征娄昆,實際上反映出區(qū)域的固靠性程度佩微。此屬性只支持2維標注矩陣。本例12區(qū)域凸元素比例向量為:
[0.97071,0.66171,0.90846,0.86585,0.84211,0.94393,1,1,0.9096,0.75514,0.90823,0.94737].
'Extent'
是標量萌焰,同時在區(qū)域和其最小邊界矩形中的像素比例哺眯。計算公式為:Area除以邊界矩形面積,這也是個仿射特征杆怕,實際上反映出區(qū)域的擴展范圍程度族购。此屬性只支持2維標注矩陣。不再給出計算結(jié)果A暾洹寝杖!
'PixelIdxList'
p元向量,存儲區(qū)域像素的索引下標互纯。
'PixelList'
p行ndims(L)列矩陣瑟幕,存儲上述索引對應的像素坐標。
支持類
輸入的標注矩陣L可以有任意的數(shù)值類型留潦。
提醒
使用逗號分割列表語法
當你基于regionprops函數(shù)的輸出作算法設計時只盹,使用逗號分割列表語法就凸顯出其非常的價值。例如:對于一個存儲標量的屬性兔院,可以利用此語法創(chuàng)建一個包含圖像中不同區(qū)域內(nèi)此屬性值的向量殖卑。例如以下兩句是等價的:
stats(1).Area, stats(2).Area, ..., stats(end).Area
stats.Area
因此,可以使用下面的方法創(chuàng)建相應的向量:
regionprops(L,'Area'); allArea = [stats.Area];
allArea 就是一個與結(jié)構(gòu)數(shù)組 stats 具備相同長度的向量坊萝。
基于特定原則的區(qū)域選擇
當你要基于特定準則條件選擇某個區(qū)域時孵稽,將函數(shù) ismember 和 regionprops 聯(lián)合使用是很有用處的。例如:創(chuàng)建一個只包含面積大于80的二值圖像十偶,用以下命令
idx = find([stats.Area] > 80); BW2 = ismember(L,idx);
計算性能考慮
大多數(shù)的屬性測量計算時間都非常地少菩鲜,除了那些非常依賴于圖像L中區(qū)域個數(shù)和像素個數(shù)的屬性。例如:
'ConvexHull' 'ConvexImage' 'ConvexArea' 'FilledImage'
另外建議一次性計算所有屬性值惦积,因為分開計算和一起計算時間相差無幾接校!
使用二值圖像工作
在調(diào)用regionprops之前必須將二值圖像轉(zhuǎn)變?yōu)闃俗⒕仃嚒蓚€函數(shù)可以做到:
L = bwlabel(BW); L = double(BW);
注意:雖然這兩個函數(shù)從同一二值圖像產(chǎn)生不同的標注矩陣狮崩,但是它們是等效的蛛勉!例如:給出如下的二值矩陣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 創(chuàng)建一個包含兩個分別由整數(shù)1和2標注的連續(xù)區(qū)域標注矩陣
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 創(chuàng)建一個包含一個由整數(shù)1標注的不連續(xù)區(qū)域標注矩陣。
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 并不負責自動轉(zhuǎn)換二值圖像數(shù)據(jù)類型董习,而是由你自己決定使用何種數(shù)據(jù)轉(zhuǎn)換方法來存儲自己想要的數(shù)據(jù)烈和。
regionprops函數(shù)的擴展思路
在regionprops函數(shù)的基礎上,你可以使用它提供的基本數(shù)據(jù)來擴展它的功能皿淋,將區(qū)域的曲率數(shù)據(jù)和骨架數(shù)據(jù)作為它的另外屬性值來開發(fā)招刹,從而希望它能用來做更細致的特征提取。