1

На изображении ниже показана корова, где граница была обнаружена с использованием комбинации пороговых значений и вычитания фона из изображения глубины 3D.Выполнение функции выделения в области внутри границы

Моя цель - выполнить извлечение функции в области INSDIE. Я прочитал другие вопросы и изо всех сил старался выполнить шаги, решенные в подобных вопросах. Я не хочу извлекать область на границе, я просто хочу использовать ее для извлечения функции.

Пожалуйста, может кто-нибудь предложить решение, которое, возможно, проще? Например, есть ли способ предоставить extractSURFFeatures граничные координаты, из которых можно работать внутри?

Ниже приведен мой пограничный код, который получает мое обработанное пороговое изображение (BW1).

enter image description here

figure(1); 
    imshow(ImageCell_int{i-269}); 
    %title('Outlines, from bwboundaries()'); axis square; 
    hold on; 
    boundaries = bwboundaries(BW1); 
    numberOfBoundaries = size(boundaries); 
    for k = 1 : numberOfBoundaries 
    thisBoundary = boundaries{k}; 
    plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2); 
    end 
    hold off; 

Я был бы очень признателен за любую помощь по этому вопросу.

+3

Является ли это проблема для вас, чтобы извлечь характерные точки все изображения, а затем удалить те, которые находятся за пределами границы? –

+0

Нет, и это очень хорошая идея, спасибо. Мое мышление состояло в том, чтобы использовать только область внутри границы, чтобы минимизировать объем обработки. Можете ли вы помочь мне начать с этого? Я новичок в обработке изображений с помощью Matlab. – Adam893

+4

Начните с поиска прямоугольного ограничивающего прямоугольника области и выделения там функций, просто используя индексирование MATLAB, чтобы извлечь прямоугольник. Затем выбросьте точки вне сложной области. Не оптимизируйте это, пока не узнаете, что вам нужно. – Peter

ответ

1

Отлично, теперь я вижу корову! :)

Вы не можете указать интересующую нас область нерегулярной формы для функции detectSURFFeatures. Тем не менее, вы можете обнаружить функции всего изображения, а затем создать двоичную маску интересующей области и использовать ее для исключения ключевых точек, находящихся за ее пределами.

Редактировать: Если ваша граница представлена ​​как многоугольник, вы можете использовать функцию roipoly, чтобы создать из нее двоичную маску.

Сказав это, функции, которые находятся за пределами границы вашего объекта, могут быть полезны, поскольку они захватывают информацию о форме объекта.

Также, какова ваша последняя цель? Если вы хотите распознать отдельных коров, то местные функции могут быть не лучшим подходом. Вы можете сделать лучше с глобальным дескриптором HOG (extractHOGFeatures) или с гистограммой цвета или обоими.

+0

Это замечательно! Спасибо. Не могли бы вы объяснить, как сделать маскировку? Мне не повезло с тем, чтобы маску работали до сих пор. – Adam893

+2

См. Редактирование. – Dima

1

Этот ответ был обнаружен на Matlab Central и полностью решает проблему выше для тех, кто борется с подобной проблемой.

Начните с черновой шкалы объекта интереса (BW1).

% Make the mask black and white 
    double(BW1); 
    BW2 = logical(BW1); 

Далее маска создана и вынуждена быть того же размера, что и обычное изображение.

mask = cast(BW2, class(normalImage)); 
    maskedImage = normalImage .* mask; 

    imshow(maskedImage); 

дает следующий результат:

теперь стало возможным выполнить выделение признаков на предмет интереса.

enter image description here

Смежные вопросы