【问题标题】:How to use convolutional neural network on binary image using Keras?如何使用 Keras 在二进制图像上使用卷积神经网络?
【发布时间】:2019-04-12 21:15:38
【问题描述】:

我正在尝试使用 keras 为 ocr 训练一个 cnn 模型。我通过转换为灰度、去除噪声然后将其转换为二进制来对图像进行预处理,因为二进制图像在 ocr 中效果更好。但我遇到的问题是二进制图像有 2 个维度,没有通道维度,并且 keras 中的 conv2d(以及一般的任何 conv 层)需要 3 个维度。那么我应该怎么做才能添加维度但保持图像二进制?我正在使用 cv2 进行图像处理,所以请告诉解决方案最好使用它。也告诉我我是否正确,使用二进制图像数据集对 ocr 更好。

【问题讨论】:

  • 将 dnn 架构更改为仅使用一个通道。或者添加冗余通道,但这会使您的模型变得不必要地复杂。
  • @Micka 但 keras 的 conv2d 层需要 3 个输入维度。我该如何改变呢?至于添加冗余频道怎么添加?
  • 根据文档:"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"." 所以我认为您可以将input_shape=(height,width,1) 用于灰度或二进制数据?对不起,从我的角度来看,这只是理论上的。而且我不知道如何复制频道或某事。在python中。
  • @Micka 我使用的是二进制,而不是灰度
  • 是的,但是它将被用作灰度。重要的是,它只有 1 个频道。这是input_shape=(height,width,1)中的 1@

标签: python opencv image-processing keras conv-neural-network


【解决方案1】:

我得到了我的解决方案。我使用 numpy 函数 numpy.expand_dims() 添加空维度。所以它变成了(宽度,高度,1)。这是我所做的:-

img = np.expand_dims(img,axis=2)

【讨论】:

  • 如何将 RGB 转换为二进制图像?我需要将我的图像转换为 OCR。二进制图像如何更适合 OCR?他们有一些方法使用阈值进行二进制转换,但我们如何猜测阈值?
最近更新 更多