В этом примере показано, как применить к изображению несколько фильтров-коробок различных размеров с помощью интегральной фильтрации изображений. Интегральное изображение является полезным представлением изображения, из которого можно быстро вычислить локальные суммы изображения. Прямоугольный фильтр может рассматриваться как локальная взвешенная сумма в каждом пикселе.
Чтение изображения в рабочую область и его отображение.
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 функция может использоваться для применения фильтра поля 2-D к интегральному представлению изображения.
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 contains an axes. The axes with title Image filtered with [7 7] box filter contains an object of type image.](../examples/images/win64/ApplyMultipleFiltersToIntegralImageExample_03.png)
figure
imshow(filteredImage2,[])
title('Image filtered with [11 11] box filter')![Figure contains an axes. The axes with title Image filtered with [11 11] box filter contains an object of type image.](../examples/images/win64/ApplyMultipleFiltersToIntegralImageExample_04.png)
figure
imshow(filteredImage3,[])
title('Image filtered with [15 15] box filter')![Figure contains an axes. The axes with title Image filtered with [15 15] box filter contains an object of type image.](../examples/images/win64/ApplyMultipleFiltersToIntegralImageExample_05.png)
integralBoxFilter | integralBoxFilter3 | integralImage | integralImage3