Matlab - Центр масс объекта, имеющий только край

Я пытаюсь создать программу распознавания объектов, используя классификатор k-NN. У меня есть куча изображений для обучающей части классификатора и куча изображений для распознавания. Эти изображения представлены в оттенках серого, и на каждое изображение приходится объект. Проблема в том, что есть только край объекта (не закрашенный), поэтому я не думаю, что использование regionprops(img,'centroid') будет работать правильно для того, что я понимаю... Итак, как я могу получить их центр масс?


person user2952272    schedule 20.05.2015    source источник


Ответы (2)


Ответ xenoclast должен быть достаточно ясным, просто чтобы добавить что-то еще. Когда вы закончите создание двоичного изображения из вашего изображения в градациях серого, используя im2bw; если край вашего объекта является границей, которая полностью покрывает объект, вы можете использовать regionprops(bw,'centroid') напрямую, минуя imfill.

person jacaheyo    schedule 20.05.2015
comment
Это сработало, спасибо. У меня есть еще один вопрос: я читал, что regionprops(bw,'centroid') возвращает элементы в порядке измерения, означает ли это, что первый элемент будет центроидом наименьшего элемента, а последний - центроидом области? - person user2952272; 20.05.2015
comment
Значение, возвращаемое regionprops(), равно N количеству структур. N — количество связанных компонентов (или количество объектов) во входном изображении. Вы можете посмотреть этот mathworks.com/help/images /ref/ Вы можете попробовать это, чтобы проверить последовательность возвращаемых структур. BW = imread('text.png'); s = regionprops(BW, 'centroid'); imshow(BW) hold on for n = 1 : length(s) plot(s(n).Centroid(:, 1),s(n).Centroid(:,2), 'b*') pause(0.2) end - person jacaheyo; 21.05.2015

Первым шагом будет бинаризация изображения с помощью im2bw. Затем вы можете использовать imfill(img, 'holes'), чтобы превратить его из контура в заполненное тело. После этого regionprops будет работать как положено.

person xenoclast    schedule 20.05.2015
comment
Это не работает, и это должно быть автоматически, я не смогу выбрать отверстие для заполнения во время выполнения программы. - person user2952272; 20.05.2015
comment
imfill сам по себе порождает графический интерфейс, но использование imfill(img, 'holes') — это автоматический процесс (пока ваш план закрыт). - person xenoclast; 20.05.2015