gpt4 book ai didi

c++ - 实时图像处理 : Noise in HSV image (openCV)

转载 作者:行者123 更新时间:2023-11-27 22:42:48 27 4
gpt4 key购买 nike

我正在做一个非常准确的实时形状和颜色分类系统。似乎我的预处理阶段不够好,结果没有我预期的那么准确。这是我正在做的:

  1. 从相机中获取数据并对其进行裁剪以获得 ROI。
  2. 将 ROI 图像从 RGB 空间转换为 HSV 空间。
  3. 使用中值滤波器降低 HSV 图像中的噪声。
  4. 阈值图像
  5. 使用膨胀和腐 eclipse 去除图像中的小孔和小物体
  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 Image 中的噪点是什么,引用上面的Image,如何才能提高我的图片质量?

最佳答案

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

这是我多年来看到的最糟糕的画面。你不应该再花一秒钟来处理这个问题,除非你住在火星上并且明天就需要结果。

您的输入图像非常嘈杂、采样不足、散焦、曝光不足、充满锯齿和压缩伪影以及几乎任何您可能对图像做错的事情。

信号处理第一条规则:

废话 = 废话

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

关于c++ - 实时图像处理 : Noise in HSV image (openCV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47071442/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com