【问题标题】:Making background of the image white将图像背景设为白色
【发布时间】:2015-07-28 04:32:58
【问题描述】:

我有几张这样的图像,并尝试使用Neural NetworksGIST 作为特征来识别对象。我的数据集有 50 个类和每个类 4 个图像。使用 75% 的图像作为训练数据,我得到了 83% 的测试准确率

为了提高准确性,我想对图像进行预处理,即我想让背景透明或白色,同时保留原始对象。我一直在尝试cv2.BackgroundSubtractorMOG2(),但它使整个图像变灰。

预处理此图像的最佳方法是什么?

【问题讨论】:

  • 如果您自己拍照,为什么不准备不同颜色背景的照片呢?您是否还通过输入旋转 90、180 和 270 度的图像来增加训练数据?通过旋转它们并使用旋转的,网络最终可以更好地泛化。如果您突然收到一张带有绿色背景的图像,并且您的背景减法去除了一些盖子等,我只是看到了一个问题
  • 可能对背景减法有用:docs.opencv.org/trunk/d1/dc5/…
  • 你在训练自己的神经网络吗?我建议使用像 caffe 这样的预训练的。您不必担心 NN 的背景颜色。

标签: opencv machine-learning computer-vision image-recognition


【解决方案1】:

您可以尝试使用GrabCut 算法来解决这个问题。由于您知道对象大致位于中心,您可以尝试构建对象的颜色分布并从图像的边界收集背景样本。

OpenCV 文档可以在这里找到: http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#grabcut

这里有一个例子:https://github.com/Itseez/opencv/blob/master/samples/cpp/grabcut.cpp

【讨论】:

    【解决方案2】:

    您可能想尝试提取轮廓以在图像中找到对象。然后,您可以只提取最大轮廓内的那部分图像,并假设那是您的对象。

    【讨论】:

      【解决方案3】:

      对于图像预处理,没有一个最佳答案。可以做很多事情来增加你的训练集/提高分类准确性。如果您正在使用神经网络(尤其是自己训练它们),那么您需要尽可能地扩充您的数据以达到最有效的效果。您可以为图像预处理/训练集数据增强做一些可能的技术:

      • 将您的训练图像旋转任意量(除了 90 / 180 / 270 度之外,还包括 30 / 60 / 120 / 等)
      • 随机添加高斯噪声。
      • 稍微模糊您的图像。
      • 使图像变亮。

      由于每个类只有 4 张图像,这不足以进行训练,除非您希望能够分类的图像与您的训练集中的图像非常相似,因此您想将这 4 张图像(3如果您将 75% 用于训练)到 12 之类的用于训练。

      但是对于测试,需要注意的重要一点是图像的形状很重要。因此,如果您的网络需要 50x50 像素的图像,而您的原始图像是 100x50,那么您有多种选择如何将图像重新整形为 50x50,包括直接变形、从中间裁剪 50x50 区域、用黑色填充图像像素到 100x100 然后重新缩放等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        相关资源
        最近更新 更多