不同ROI的扩张梯度';s(blob优化)OPENCV 我正在用OpenCV处理C++中的一个扩展问题。我拍摄了一个停车场的视频帧,为了得到最好的斑点,我想出了这个 侵蚀(5x5内核矩形),3次迭代 膨胀渐变(将其视为沿y轴的颜色渐变)

不同ROI的扩张梯度';s(blob优化)OPENCV 我正在用OpenCV处理C++中的一个扩展问题。我拍摄了一个停车场的视频帧,为了得到最好的斑点,我想出了这个 侵蚀(5x5内核矩形),3次迭代 膨胀渐变(将其视为沿y轴的颜色渐变),c++,opencv,blob,gradient,roi,C++,Opencv,Blob,Gradient,Roi,那么我做了什么来让它工作呢?首先,我需要知道2个点(x,y)和2个良好的扩张核。有了这些信息,人们可以在整个图像上对这些值进行交互和外推。所以我根据这些参数计算了ROI(大小和扩展核大小)。因此,每个ROI都有自己预定义的用于扩展的内核大小。请注意,两个连续的ROI(opencv矩形)之间没有任何空间。一切正常,但有两个副作用: 在斑点的侧面有突起。黑线是ROI的边界! 与主blob“断开”的blob。这些并没有被切掉,但是上面的一个斑点下面的ROI会被放大(我想是从上面的ROI中获取像素信息

那么我做了什么来让它工作呢?首先,我需要知道2个点(x,y)和2个良好的扩张核。有了这些信息,人们可以在整个图像上对这些值进行交互和外推。所以我根据这些参数计算了ROI(大小和扩展核大小)。因此,每个ROI都有自己预定义的用于扩展的内核大小。请注意,两个连续的ROI(opencv矩形)之间没有任何空间。一切正常,但有两个副作用:

  • 在斑点的侧面有突起。黑线是ROI的边界!
  • 与主blob“断开”的blob。这些并没有被切掉,但是上面的一个斑点下面的ROI会被放大(我想是从上面的ROI中获取像素信息)成一个个分开的斑点。它应该是一个巨大的斑点 我已经尝试了改变ROI大小的所有方法,并在它们之间留了一些空间,但缺点是两个分开的ROI之间的斑点没有扩大

    因此,我的问题是:

  • 到底是什么导致了这些副作用
  • 我该怎么做才能让他们离开
  • 编辑


    所以我找到了我的解决方案:当调用opencv displate函数时,需要确定同一个cv::Mat是否可以用作目标图像。否则,您将使用原始图像和新图像的一部分。因此,我所要做的就是包括一个目的地cv::Mat。

    这并不能回答您的第一个问题(确定是什么导致了这些副作用),但为了消除这些副作用,您可以执行以下操作的一些变体,假设ROI参数是离散的,而不是连续的(似乎是这样)

    可以使用每个可能的内核大小计算整个图像的膨胀。然后,在计算完所有这些二值图像后,您可以将它们组合在一起,从正确的图像中获取正确的样本,以获得所需的输出图像。这绝对会浪费大量时间,但它应该在没有工件的情况下工作

    一旦你确认了你已经得到了以上的结果(几乎可以保证质量尽可能好),你就可以开始尝试优化了。我要尝试的一件事是将每个ROI大小扩展,以计算内核大小的膨胀。这可能会绕过由奇怪边界条件引起的瑕疵

    这就导致了我的猜测,首先是什么导致了这些伪影:每当你拍摄一幅有限的图像并运行卷积(或形态学算子)时,你需要选择你将如何处理边缘像素。通常,访问(-4,-1)处的像素是没有意义的,但是如果内核与它重叠,则必须执行该操作符。如果OpenCV正在为您的子区域进行这种边缘填充,它很容易为您提供所看到的工件


    希望这有帮助

    感谢您的回复,如果我没有找到解决方案,这将是我最后的选择。