实时图像处理:HSV图像中的噪声(openCV)

我正在做一个实时形状和颜色分类系统,具有非常高的准确性。 似乎我的预处理阶段不够好,以至于结果不如我预期的那么精确。 这是我正在做的事情:

  • 从相机获取数据可以裁剪以获得投资回报率。
  • 将ROI图像从RGB转换为HSV空间。
  • 使用中值滤波器来减少HSV图像中的噪声。
  • 阈值图像
  • 在图像中使用扩张和侵蚀去除小孔和小物体
  • 使用findContours和approxPolyDP来检测方形对象。
  • 这是我的预处理阶段:

    image_cv = cv::cvarrToMat(image_camera); 
    Mat cropped = image_cv(cv::Rect(0, 190, 640, 110));
    imshow("origin", cropped);
    Mat croppedCon = CropConveyor(cropped);
    cv::cvtColor(croppedCon, croppedCon, CV_RGB2HSV);
    medianBlur(croppedCon, croppedCon, 3);
    cv::Mat binRect;
    cv::inRange(croppedCon, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), binRect);
    

    这是检测正方形的代码:

    vector<vector<Point>> contours;
    findContours(binarizedIm, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
    
    vector<Point> approx;
    for (size_t i = 0; i < contours.size(); i++)
    {
        //double arclength = arcLength(Mat(contours[i]), true);
        approxPolyDP(Mat(contours[i]), approx, 3.245 , true);   //0.04 for wood
        if (approx.size() != 4) continue;
        if (isContourConvex(Mat(approx)) && contourArea(Mat(approx)) > 250)
        {
            double MaxCos = 0;
            for (int j = 2; j < 5; j++)
            {
                double cos = angle(approx[j % 4], approx[j - 1], approx[j - 2]);
                MaxCos = MAX(cos, MaxCos);
            }
    
            if (MaxCos < 0.2)
                squares.push_back(approx);
        }
    }
    

    我认为HSV图像中的噪声是主要原因。 这里有一些图片展示了我的问题。 我在HSV Image中看到很多噪点,这就是为什么我使用媒体滤镜来减少噪点但保留边缘,因为我认为使用findContours函数时边缘信息非常重要。 单独渠道的HSV和HSV我的问题是:

  • 什么是HSV图像中的噪声,请参考上面的图像,我该如何提高图像的质量?

  • 饱和图像中噪点的原因是输入图像中的噪点。 由不好的相机/光学器件引起,并由JPEG压缩进一步增加。

    这是迄今为止我多年来看到的最糟糕的形象。 除非你住在火星上并且明天需要结果,否则你不应该投入另一秒的时间。

    你的输入图像是超级噪声,欠采样,离焦,曝光不足,充满混叠和压缩伪像,以及几乎所有你可以对图像做错的事情。

    信号处理的第一条规则:

    废话在废话

    基本上免费可以获得更好的相机。 找到并使用一个。


    问题的一部分是你正在降低HSV空间的噪音。 在你的例子中,你可以看到V通道的性能比H和S好。最好在RGB中进行降噪处理(相对于相机原有的色彩空间,噪声更加线性和更接近但不完全相同)起源;当然也有伽马校正)。

    也许考虑一个更强的边缘保留降噪滤波器,如双边滤波器。


    我不明白你为什么使用HSV分割对象,RGB图像足够好。 将图像分为3个通道(r,g,b)并对其应用自适应阈值。 扩大和侵蚀图像,然后添加(不合并)这3个二进制图像以获得一个二进制图像。 最后做你的食谱6级提取对象。 如果噪声仍影响结果,请在阈值之前对r,g,b通道应用双边滤波器。

    链接地址: http://www.djcxy.com/p/79637.html

    上一篇: time Image Processing: Noise in HSV image (openCV)

    下一篇: Finding square centers from a picture