Предыдущая статья — Распознавание образов в 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 — функция обработки изображений.