Как получить прямоугольный подизображение из regionprops (Image,'BoundingBox') в Matlab?

У меня есть некоторые частицы, которые я идентифицировал на большем изображении, и нужно разобрать на меньшие изображения для каждой частицы. Я использовал функцию regionprops 'BoundingBox', но еще не был успешным. Как теперь сделать прямоугольный подизображение изображения I с помощью BoundingBox? Я могу использовать BoundingBox для рисования прямоугольника на исходном изображении, но параметры, возвращаемые BoundingBox, похоже, не имеют размера пикселя (x, y, width, height), (x1, y1, x2, y2) и т. д., которые я ожидал бы ограничивающая коробка для возврата. Я написал пример кода, используя монеты.png, чтобы всем было легче понять. Ты можешь мне помочь? Спасибо!

figure(1);
I = imread('coins.png');
bw = im2bw(I, graythresh(I));
bw2 = imfill(bw,'holes');
imshow(bw2);


figure(2);
L = bwlabel(bw2);
imshow(label2rgb(L, @jet, [.7 .7 .7]))

figure(3);
imshow(I);
s = regionprops(L, 'BoundingBox');
rectangle('Position', s(1).BoundingBox);

2 ответов


параметры, возвращаемые regionprops являются [y,x,width,height] на матрица координаты (см. Также "неожиданный Matlab".

таким образом, чтобы извлечь прямоугольник, вы пишете:

subImage = I(round(s(1).BoundingBox(2):s(1).BoundingBox(2)+s(1).BoundingBox(4)),...
       round(s(1).BoundingBox(1):s(1).BoundingBox(1)+s(1).BoundingBox(3)));

согласно документации REGIONPROPS:

BoundingBox is [ul_corner width], где:

  • ul_corner: в форме [x y z ...] и указывает верхний левый угол ограничивающей рамки

  • ширина: в форме [x_width y_width ...] и определяет ширину ограничивающей рамки вдоль каждого измерения

теперь вы можете использовать IMCROP функции imcrop(I, rect) где:

rect является четырехэлементным вектором положения [xmin ymin width height] что определяет размер и положение прямоугольника обрезки.

таким образом:

s = regionprops(L, 'BoundingBox');

subImage = imcrop(I, s(1).BoundingBox);
imshow(subImage)