从图像中提取数字和字母特征

Extract numbers and letters features from an image

我正在编写一个 python 程序来对字母和数字进行分类。我已经编写了分类器,并且拥有数据集的图像。我在 python 或处理图像方面确实没有太多经验。 我的问题是如何使用我拥有的图像创建数据集。如何创建具有它们形状的阵列。我应该为每个图像创建一个 numpy 数组吗?或者使用颜色直方图? 我可能会将所有图像都转换为灰度。

我找到了 link 对猫和狗进行分类的波纹管。它使用两种方法来提取图像特征,但我不知道这是否适用于我的情况。

k-nn-classifier-for-image-classification

任何人都可以指导我,例如,我可以将图像的特征提取到矢量中,以便我可以将这些数据写入我的 "dataset.data" 文件中吗?

我将使用如下图所示的图片:

Letter "e"

我什至考虑过将图像大小调整为 32x32 并创建一个代表图像的 0 和 1 位图。

任何人都可以指导我,例如,我可以将图像的特征提取到矢量中,以便我可以将这些数据写入我的 "dataset.data" 文件中吗?

谢谢。

您通常希望创建一个 Numpy 数组来保存所有训练数据。常见的排成下面的形状:

X_train.shape = (N, img.shape[0], img.shape[1])

其中 N 是集合中的图像数量。

这样,如果您使用单通道(灰度),X_train[i,:,:] 将保存第 i 个图像像素的值。请注意,建议对这些值进行归一化,但这取决于您选择训练的模型。

这里是一个简单的例子,说明如何创建这样一个数组:

import numpy as np
import cv2

X = np.zeros((N, IMG_SIZE[0], IMG_SIZE[1]), dtype=np.float32) 
y = np.zeros((N))
for idx, img_path in enumerate(images_path):
  img = cv2.imread(img_path)
  assert ((img.shape[0], img.shape[1]) == IMG_SIZE)
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  X[idx, :, :] = gray
  y[idx] = # label of this image

# if you wish to normalize:
X = (X/255.0) - 0.5

许多 数字分类器教程,通常以 MNIST 数据集为例。这是一个 example 但你应该继续 google 它。

如果您想获得更好的结果,您可能需要研究神经网络。同样,那里有很多教程,这里是一个 example using tensorflow.

我想您可能正在寻找这个:

http://www.scipy-lectures.org/advanced/scikit-learn/

Sklearn 是一个非常容易学习的机器学习包,有很多教程。 希望对你有帮助,