Отбросьте выбросы SIFT Key Points in Cell Image with OpenCV

Я приближаюсь к задаче биоинформатики, и мне нужно извлечь некоторые признаки из некоторых изображений клеток.

Я использовал алгоритм SIFT для извлечения ключевых точек внутри изображения, как вы можете видеть на картинке.

enter image description here

Как вы также можете видеть на рисунке (обведены красным), некоторые ключевые точки являются выбросами, и я не хочу вычислять по ним какую-либо функцию.

Я получил вектор cv::KeyPointс помощью следующего кода:

const cv::Mat input = cv::imread("/tmp/image.jpg", 0); //Load as grayscale

cv::SiftFeatureDetector detector;
std::vector<cv::KeyPoint> keypoints;
detector.detect(input, keypoints);

но я хотел бы отбросить из векторавсе те ключевые точки, которые, скажем, например, имеют менее 3 ключевых точек внутри определенной области интереса (ROI), центрированной на них на изображении.

Поэтому мне нужно реализовать функцию, возвращающую количество ключевых точек внутри определенного ROI, заданного в качестве входных данных:

int function_returning_number_of_key_points_in_ROI( cv::KeyPoint, ROI );
   //I have not specified ROI on purpose...check question 3

У меня есть три вопроса:

  1. Существует ли какая-либо существующая функция, делающая что-то подобное?
  2. Если нет, не могли бы вы помочь мне понять, как реализовать это самостоятельно?
  3. Вы бы использовали для этой задачи круглую или прямоугольную область интереса? И как бы вы указали ее во входных данных?

Примечание:

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

6
задан Matteo 7 June 2012 в 10:13
поделиться