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

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

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

originalImage = imread('cameraman.tif');

figure
imshow(originalImage)
title('Original Image')

Задайте размеры трех фильтров поля.

filterSizes = [7 7;11 11;15 15];

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

maxFilterSize = max(filterSizes);
padSize = (maxFilterSize - 1)/2;

paddedImage = padarray(originalImage,padSize,'replicate','both');

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

intImage = integralImage(paddedImage);

figure
imshow(intImage,[])
title('Integral Image Representation')

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

filteredImage1 = integralBoxFilter(intImage, filterSizes(1,:));
filteredImage2 = integralBoxFilter(intImage, filterSizes(2,:));
filteredImage3 = integralBoxFilter(intImage, filterSizes(3,:));

Функция integralBoxFilter возвращает только части фильтрации, которые вычисляются без дополнения. Фильтрация того же интегрального изображения с разного размера окружает результаты фильтров разного размера выходные параметры. Это подобно опции 'valid' в функции conv2.

whos filteredImage*
  Name                  Size              Bytes  Class     Attributes

  filteredImage1      264x264            557568  double              
  filteredImage2      260x260            540800  double              
  filteredImage3      256x256            524288  double              

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

extraPadding1 = (maxFilterSize - filterSizes(1,:))/2;
filteredImage1 = filteredImage1(1+extraPadding1(1):end-extraPadding1(1),...
    1+extraPadding1(2):end-extraPadding1(2) );

extraPadding2 = (maxFilterSize - filterSizes(2,:))/2;
filteredImage2 = filteredImage2(1+extraPadding2(1):end-extraPadding2(1),...
    1+extraPadding2(2):end-extraPadding2(2) );

figure
imshow(filteredImage1,[])
title('Image filtered with [7 7] box filter')

figure
imshow(filteredImage2,[])
title('Image filtered with [11 11] box filter')

figure
imshow(filteredImage3,[])
title('Image filtered with [15 15] box filter')

Смотрите также

| | |

Похожие темы