Изображения и обработка изображений

Завершено

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

Изображения в виде массивов пикселей

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

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

Массив состоит из семи строк и семи столбцов, представляющих значения пикселей для изображения пикселя 7x7 (который называется разрешением изображения). Каждый пиксель имеет значение от 0 (черный) до 255 (белый); со значениями между этими границами, представляющими оттенки серого. Изображение, представленное этим массивом, выглядит примерно так:

Diagram of a grayscale image.

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

Red:
 150  150  150  150  150  150  150  
 150  150  150  150  150  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  150  150  150  150  150
 150  150  150  150  150  150  150

Green:
 0    0    0    0    0    0    0          
 0    0    0    0    0    0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0    0    0    0    0    0
 0    0    0    0    0    0    0

Blue:
 255  255  255  255  255  255  255  
 255  255  255  255  255  255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255  255  255  255  255  255
 255  255  255  255  255  255  255

Итоговое изображение выглядит следующим образом.

Diagram of a color image.

Фиолетовые квадраты представлены сочетанием:

Red: 150 
Green: 0 
Blue: 255 

Желтые квадраты в центре представлены сочетанием:

Red: 255
Green: 255
Blue: 0

Использование фильтров для обработки изображений

Распространенный способ выполнения задач обработки изображений — применять фильтры , изменяющие значения пикселей изображения для создания визуального эффекта. Фильтр определяется одним или несколькими массивами значений пикселей, называемыми ядрами фильтров. Например, можно определить фильтр с ядром 3x3, как показано в этом примере:

-1 -1 -1
-1  8 -1
-1 -1 -1

Затем ядро будет сложено по изображению, вычисляя весовую сумму для каждого 3x3 исправления пикселей и присваивая результат новому изображению. Проще понять, как работает фильтрация, изучая пошаговый пример.

Начнем с изображения серого уровня, который мы изучили ранее:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

Во-первых, мы применяем ядро фильтра к левому верхнему исправлению изображения, умножая каждое значение пикселя на соответствующее значение веса в ядре и добавляя результаты:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255

Результат (-255) становится первым значением в новом массиве. Затем мы переместим ядро фильтра по одному пикселю вправо и повторите операцию:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510

Опять же, результат добавляется в новый массив, который теперь содержит два значения:

-255  -510

Процесс повторяется до тех пор, пока фильтр не будет связан по всему изображению, как показано в этой анимации:

Diagram of a filter.

Фильтр связан с изображением, вычисляя новый массив значений. Некоторые значения могут находиться за пределами диапазона значений пикселей от 0 до 255 пикселей, поэтому значения корректируются в соответствии с этим диапазоном. Из-за формы фильтра внешний край пикселей не вычисляется, поэтому применяется значение заполнения (обычно 0). Результирующий массив представляет новое изображение, в котором фильтр преобразовал исходное изображение. В этом случае фильтр имеет эффект выделения краев фигур в изображении.

Чтобы увидеть эффект фильтра более четко, вот пример того же фильтра, примененного к реальному изображению:

Исходное изображение Отфильтрованное изображение
Diagram of a banana. Diagram of a filtered banana.

Так как фильтр связан с изображением, этот тип манипуляции изображения часто называется сверточная фильтрация. Фильтр, используемый в этом примере, — это конкретный тип фильтра (называемый фильтром laplace ), который выделяет края объектов на изображении. Существует множество других типов фильтров, которые можно использовать для создания размытия, резкости, инверсии цвета и других эффектов.