由于反色,AI神经网络错误的手写数字预测。八度/ Matlab的?

时间:2017-06-23 07:32:05

标签: matlab machine-learning neural-network octave handwriting-recognition

我在Octave的程序使用神经网络识别手写数字。问题是如果颜色改变,它将无法正确识别数字。但如果颜色反转,则预测不正确。例如: Six GrayScale Image

Six GrayScale Image

上面的图像包含相同图案的相同编号。但是它们的颜色反转了。

我已经在使用 RGB到GrayScale 转化。如何克服这个问题?除了为倒置彩色图像使用单独的训练示例之外,还有更好的选择吗?

2 个答案:

答案 0 :(得分:2)

边缘提取

如果从图像中提取边缘,您会发现它在这方面基本上是不变的,图像的两个版本在转换后看起来几乎相同

下面我将展示使用拉普拉斯边缘检测提取边缘时图像的外观,对于“白底黑”和“黑白底”图像:

enter image description here

我们的想法是在边缘训练你的网络,以获得关于你所描述的变化的一些不变性。

以下是MATLAB / OCtave用于边缘提取的一些资源:

https://mathworks.com/discovery/edge-detection.html https://octave.sourceforge.io/image/function/edge.html

<子> 我使用Python和OpenCV用edges_image = cv2.Laplacian(original_image, cv2.CV_64F)完成了边缘提取。如果我可以修复我的安装,我可以发布一个MATLAB / Octave示例:)

检测主色并在需要时反转

另一种方法是决定你想要使用一个版本,假设你已经在“白色背景上的黑色文本”变体上训练了网络。

现在输入图像时,首先检测主色/背景是黑色还是白色,然后根据需要进行反转。

答案 1 :(得分:2)

特征提取

为了概括@ bakkal关于使用边缘的建议,可以提取许多类型的image features。这些包括边缘,角落,斑点,脊等。实际上有page on mathworks个例子,包括使用HOG features进行数字识别(面向渐变的直方图)。

这些技术也适用于更复杂的图像,因为边缘并不总是最好的特征。使用matlab的extractHOGFeatures

从两个图像中提取HOG特征

enter image description here

如果您使用Octave,我相信您可以将vlfeat用于HOG功能。

要记住的另一个重要事项是,您希望所有图像具有相同的大小。我已将两张图片的大小调整为500x500,但这是任意的。

生成上面图像的代码

y

您不必限于HOG功能。也可以快速尝试SURF features

surf features

同样,颜色反转无关紧要,因为功能匹配。但你可以看到HOG功能在这里可能是一个更好的选择,因为绘制的20点/ blob并不能真正代表数字6 ..在matlab中获得上述代码的代码。

close all; clear; clc;

% reading in
img1 = rgb2gray(imread('img1.png'));
img2 = rgb2gray(imread('img2.png'));

img_size = [500 500]; % 

% all images should have the same size
img1_resized = imresize(img1, img_size);
img2_resized = imresize(img2, img_size);

% extracting features
[hog1, vis1] = extractHOGFeatures(img1_resized);
[hog2, vis2] = extractHOGFeatures(img2_resized);

% plotting
figure(1);
subplot(1, 2, 1);
plot(vis1);
subplot(1, 2, 2);
plot(vis2);

总结一下,根据问题,您可以选择不同类型的功能。大多数情况下,根据您自己的经验,选择原始像素值并不够好,除非您有一个非常大的数据集封装了所有可能的情况。