【问题标题】:Real-time Image Processing: Noise in HSV image (openCV)实时图像处理:HSV 图像中的噪声 (openCV)
【发布时间】:2018-04-14 17:59:22
【问题描述】:

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

  1. 从相机中获取数据可以对其进行裁剪以接收 ROI。
  2. 将 ROI 图像从 RGB 转换为 HSV 空间。
  3. 使用中值滤波器减少 HSV 图像中的噪声。
  4. 图像阈值
  5. 使用扩张和腐蚀去除图像中的小孔和小物体
  6. 使用 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 图像中看到了很多噪音,这就是为什么我使用媒体过滤器来减少噪音但保留边缘,因为我认为边缘信息在使用 findContours 函数时非常重要。 HSV and HSV in separate channels 我的问题是:

  • HSV 图像中的噪点是什么,参考上图,我该怎么做 提高我的图片质量?

【问题讨论】:

  • 是否有可能改善照明,或增加曝光 - 例如更大的光圈,还是更高的 ISO?
  • 尝试获得更好的相机。也许你可以从你的大学借一个。我敢肯定,即使在越南,如果您无法使用适当的设备,您也可以获得更好的网络摄像头。通过减少相机距离,您可以有效地使横向分辨率翻倍。你的大部分视野都没有使用。

标签: c++ opencv image-processing noise hsv


【解决方案1】:

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

这是我多年来见过的最糟糕的形象。你不应该再花一秒钟的时间来处理它,除非你住在火星上并且明天需要结果。

您的输入图像噪点过多、采样不足、散焦、曝光不足、混叠和压缩伪影以及几乎所有其他您可能对图像做错的事情。

信号处理第一法则:

废话=废话

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

【讨论】:

    【解决方案2】:

    部分问题在于您正在 HSV 空间中进行降噪。在您的示例中,您可以看到 V 通道的表现比 H 和 S 更好。最好在 RGB 中进行降噪(它更线性,更接近,但不完全相同,与相机的本机色彩空间中的噪点起源;当然还有伽马校正)。

    或许可以考虑使用更强的保边降噪滤波器,例如双边滤波器。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-05
        • 2020-05-25
        • 2022-01-20
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-06
        相关资源
        最近更新 更多