Маркировка формы Matlab

У меня есть набор фигур на изображении, которое я хотел бы пометить в соответствии с их площадью, я использовал bwboundaries, чтобы найти их, и regionprops, чтобы определить их площадь. Я хотел бы пометить их так, чтобы они были помечены по-разному в зависимости от того, находится ли их площадь выше или ниже порога, который я определил.

Я думал об использованииinserObjectAnnotation, но я не уверен, как добавить в функцию условие, основанное на их области?


person KRS-fun    schedule 16.07.2014    source источник


Ответы (2)


Предполагая, что TH является пороговой областью, а BW - бинарным изображением, и если вы согласны пометить их как o's и x's с помощью matlab figure text в своих центрах (точнее, в центроидах), основываясь на пороговом значении, посмотрите, удовлетворяет ли это ваши потребности -

stats = regionprops(BW,'Area')
stats2 = regionprops(BW,'Centroid')

figure,imshow(BW)
for k = 1:numel(stats)
    xy = stats2(k).Centroid
    if (stats(k).Area>TH)
        text(xy(1),xy(2),'L') %// Large Shape
    else
        text(xy(1),xy(2),'S') %// Small Shape
    end
end

Пример вывода -

введите здесь описание изображения

person Divakar    schedule 16.07.2014
comment
Оно работает! Но, к сожалению, мои фигуры слишком малы, чтобы четко отображать буквы, можно ли их раскрасить вместо вставки текста? - person KRS-fun; 16.07.2014
comment
@KRS-fun Раскрасить фигуры, которые вы имеете в виду, то есть заполнить фигуры каким-либо цветом? - person Divakar; 16.07.2014
comment
@KRS-fun Итак, на выходном изображении у нас будут только две цветные фигуры, один цвет для фигур меньше пороговой области, а остальные фигуры будут заполнены вторым цветом? - person Divakar; 16.07.2014
comment
Я уже отметил ваш ответ, так как вы ответили на мой первоначальный вопрос - person KRS-fun; 16.07.2014

Вы можете использовать CC = bwconncomp(BW,conn).

Чтобы получить количество пикселей каждого подключенного компонента, вы можете использовать:

numPixels = cellfun(@numel,CC.PixelIdxList);

В CC.PixelIdxList у вас есть список всех найденных объектов и индексы пикселей, принадлежащих компонентам. Я думаю, чтобы пометить свои области, вы могли бы сделать что-то вроде:

for ind = 1:size(CC.PixelIdxList,2)
   Image(CC.PixelIdxList{ind}) = ind;
end
person nightlyop    schedule 16.07.2014
comment
Под маркировкой ОП, вероятно, подразумевает аннотирование, поэтому упоминание insertobjectannotation - person Divakar; 16.07.2014
comment
Хорошо, звучит правильно. Я понял кое-что еще с маркировкой, потому что я не знал insertobjectannotation (которого у меня нет в Matlab 2012a). - person nightlyop; 16.07.2014
comment
да, я понял то же самое, что и вы, пока не увидел этот длинный термин. На самом деле вы можете просмотреть его онлайн-документацию — mathworks.in/help/vision/ ref/insertobjectannotation.html - person Divakar; 16.07.2014