主要内容

应用多个滤波器积分图像

这个例子展示了如何使用积分图像滤波对图像应用不同大小的多个框滤波器。积分像是一种有用的图像表示,可以快速计算局部像和。盒滤波器可以被认为是每个像素处的局部加权和。

将图像读入工作区并显示它。

originalImage = imread(“cameraman.tif”);图imshow(originalImage)原始图像的

图中包含一个轴对象。标题为Original Image的axes对象包含一个Image类型的对象。

定义三个盒子过滤器的大小。

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

填充图像,以适应最大的盒子过滤器的大小。每个维度的垫量等于最大的过滤器大小的一半。注意使用复制样式的填充来帮助减少边界伪影。

maxFilterSize = max(filterSizes);padSize = (maxFilterSize - 1)/2;paddedImage = padarray(originalImage,padSize,“复制”“两个”);

方法计算填充图像的积分图像表示形式integralImage函数并显示它。积分像从左到右、从上到下是单调非递减的。每个像素表示图像中当前像素的顶部和左侧的所有像素强度之和。

intImage = integralImage(paddedImage);figure imshow(intImage,[]) title(“整体图像表示”

图中包含一个轴对象。标题为Integral Image Representation的axes对象包含一个Image类型的对象。

对整幅图像应用三个不同大小的盒子滤波器。的integralBoxFilter函数可用于将2-D框滤波器应用于图像的积分图像表示。

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

integralBoxFilter函数只返回未填充的部分过滤。用不同大小的盒形滤波器对相同的积分图像进行滤波,会得到不同大小的输出。这类似于“有效”选项中的conv2函数。

filteredImage *
名称大小字节类属性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('图片用[7 7]框滤镜过滤'

图中包含一个轴对象。使用[7 7]框过滤器过滤的标题为Image的axes对象包含一个Image类型的对象。

figure imshow(filteredImage2,[]) title('图片用[11 11]框滤镜过滤'

图中包含一个轴对象。使用[11 11]框过滤器过滤的标题为Image的axes对象包含一个Image类型的对象。

图imshow(filteredImage3,[])'图片用[15 15]框滤镜过滤'

图中包含一个轴对象。使用[15 15]框过滤器过滤的标题为Image的axes对象包含一个Image类型的对象。

另请参阅

|||

相关的话题