我想删除背景(就像黑环)

时间:2018-02-05 03:38:09

标签: c++ opencv image-processing

这是我使用的图像。 (视网膜血管,DRIVE数据库)

Screenshot

首先,它通过预处理过程。 预处理过程如下。

  1. 应用高斯滤波器去除噪声。 (并绘制BGR直方图)

    cv::GaussianBlur(gassimg, gassimg, cv::Size(3,3),1.0, 1.0);
    
  2. 将背景替换为平均值并设置阈值。 (距离中心50 * 50的区域)

    for (int y = imgrow/2 -25; y < imgrow/2 +25; ++y) {
    for (int x = imgcol/2 -25; x < imgcol/2 +25; ++x) {
        b += tempimg.at<cv::Vec3b>(y, x)[0];
        g += tempimg.at<cv::Vec3b>(y, x)[1];
        r += tempimg.at<cv::Vec3b>(y, x)[2];
        }
    }
    r = r / (2500);
    g = g / (2500);
    b = b / (2500);
    
    for (int y = 0; y < tempimg.rows; ++y) {
    for (int x = 0; x < tempimg.cols; ++x) { 
        if ((tempimg.at<cv::Vec3b>(y, x)[0] <=30) || tempimg.at<cv::Vec3b>(y, x)[1] <= 30 || tempimg.at<cv::Vec3b>(y, x)[2] <= 30)
        {
            tempimg.at<cv::Vec3b>(y, x)[2] = r;
            tempimg.at<cv::Vec3b>(y, x)[1] = g;
            tempimg.at<cv::Vec3b>(y, x)[0] = b;
        }
    }
    

    }

  3. 结果如下。 enter image description here

    此图片存在一个问题。 (像蓝圈一样)

    制作边缘。

    enter image description here

    我想删除边缘。 (像黑环) 我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用圆形霍夫变换检测大圆圈,然后强制大圆圈外的像素为零,然后就可以移除圆环。

sample picture