从矩阵中获取属性

时间:2017-04-20 13:40:57

标签: matlab matrix

我有一个像素等于0或255的成对矩阵,当它为255时,它会形成磁盘形状。 我想标记不同的磁盘并为每个标签输入一个标签:它们的半径和它们的中心点。我最后两点怎么做?

下面有一个小矩阵的例子

Mat=zeros(12,12);
Mat(2,6:7)=255; Mat(3,5)=255; Mat(3,8)=255; Mat(4,5)=255
Mat(4,8)=255; Mat(5,6:7)=255;

Mat(10,10)=255;  Mat(11,9)=255; Mat(12,10)=255; Mat(11,11)=255; 

CC=bwconncomp(Mat,8); 
MatL=labelmatrix(CC);

figure, imagesc(Mat)

1 个答案:

答案 0 :(得分:0)

您可以使用regionprops来计算质心和面积,然后使用面积来计算近似半径:

% generate matrix
Mat=zeros(12,12);
Mat(2,6:7)=255; Mat(3,5)=255; Mat(3,8)=255; Mat(4,5)=255;
Mat(4,8)=255; Mat(5,6:7)=255;
Mat(10,10)=255;  Mat(11,9)=255; Mat(12,10)=255; Mat(11,11)=255;
% convert to binary
MatBin = Mat > 0;
% fill circles
MatFull = imfill(MatBin,4,'holes');
% get centroids and areas
props = regionprops(MatFull,{'Area','Centroid'});
Area = [props(:).Area];
Centroid = reshape([props(:).Centroid],[],2)';
% compute radius
Radius = sqrt(Area ./ pi);
% plotting
imshow(MatFull,[],'InitialMagnification','fit')
hold on
for ii = 1:numel(Radius)
    text(Centroid(ii,1),Centroid(ii,2),['r = ' num2str(Radius(ii))],...
        'VerticalAlignment','middle','HorizontalAlignment',...
        'center','FontSize',12,'Color','b');
end
hold off

enter image description here