Как получить прямоугольный образ из regionprops (Image, 'BoundingBox') в Matlab? - PullRequest
6 голосов
/ 29 октября 2011

У меня есть некоторые частицы, которые я идентифицировал на большом изображении, и мне нужно разобрать на меньшие изображения для каждой частицы.Я использовал функцию regionprops 'BoundingBox', но пока не увенчался успехом.Как теперь я могу сделать прямоугольный образ изображения, используя BoundingBox?Я могу использовать BoundingBox, чтобы нарисовать прямоугольник на исходном изображении, но параметры, возвращаемые BoundingBox, не имеют размерности в пикселях (x, y, ширина, высота), (x1, y1, x2, y2) и т. Д., Которые яожидал, что ограничительная коробка вернется.Я написал пример кода с использованием coins.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 ]

13 голосов
/ 30 октября 2011

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

BoundingBox равно [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)
7 голосов
/ 29 октября 2011

Параметры, возвращаемые 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)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...