integralImage

Вычислите 2-D интегральное изображение

Описание

В integral image каждый пиксель представляет совокупную сумму соответствующего входа пикселя со всеми пикселями выше и слева от входа пикселя.

Интегральное изображение позволяет вам быстро вычислять суммации по субрегионам изображений. Подрегионарные суммирования могут быть вычислены за постоянное время как линейная комбинация только четырех пикселей в интегральном изображении, независимо от размера субрегиона. Использование интегральных изображений было популяризировано алгоритмом Виолы-Джонса [1].

пример

J = integralImage(I) вычисляет интегральное изображение из изображения I. Функция с нулями заполняет верхнюю и левую часть выхода интегрального изображения, J.

пример

J = integralImage(I,orientation) вычисляет интегральное изображение с ориентацией, заданной orientation.

Примеры

свернуть все

Создайте простую матрицу выборок.

I = magic(5)
I = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Вычислите интегральное изображение матрицы выборки. Эти шаги показывают, как первые несколько значений в исходной матрице сопоставляются со значениями в интегральном изображении. Обратите внимание, что пиксель с (строка, столбец) координатой (r, c) в исходном изображении соответствует пикселю с координатой (r + 1, c + 1) в интегральном изображении.

  • Первая строка и столбец в интегральном изображении все 0с.

  • Пиксель в исходной матрице в координате (1, 1) со значением 17 неизменен в интегральном изображении, потому что в smmation нет других пикселей. Поэтому пиксель в интегральном изображении в координате (2, 2) имеет значение 17.

  • Пиксель в исходной матрице в координате (1, 2) преобразуется в пиксель (2, 3) в интегральном изображении. Значение является суммированием исходного значения пикселя (24), пикселей над ним (0) и пикселей влево (17): 24 + 17 + 0 = 41.

  • Пиксель в исходной матрице в координате (1, 3) преобразуется в пиксель (2, 4) в интегральном изображении. Значение является суммированием исходного значения пикселя (1), пикселя над ним (0) и пикселей влево (которые уже суммированы к 41). Таким образом, значение в пикселе (2,4) в интегральном изображении составляет 1 + 41 + 0 = 42.

J = integralImage(I)
J = 6×6

     0     0     0     0     0     0
     0    17    41    42    50    65
     0    40    69    77    99   130
     0    44    79   100   142   195
     0    54   101   141   204   260
     0    65   130   195   260   325

Считайте полутоновое изображение в рабочую область. Отобразите изображение.

I = imread('pout.tif');
imshow(I)

Вычислите интегральное изображение.

J = integralImage(I);

Используйте drawrectangle инструмент для выбора прямоугольного субрегиона. Инструмент возвращает Rectangle объект.

d = drawrectangle;

The Vertices свойство Rectangle объект хранит координаты вершин как матрицу 4 на 2. Вершины упорядочиваются, начиная с верхнего левого и продолжая в направлении по часовой стрелке. Разделите матрицу на два вектора, содержащих координаты строки и столбца. Поскольку интегральное изображение заполнено нулями с верхней и левой стороны, увеличьте координаты строки и столбца на 1, чтобы извлечь соответствующие элементы интегрального массива.

r = floor(d.Vertices(:,2)) + 1;
c = floor(d.Vertices(:,1)) + 1;

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

regionSum = J(r(1),c(1)) - J(r(2),c(2)) + J(r(3),c(3)) - J(r(4),c(4))
regionSum = 613092

Создайте простую матрицу выборок.

I = magic(5)
I = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Создайте интегральное изображение с повернутой ориентацией.

J = integralImage(I,'rotated')
J = 6×7

     0     0     0     0     0     0     0
     0    17    24     1     8    15     0
    17    64    47    40    38    39    15
    64    74    91   104   105    76    39
    74   105   149   188   183   130    76
   105   170   232   272   236   195   130

Задайте повернутый прямоугольный субрегион. Этот пример задает субрегион с верхним углом в координате (1,3) на оригинальном изображении. Субрегион имеет повернутую высоту 1 и ширину 2.

r = 1;
c = 3;
h = 1;
w = 2;

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

regionBottom = J(r+w+h,c-h+w+1);
regionTop = J(r,c+1);
regionLeft = J(r+h,c-h+1);
regionRight = J(r+w,c+w+1);
regionCorners = [regionBottom regionTop regionLeft regionRight]
regionCorners = 1×4

   105     0    24    39

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

regionSum = regionBottom + regionTop - regionLeft - regionRight
regionSum = 42

Входные параметры

свернуть все

Изображение, заданное как числовой массив любой размерности. Если вход изображение имеет более двух размерности (ndims(I)>2), например, для изображения RGB, затем integralImage вычисляет интегральное изображение для всех плоскостей 2-D с более высокими размерностями.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Ориентация изображения, заданная как 'upright' или 'rotated'. Если вы задаете ориентацию 'rotated', затем integralImage возвращает интегральное изображение для вычисления сумм по прямоугольникам, повернутым на 45 степени.

