【问题标题】:Image centering before classification?分类前图像居中?
【发布时间】:2017-08-10 20:48:13
【问题描述】:

我在学校做过一个项目,我必须将物体分为猫和狗。我使用 SVM 和逻辑回归来实现这一点。

图像以特征的形式提供给我们。所以我们不必处理图像居中之类的事情......

我的问题是,如何将所有图像居中,以便我的分类器能够更好地学习?我知道 CNN 对此很有用,但我想知道在分类之前如何将图像居中?

谢谢!

【问题讨论】:

    标签: image image-processing machine-learning


    【解决方案1】:

    我不知道这是否是最好的解决方案,但是您可以尝试找到对象的中心,然后移动图像,使对象的中心成为图像的中心。

    一步一步:

    1. 在图像中找到对象:对于简单的对象,您可以使用 OpenCV 中的 findContours 之类的函数。但这是最难的部分,它真的取决于你的形象,可能需要更先进的技术。
    2. 找到对象的中心:您可以使用 OpenCV 中的 moments 找到它,也可以使用 Centroid 方法手动计算
    3. 移动对象:同样,有一些选项可以做到这一点,通过使用 OpenCV 库 warpAffine 或使用 Affine Transform 手动计算

    我在 OpenCV 文档中找到了第 1 步和第 2 步的不错教程:

    http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/moments/moments.html

    【讨论】:

      【解决方案2】:

      一种典型的方法是使用样本标准化/居中

      img = cv.imread(image_path, 1)
      # channel_wise centering :
      img_mean = img.mean(axis=(1, 2))
      img_std = img.std(axis=(1, 2))
      img = np.subtract(img, img_mean.reshape(3, 1, 1))
      img = np.divide(img, (img_std + 1e-4).reshape(3, 1, 1))
      # OR
      # full image centering 
      img_mean = img.mean()
      img_std = img.std()
      img = np.subtract(img, img_mean)
      img = np.divide(img, img_std + 1e-4)
      
      
      # Finally you cant set limit to lower and upper values of the image [-1, 1] range
      img = np.clip(img, -1.0, 1.0)
      

      【讨论】:

      • 这意味着我可以获得一些特征,比如说猫在最左边,一些在最右边?你能详细解释一下代码里面发生了什么吗?
      • 我试图回答 >我的问题是,如何将所有图像居中以便我的分类器可以更好地学习?上面的编码器处理 CNN 输入的图像。在深度学习中,减去均值和除以标准差是分类器输入以更好地学习的常见过程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多