我正在接近生物信息學的任務,需要從某些細胞圖像中提取一些特徵。用OpenCV捨棄細胞圖像中的異常SIFT關鍵點
我使用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);
但我想從vector
所有這些關鍵點是,例如說,有一定的內部小於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嗎?你會如何在輸入中指定它?
注:
我忘了指定,我想對功能,即檢查每個關鍵點所有其他的相對位置的有效實施,它不會是一個很好的解決方案(如果存在另一種做法)。
你能張貼原始圖像嗎?我想嘗試一下,然後發回結果,如果它是成功的:) – mevatron
@mevatron - http://s18.postimage.org/jayhj4q3d/phase1_image1.jpg在這裏你走了,我上傳了RGB版本,只要將它轉換爲灰度就可以了......讓我知道你在做什麼;) – Matteo
如果你可以定義一個模型,你可以使用RANSAC。 RANSAC將決定哪些點是inliers(適合模型)和異常值(不適合模型)。也許你的模型可以像3點定義小於X的面積(這意味着它們足夠接近)。這是一個想法。 –