Типы данных: char | string

Выходные аргументы

свернуть все

Интегральное изображение, возвращенное как числовая матрица. Функция с нулями заполняет интегральное изображение согласно orientation изображения. Такие размеры облегчают расчет сумм пикселей вдоль контуров изображения. Интегральное изображение, J, является по существу заполненной версией значения cumsum(cumsum (I, 2)).

Ориентация изображенияРазмер интегрального изображения
Вертикальное интегральное изображениеЗаполненный нулями сверху и налево. size(J) = size(I)+1
Повернутое интегральное изображениеЗаполненный нулями в верхней, левой и правой верхних частях. size(J) = size(I)+[1 2]

Типы данных: double

Алгоритмы

свернуть все

Интегральное суммирование изображений

Каждый пиксель в интегральном изображении представляет суммирование соответствующего входа пикселя с всеми значениями пикселями входа выше и слева от входа пикселя. Потому что integralImage zero-заполняет полученное интегральное изображение, пиксель с (строка, столбец) координатой (m, n) в оригинальное изображение преобразуется в пиксель с координатой (m+1, n+ 1) в интегральном изображении.

На рисунке текущий пиксель на вход изображении является темно-зеленым пикселем в координате (4, 5). Все пиксели на входном изображении выше и слева от входного пикселя окрашены в светло-зеленый цвет. Суммирование значений зеленого пикселя возвращается в интегральном пикселе изображения с координатой (5, 6), окрашенной в серый цвет.

integralImage выполняет более быстрый расчет интегрального изображения путем суммирования значений пикселей как в вход изображении, так и в интегральном изображении. Пиксель (m, n) в интегральном изображении J является линейной комбинацией только четырех пикселей: один из входа изображения и три предварительно вычисленных пикселя из интегрального изображения.

J(m,n) = J(m,n-1) + J(m-1,n) + I(m-1,n-1) - J(m-1,n-1)

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

Повернутое интегральное суммирование изображений

Если вы задаете изображение orientation как 'rotated'затем пиксели в интегральном изображении представляют суммирование соответствующего значения входа пикселя со всеми пикселями входа, которые по диагонали выше пикселя вход. integralImage выполняет суммирование по диагональным линиям. Этот подход менее интенсивен в вычислительном отношении, чем вращение изображения и вычисление интегрального изображения в прямолинейных направлениях.

На рисунке текущий пиксель на вход изображении является темно-зеленым пикселем в координате (4, 5). Все пиксели на вход изображении по диагонали выше входа пикселя окрашены в светло-зеленый цвет. Суммирование значений зеленого пикселя возвращается в интегральном пикселе изображения с координатой (5, 6), окрашенной в серый цвет.

integralImage выполняет более быстрый расчет повернутого интегрального изображения путем суммирования пиксельных значений как в входном изображении, так и в интегральном изображении. Пиксель (m, n) в интегральном изображении J является линейной комбинацией всего из пяти пикселей: двух из входа изображения и трех ранее вычисленных пикселей из интегрального изображения:

J(m,n) = J(m-1,n-1) + J(m-1,n+1) - J(m-2,n) + I(m-1,n-1) + I(m-2,n-1)

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

Изображение Подрегиона Суммирование

Субрегион в вертикальной ориентации с верхней левой координатой (m, n), высота h, и ширина w в оригинальное изображение имеет суммирование:

regionSum = J(m–1,n–1) + J(m+h–1,n+w–1) – J(m+h–1,n–1) – J(m-1,n+w-1)

Например, на входном изображении ниже, суммирование синей затененной области: 46 - 22 - 20 + 10 = 14. Вычисление вычитает области выше и слева от затененной области. Площадь перекрытия складывается назад, чтобы компенсировать двойное вычитание.

Субрегион в повернутой ориентации использует другое определение высоты и ширины [2]. Результирующие данные по области:

regionSum = J(m+h+w,n-h+w+1) + J(m,n+1) - J(m+h,n-h+1) - J(m+w,n+w+1)

Ссылки

[1] Виола, П. и М. Дж. Джонс. «Быстрое обнаружение объектов с использованием усиленного каскада простых функций». Материалы конференции IEEE Computer Society Conference on Компьютерное Зрение and Pattern Recognition 2001. 2001. Том 1, стр. 511-518.

[2] Lienhart, R., and J. Maydt. «Расширенный набор Haar-подобных функций для быстрого обнаружения объектов». Материалы Международной конференции IEEE по обработке изображений 2002 года. Сентябрь 2002 года. Том 1, стр. 900-903.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2015b