integralImage

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

Описание

В 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) в интегральном изображении.

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

  • Пиксель в исходной матрице в координате (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;

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 вычисляет интегральное изображение для всех 2D плоскостей по более высоким измерениям.

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

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

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

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

свернуть все

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

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

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

Алгоритмы

свернуть все

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

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

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

integralImage выполняет более быстрый расчет интегрального изображения путем подведения итогов пиксельных значений и во входном изображении и в интегральном изображении. Пиксель (mN) в интегральном изображении 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 выполняет более быстрый расчет вращаемого интегрального изображения путем подведения итогов пиксельных значений и во входном изображении и в интегральном изображении. Пиксель (mN) в интегральном изображении 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)

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

Отобразите суммирование подобласти

Подобласть в вертикальной ориентации с верхней левой координатой (mN), высота 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] Виола, P. и М. Дж. Джонс. "Быстрое Обнаружение объектов с помощью Повышенного Каскада Простых Функций". Продолжения 2 001 Конференции Общества эпохи компьютеризации IEEE по Компьютерному зрению и Распознаванию образов. 2001. Издание 1, стр 511–518.

[2] Lienhart, R. и Дж. Майдт. "Расширенный набор подобных Хаару Функций Быстрого Обнаружения объектов". Продолжения 2 002 Международных конференций IEEE по вопросам Обработки изображений. Сентябрь 2002. Издание 1, стр 900–903.

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

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

Введенный в R2015b