使图像的背景白色

时间:2015-05-16 08:01:55

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

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

enter image description here

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  • 以任意数量旋转您的训练图像(除了90/180/270度,类似于30/60/120 /等)。
  • 随机添加高斯噪音。
  • 模糊你的图像。
  • 照亮图像。

由于每个级别只有4张图像,因此除非您想要分类的图像与训练集中的图像非常相似,否则这个图像的训练图像不够用,因此您需要转换这4张图像(3如果你使用75%进行训练,可以使用12来用于训练。

但是对于测试,需要注意的一件重要事情是图像的SHAPE非常重要。因此,如果您的网络需要50x50像素图像且原始图像为100x50,那么您可以选择如何将图像重新塑造为50x50,包括直线变形,从中间裁剪50x50区域,用黑色填充图像像素为100x100,然后重新缩放等。