使用x-,y-梯度检测图像中的主要强度区域

时间:2017-10-13 10:18:13

标签: c++ opencv image-processing

我试图从有前景物体的图像中检测显性强度区域。我可以使用sobel算子使用x和y渐变来检测对象的边缘。但是,我很难检测到图像的主要区域。我需要图像中主要强度区域的像素值。

例如,在图像1中,背景(灰色部分)具有主要区域,而在图像2中,对象(黑色部分)具有主要区域。我想得到图像1和2中主要区域的像素值。

图片1:enter image description here 图2:enter image description here

我完成了边缘检测,如下所示:

Mat mat2gray(const cv::Mat& src)
    {
    Mat dst;
    normalize(src, dst, 0.0, 255.0, cv::NORM_MINMAX, CV_8U);

    return dst;
    }



int main(void)
    {
    Mat img = imread("Image.png", -1);

    Mat cvsx,cvsy;
    Sobel(img, cvsx, CV_32F, 1, 0);
    Sobel(img, cvsy, CV_32F, 0, 1);

    imshow("x", mat2gray(cvsx));
    imshow("y", mat2gray(cvsy));

    Mat mag;
    magnitude(cvsx, cvsy, mag);
    imshow("magnitude", mat2gray(mag));


    waitKey();
    return 0;
    }

我觉得渐变幅度和渐变方向可能是可能的,但我无法弄明白。我非常感谢有关获得图像的主要强度区域的任何帮助。

更新:这是一个3级强度的示例图像。这是从深度相机获得的深度图像。

图3:enter image description here

0 个答案:

没有答案