Find local maxima in grayscale image using OpenCV

前端 未结 10 2267
暗喜
暗喜 2020-11-30 04:44

Does anybody know how to find the local maxima in a grayscale IPL_DEPTH_8U image using OpenCV? HarrisCorner mentions something like that but I\'m actually not i

10条回答
  •  南方客
    南方客 (楼主)
    2020-11-30 05:45

    A pixel is considered a local maximum if it is equal to the maximum value in a 'local' neighborhood. The function below captures this property in two lines of code.

    To deal with pixels on 'plateaus' (value equal to their neighborhood) one can use the local minimum property, since plateaus pixels are equal to their local minimum. The rest of the code filters out those pixels.

    void non_maxima_suppression(const cv::Mat& image, cv::Mat& mask, bool remove_plateaus) {
        // find pixels that are equal to the local neighborhood not maximum (including 'plateaus')
        cv::dilate(image, mask, cv::Mat());
        cv::compare(image, mask, mask, cv::CMP_GE);
    
        // optionally filter out pixels that are equal to the local minimum ('plateaus')
        if (remove_plateaus) {
            cv::Mat non_plateau_mask;
            cv::erode(image, non_plateau_mask, cv::Mat());
            cv::compare(image, non_plateau_mask, non_plateau_mask, cv::CMP_GT);
            cv::bitwise_and(mask, non_plateau_mask, mask);
        }
    }
    

提交回复
热议问题