Предыдущая статья — Распознавание образов в Python. Часть IV — используем Mathplotlib для вывода изображений.
Теперь мы готовы рассматривать вопросы обработки изображений.
Основная идея в обработке изображений состоит в их упрощении. Конечно, обработка изображений также включает в себя разные визуальные эффекты, но нас сейчас интересует именно упрощение исходного изображения. Данная проблема возникает, когда мы хотим определить символы, форму объекта, да вообще все что угодно в полноцветном изображении. При анализе чего-то сложного мы всегда должны разбить его на более простые части. При обработке изображения мы смотрим на него, определяем некий усредненный цвет и устанавливаем его в качестве порогового значения. Исходя из него, мы будем устанавливать черный или белый цвет. В принципе, при обработке изображений можно преобразовывать их и с оттенками серого, но для наших целей вполне достаточно просто черно-белого изображения.
Давайте посмотрим на изображение, которое мы хотим обработать.
Давайте откроем в нашем коде вместо dot.png другое изображение: "i = Image.open('images/numbers/y0.4.png')".
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
i = Image.open('images/numbers/y0.4.png')
iar = np.asarray(i)
plt.imshow(iar)
print(iar)
plt.show()
Мы увидим следующее изображение:

Теперь ряд данных выглядит следующим образом:
[[255 242 0 255] [255 242 0 255] [ 63 72 204 255] [ 63 72 204 255] [ 63 72 204 255] [ 63 72 204 255] [255 242 0 255] [255 242 0 255]]
Сейчас давайте взглянем на другую версию изображения ноля, открыв файл следующим образом: «i = Image.open('images/numbers/0.4.png')«.
Это будет тот же ноль, но в других цветах. Вот так это выгляит:

Ряд данных для этого изображения будет иметь следующий вид:
[[255 255 255 255] [ 0 0 0 255] [ 0 0 0 255] [ 0 0 0 255] [ 0 0 0 255] [ 0 0 0 255] [ 0 0 0 255] [255 255 255 255]]
Несложно заметить, что в этих данных есть только значения 0 и 255. Для анализа данных это очень хорошо. Мы хотим по возможности упростить все до 0 и 255, и мы можем это сделать путем обрабоки изображений с использованием пороговых значений.
Мы можем это сделать даже с изображениями, которые намеренно созданы таким образом, чтобы их было сложно распознавать. Например, возьмем "i = Image.open('images/numbers/y0.5.png')".

Некоторые допускают большую ошибку, используя подобные изображения в качестве капчи. Но так можно обмануть только человека, алгоритмы легко обойдут такую проблему.
На данный момент у нас нет инструментов для решения подобной задачи, но даже на базовом уровне это совсем не сложно сделать. Этим мы и займемся в дальнейшем.
Следующая статья — Распознавание образов в Python. Часть VI — функция обработки изображений.

