从ndy中的2d图像中提取特征向量

时间:2018-03-08 19:23:22

标签: python numpy machine-learning classification feature-extraction

我有一系列两种类型的2D图像,无论是星形还是五边形。我的目标是分别对所有这些图像进行分类。我有30个星图像和30个五边形图像。每个图像的示例在这里并排显示:

Sample Images

在应用KNN分类算法之前,我需要从所有图像中提取特征向量。特征向量必须全部具有相同的大小,但是2d图像的大小都不同。我已经在我的图像中提取了读取数据,然后我返回了一个带有零和一的二维数组。

image = pl.imread('imagepath.png')

我的问题是如何处理image以生成包含足够信息的有意义的特征向量,以便我进行分类。它必须是每个图像的单个矢量,我将用于训练和测试。

2 个答案:

答案 0 :(得分:3)

如果你想使用opencv,那么:

将图像调整为标准尺寸:

import cv2
import numpy as np

src = cv2.imread("/path.jpg")
target_size = (64,64)

dst = cv2.resize(src, target_size)

转换为1D矢量:

dst = dst.reshape(target_size.shape[0] * target_size.shape[1])

答案 1 :(得分:1)

在开始编码之前,您必须确定哪些功能对此任务有用:

最简单的方法是在@ Jordan的答案中尝试这种方法并将整个图像转换为一个特征。这可能有效,因为类是简单的模式,如果你使用KNN,这很有趣。如果这不能很好地运行,以下步骤将说明您应该如何解决问题。

  1. 黑色像素的数量可能无济于事,因为它的大小 明星和五角大楼可能会有所不同。
  2. 尖角的数量非常有用。
  3. 直线段的数量可能有用,但可以这样做 不可靠,因为形状是手绘的。
  4. 假设您想要使用角数作为特征,您可以参考this page来学习如何提取角落。