Как получить прямоугольный подизображение из 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)