Я приближаюсь к задаче биоинформатики, и мне нужно извлечь некоторые признаки из некоторых изображений клеток.
Я использовал алгоритм SIFT для извлечения ключевых точек внутри изображения, как вы можете видеть на картинке.
Как вы также можете видеть на рисунке (обведены красным), некоторые ключевые точки являются выбросами, и я не хочу вычислять по ним какую-либо функцию.
Я получил вектор 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
У меня есть три вопроса:
Примечание:
Я забыл уточнить, что хотел бы эффективную реализацию функции, т. е. проверка для каждой ключевой точки относительного положения всех остальных по отношению к ней не было бы хорошим решением (если существует другая способ действия).