天天看點

周遊圖像 找最小外接矩形 matlab,2018a版本MatLab利用regionprops函數擷取圖檔中物體輪廓最小外接矩形...

2018a版本MatLab利用regionprops函數擷取圖檔中物體最小外接矩形

本次内容,用于介紹利用matlab中的regionprops函數來擷取圖像區域中的物體的最小外接矩形資訊(位置(x,y)、寬(△x)、高(△y))。

1.regionprops函數

regionprops函數是matlab中一個用來度量圖像區域屬性的函數,常用于編輯區域面積分布,顯示區域總數。其具體資訊可在官方幫助文檔中檢視:

https://ww2.mathworks.cn/help/images/ref/regionprops.html

它的文法如下:

STATS = regionprops(L,properties)

描述:

1、測量标注矩陣 L中每一個标注區域的一系列屬性。L 中不同的正整數元素對應不同的區域, 例如:L 中等于整數1的元素對應區域1;L 中等于整數2的元素對應區域2;以此類推。L資料類型支援多種,邏輯、數值皆可。

2、傳回值STATS 是一個長度為 max(L(:))的結構數組,結構數組的相應域定義了每一個區域相應屬性下的度量。 properties 可以是由逗号分割的字元串清單,包含字元串的單元數組,單個字元串 ‘all’ 或者 ‘basic’。如果 properties 等于字元串 ‘all’,則所有下述字串清單中的度量資料都将被計算,如果properties 沒有指定或者等于 ‘basic’,則屬性 ‘Area’、‘Centroid’ 和’BoundingBox’ 将被計算。

具體屬性如下:

'Area’圖像各個區域中像素總個數

‘BoundingBox’ 包含相應區域的最小矩形

‘Centroid’ 每個區域的質心(重心)

‘MajorAxisLength’ 與區域具有相同标準二階中心矩的橢圓的長軸長度(像素意義下)

‘MinorAxisLength’ 與區域具有相同标準二階中心矩的橢圓的短軸長度(像素意義下)

‘Eccentricity’ 與區域具有相同标準二階中心矩的橢圓的離心率(可作為特征)

‘Orientation’ 與區域具有相同标準二階中心矩的橢圓的長軸與x軸的交角(度)

‘Image’ 與某區域具有相同大小的邏輯矩陣

‘FilledImage’ 與某區域具有相同大小的填充邏輯矩陣

‘FilledArea’ 填充區域圖像中的on像素個數

‘ConvexHull’ 包含某區域的最小凸多邊形

‘ConvexImage’ 畫出上述區域最小凸多邊形

‘ConvexArea’ 填充區域凸多邊形圖像中的on像素個數

‘EulerNumber’ 幾何拓撲中的一個拓撲不變量——歐拉數

‘Extrema’ 八方向區域極值點

‘EquivDiameter’ 與區域具有相同面積的圓的直徑

‘Solidity’ 同時在區域和其最小凸多邊形中的像素比例

‘Extent’ 同時在區域和其最小邊界矩形中的像素比例

‘PixelIdxList’ 存儲區域像素的索引下标

‘PixelList’ 存儲上述索引對應的像素坐标

‘Perimeter’ 圖像各個區域邊界地區的周長

參考:

百度百科:https://baike.baidu.com/item/regionprops/3208753?fr=aladdin

matlab幫助文檔:https://ww2.mathworks.cn/help/images/ref/regionprops.html

2.regionprops函數擷取最小外接矩形資訊

通過前面對regionprops函數的簡單介紹,我們可以了解到該函數可用于擷取圖像中各個區域中像素總個數、相應區域的最小矩形、每個區域的質心、估計圖像中圓形對象的中心和半徑、甚至填充…

是以這次用了regionprops函數來擷取二值圖檔中物體最小外接矩形,下面直接放代碼:

// An highlighted block

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% regionprops函數 求得多張圖檔中區域的最小外接矩形

% 注1:

% 該regionprops函數直接用于需要的圖檔上就可得到圖檔中所有連通區域的最小外接矩形位置、長、寬資訊

% 我下面函數,隻是因為我現在有filenums張圖檔,圖檔中為人體輪廓,現在需要求得每一張圖檔中人體輪廓的

% 最小外接矩形,因而用到一些循環等語句。

% 注2:

% regionprops函數的傳回值為結構體;如果用其 regionprops(imbiEdgepic(:,:,i),'BoundingBox')

% 求 imbiEdgepic(:,:,i)(imbiEdgepic二值圖圖集中的第i張圖)的'BoundingBox'(最小外接矩形);

% 那麼它的傳回值stats為結構體,該結構體中包含第i張圖檔中 ****所有連通區域 最小外接矩形的位置、長寬資訊 ****

% (如有2個連通區域,則傳回的stats結構體具有兩最小外接矩形的資訊)

% 其矩形資訊調用方法為:a = stats.BoundingBox; % stats.BoundingBox便是位置、長、寬資訊

% % [x,y,wight(△x),heigh(△y)]

%

% % % % 始終注意一點:

% 該函數是對圖檔中所有連通區域求最小外接矩形!!!

% 如果圖檔中連通區域為多個,傳回的結構體也是一次性的多元結構體!!!

% https://blog.csdn.net/BinHeon

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

...

...

...

figure('NumberTitle','off','Name','步态周期檢測-最小外接矩形'); % figure顯示名字

%%%% %%%% 獲得每個輪廓的最小外接矩形

for i=1:filenums

imbiEdgepic(:,:,i) = imbinarize(Morphology(:,:,i)); % 将圖集中第i張圖檔二值化處理

%%%% regionprops函數用于傳回圖檔的屬性

BoundBs(1,i) = regionprops(imbiEdgepic(:,:,i),'BoundingBox'); % 利用函數度量圖像區域屬性,這裡度量最小外接矩形

% 傳回結構資料,其内是有關最小外接矩形的位置

% 長、寬資訊,調用格式:s.BoundingBox

% s.BoundingBox = [x,y,wight(△x),heigh(△y)]

% 始終注意,該函數是對圖檔中所有連通區域求最小外接矩形!!!

% 如果圖檔中連通區域為多個,傳回的結構體也是一次性的多元結構體!!!

%%%% 利用畫矩形函數rectangle函數,将求得的第i張圖中物體最小外接矩形 畫在 第i張圖檔上

figure;imshow(Morphology(:,:,i));title(['No.4-',num2str(i)]); % 首先顯示第i張圖檔

hold on % 畫圖保持

rectangle('position',BoundBs(1,i).BoundingBox,'edgecolor','r'); % 把矩形位置、長寬資訊傳入rectangle函數,畫出最小外接矩形

hold off

end

下面是我循環操作後的一個效果。

周遊圖像 找最小外接矩形 matlab,2018a版本MatLab利用regionprops函數擷取圖檔中物體輪廓最小外接矩形...