Python 基于numpy的二维图像特征向量提取

Python 基于numpy的二维图像特征向量提取,python,numpy,machine-learning,classification,feature-extraction,Python,Numpy,Machine Learning,Classification,Feature Extraction,我有一系列两种类型的2d图像,要么是恒星,要么是五角大楼。我的目标是分别对所有这些图像进行分类。我有30张恒星图像和30张五角大楼图像。此处并排显示了每个图像的示例: 在应用KNN分类算法之前,我需要从所有图像中提取一个特征向量。特征向量必须具有相同的大小,但是2d图像的大小都不同。我在图像中提取了read,然后得到了一个包含0和1的二维数组 image = pl.imread('imagepath.png') 我的问题是如何处理图像,以生成包含足够信息的有意义的特征向量,从而进行分类。它必

我有一系列两种类型的2d图像,要么是恒星,要么是五角大楼。我的目标是分别对所有这些图像进行分类。我有30张恒星图像和30张五角大楼图像。此处并排显示了每个图像的示例:

在应用KNN分类算法之前,我需要从所有图像中提取一个特征向量。特征向量必须具有相同的大小,但是2d图像的大小都不同。我在图像中提取了read,然后得到了一个包含0和1的二维数组

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

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

如果您想使用opencv,那么:

将图像大小调整为标准大小:

import cv2
import numpy as np

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

dst = cv2.resize(src, target_size)
转换为一维向量:

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

如果要使用opencv,请执行以下操作:

将图像大小调整为标准大小:

import cv2
import numpy as np

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

dst = cv2.resize(src, target_size)
转换为一维向量:

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

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

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

  • 黑色像素的数量可能没有帮助,因为 恒星和五角大楼可以变化
  • 锐角的数量可能非常有用
  • 直线段的数量可能有用,但这可能会 不可靠,因为形状是手工绘制的

  • 假设您想尝试使用角点数量作为一项功能,您可以参考以了解如何提取角点。

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

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

  • 黑色像素的数量可能没有帮助,因为 恒星和五角大楼可以变化
  • 锐角的数量可能非常有用
  • 直线段的数量可能有用,但这可能会 不可靠,因为形状是手工绘制的

  • 假设您想尝试使用角数作为特征,您可以参考以了解如何提取角点。

    只需将二维像素数据转换为1-DW,这是在转换过程中标准化大小的好方法,以便所有1-d阵列大小相同?将图像大小调整为相同大小,然后获取特征。只需将二维像素数据转换为1-DW,这是标准化的好方法转换过程中的大小,以便所有1-d阵列的大小相同?调整图像大小,使其大小相同,然后获取特征。