2015年7月7日火曜日

cv::FASTの落とし穴?

特徴点検出クラスcv::FASTの落とし穴発見。 カラー画像を入力しても実行時エラーもでず、 間違った位置の特徴点が返ってくる。 ただし、マニュアルには入力はgray imageと書かれているのでバグではない。

入力画像例

グレースケール画像を入力した場合

cv::Mat_<cv::Vec3b> color = cv::imread("im0.png");
cv::Mat gray, features;
std::vector<cv::KeyPoint> keypoints;

cv::FAST(gray, keypoints, 10.0);
cv::drawKeypoints(gray, keypoints, features);
cv::imwrite("features_gray.png", features);

カラー画像を入力した場合

cv::Mat_<cv::Vec3b> color = cv::imread("im0.png");
cv::Mat gray, features;
std::vector<cv::KeyPoint> keypoints;

cv::FAST(color, keypoints, 10.0);
cv::drawKeypoints(gray, keypoints, features);
cv::imwrite("features_gray.png", features);