9 из 9 за Введение в обработку изображений

Соответствие шаблону

Как мы находим объекты из шаблонов?

В заключительной записи курса Введение в обработку изображений мы рассмотрим сопоставление шаблонов и покажем его в действии. Это надежный метод, используемый для обнаружения изображений, распознавания и отслеживания объектов. Суть сопоставления с шаблоном заключается в поиске эталонного изображения, известного как изображение-шаблон, в более крупном изображении, называемом исходным изображением.

Этот алгоритм следует интуитивному подходу, систематически сдвигая изображение-шаблон пиксель за пикселем и сравнивая его с различными частями исходного изображения. По сути, он сворачивает шаблон по всему изображению — подобно тому, как ядра используются в сверточных нейронных сетях. В ходе этого процесса создается новое изображение или матрица, где значение каждого пикселя представляет сходство между шаблоном и соответствующей областью исходного изображения. Анализируя полученное изображение, мы можем идентифицировать пики, которые обозначают точные места на исходном изображении, где присутствует шаблонное изображение. Важно отметить, что реализация сопоставления шаблонов может различаться, охватывая различные измерения подобия и эффективные методы сравнения в нескольких областях.

Давайте рассмотрим этот фруктовый шаблон 🍎🍋🍊🍓:

Скажем, нам интересно узнать, сколько полных яблок на этом изображении без необходимости подсчитывать их вручную.

Обратите внимание, что я подчеркнул «завершить». С левой стороны изображения довольно очевидно, что есть разрезанные яблоки. Мы не можем ожидать, что алгоритм сопоставит эти неполные яблоки с шаблоном, который у нас есть ниже, поскольку это просто наивное сопоставление, и нет модели глубокого обучения, чтобы узнать, что это неполное яблоко также похоже на яблоко из шаблона.

from skimage.color import rgb2gray

fruits = imread('fruits.jpg')
fruits_gray = rgb2gray(fruits)
template = fruits_gray[1350: 1550, 960: 1150]
imshow(template)
plt.show()

Теперь, когда мы уже определили наш шаблон, мы можем вызвать функцию match_template из scikit-image.feature.

from skimage.feature import match_template

result = match_template(fruits_gray, template)
imshow(result, cmap='coolwarm')
plt.show()

Эта тепловая карта показывает горячие области, где есть совпадение с шаблоном. На тепловой карте видны четыре отчетливые темно-красные точки. Чтобы сделать представление более очевидным и интуитивно понятным, мы можем вместо этого использовать функцию peak_local_max также из scikit-image.feature.

from skimage.feature import peak_local_max

imshow(fruits_gray)
template_width, template_height = template.shape

rect_counter = 0
for i, (x, y) in enumerate(peak_local_max(result, threshold_abs=0.9)):
    rect = plt.Rectangle((y, x), template_height, template_width, color='r', 
                         fc='none')
    rect_counter += 1
    plt.gca().add_patch(rect);
    
plt.axis('off')
plt.show()
print(f'The count of apples is: {rect_counter}')

Удивительно, правда? Даже без методов глубокого обучения мы смогли использовать компьютерное зрение (CV) для подсчета количества яблок на изображении. Тем не менее, это связано с присущими ему ограничениями. Поскольку он просматривает попиксельное представление шаблона, любая дополненная версия яблок не будет обнаружена алгоритмом. Таким образом, для любых реальных приложений, включающих реальные установки, где нет двух одинаковых объектов, этот алгоритм, безусловно, потерпит неудачу. Нам нужно будет использовать методы глубокого обучения для таких случаев использования.

С другой стороны, когда мы просто имеем дело с шаблонами в изображениях с повторением до пикселя, сопоставления шаблонов будет достаточно. Излишне упоминать, что это также менее затратно в вычислительном отношении, поэтому это будет более прагматичный выбор между ними.

Заключение

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

Мы узнали, что сопоставление шаблонов можно реализовать с помощью различных измерений подобия и эффективных методов сравнения. Он предлагает простой и интуитивно понятный подход к идентификации шаблонов и объектов на изображениях. Используя сопоставление с шаблоном, мы смогли подсчитать количество яблок на изображении, не полагаясь на методы глубокого обучения. Однако важно отметить, что сопоставление шаблонов имеет свои ограничения, особенно в сценариях, связанных с дополненными или измененными объектами. В таких случаях методы глубокого обучения могут быть более подходящими.

В нашем путешествии по сопоставлению шаблонов мы получили ценную информацию о мире компьютерного зрения и обработки изображений. Поняв этот метод, мы можем использовать его мощь в различных приложениях, начиная от обнаружения объектов и заканчивая анализом изображений. Сопоставление шаблонов обеспечивает эффективное с вычислительной точки зрения решение при работе с повторениями шаблонов с точностью до пикселя. Таким образом, в зависимости от конкретного варианта использования сопоставление с шаблоном может быть прагматическим выбором для задач распознавания образов и анализа.

Рекомендации

Красочный узор из разных фруктов. (н.д.). Freepik.com фотография. Получено с https://www.freepik.com/free-vector/colorful- Different-Fruits-Pattern_9002480.htm#query=fruit%20pattern&position=5&from_view=keyword&track=ais.