matlab bwlabel_Matlab中Image-bbox-regionprops-rectangle的坐标系统

碰到要在图中标记目标的问题,在MATLAB中验证的时候发现框和检测位置总是错位,这里将两者的坐标做一讨论。

Image的坐标系统

MATLAB® 将大多数图像存储为二维数组(即矩阵),其中矩阵的每个元素对应于所显示图像中的单个像素。为了便于访问图像中的位置,Image Processing Toolbox™ 使用几种常用的图像坐标系来将图像表示为数组。

通常,表示图像中位置的最方便方法是使用像素索引。将图像视为由离散元素组成的网格,从上到下、从左到右排列,如下图所示。

f7f6aa46aaf1f48c266c6f9153171aa8.png

对于像素索引,逐行向下递增,而逐列向右递增。像素索引是整数值,范围是从 1 到行或列的长度。

在 MATLAB 中,前两个矩阵维度的像素索引和下标之间有一对一的对应关系。例如,第五行第二列中的像素的数据存储在矩阵元素 (5,2) 中。您可以使用普通的 MATLAB 矩阵下标来访问单个像素的值。例如,MATLAB 代码

I(2,15)

返回图像 I 的第 2 行第 15 列的像素值。同样,MATLAB 代码

RGB(2,15,:) 

返回图像 RGB 的第 2 行第 15 列像素的 R、G、B 值。

MATLAB 中前两个矩阵维度的像素索引和下标之间的对应关系使得图像数据矩阵和图像显示方式之间的关系易于理解。

rectangle的坐标系统

画框的时候可以发现图像在MATLAB中的坐标是左上角原点,上面是x轴,左边是y轴。

rectangle的坐标是[x,y,w,h],跟图像的坐标是一致的,即左上角是原点,所以x,y是框左上角的坐标。

a = zeros(100);
a(1:10,50:70) = 1;
imshow(a)
hold on
kk = [20 50 10 20]
rectangle('Position',kk,'edgecolor','g')
hold on
rectangle('Position',[0 50 10 20],'edgecolor','r')
axis on

bbox的坐标系统

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’ 图像各个区域边界地区的周长

P 

9cf08a30950b09aee30c112121d5906b.png

f2f671942461bff1b2e04b514a8b9cce.png

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,length,wight] % % % % % 始终注意一点: 
%          该函数是对图片中所有连通区域求最小外接矩形!!! 
%          如果图片中连通区域为多个,返回的结构体也是一次性的多维结构体!!!  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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,l,w] 
% 始终注意,该函数是对图片中所有连通区域求最小外接矩形!!!
如果图片中连通区域为多个,返回的结构体也是一次性的多维结构体!!!     
%%%% 利用画矩形函数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

e56b171c30636024a9c317a5aee67254.png

Summary

  1. 矩阵操作中,第一个维度是行数,第二个维度是列数。
  2. Rectangle中,[x,y,w,h],(x,y)是左上角点x和y。其中,x是向右;y是向下。(w,h)是矩阵的宽和高,是矩阵区域分别在x方向和y方向的尺寸。
  3. regionprops中的bbox,坐标系统,跟Rectangle一致.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值