我正在处理一项生物信息学任务,需要从一些细胞图像中提取一些特征。
我使用SIFT算法提取图像内部的关键点,如您在图片中所见。
同时,正如您在图片中看到的(用红圈标出),有些关键点是异常值,我不想对它们进行任何特征计算。
我使用以下代码获取了cv::KeyPoint向量:
我有三个问题:
我忘了说明我想要一个高效的函数实现,即检查每个关键点相对于其他所有关键点的位置关系不是一个好的解决方案(如果存在另一种方法)。
我使用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);
但是我希望从向量
中删除那些关键点,例如,在图像上特定感兴趣区域(ROI)周围少于3个关键点的关键点。
因此,我需要实现一个函数,该函数返回给定输入的某个ROI内的关键点数:
int function_returning_number_of_key_points_in_ROI( cv::KeyPoint, ROI );
//I have not specified ROI on purpose...check question 3
我有三个问题:
- 是否有任何现有的功能类似于此?
- 如果没有,你能帮我理解如何自己实现吗?
- 对于这个任务,你会使用圆形还是矩形ROI?如何在输入中指定它?
我忘了说明我想要一个高效的函数实现,即检查每个关键点相对于其他所有关键点的位置关系不是一个好的解决方案(如果存在另一种方法)。