在很多图像处理过程中,对图像分块操作而不是同时处理整幅图像的方法是非常通用而且有效的,尤其是在后面章节中将要介绍的图像滤波和图像形态学操作中有很重要的应用。相比全图像操作,图像分块操作至少有以下 3 个优点:
更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId=1003594013
• 节省运算时占用的存储空间;
• 降低计算的复杂性,提高处理速度;
• 充分考虑图像的局部特性。
本节将会结合图像块操作的类型,介绍几个通用的图像块操作函数。这些块操作函数通常需要指定图像块的大小和对图像块进行特定处理的功能函数。图像块操作的类型有两种:
• 非重叠块操作(distinct block)
• 滑动邻域操作(sliding neighborhood)
这两种操作都是基于一个图像块的整体操作,按照指定的图像处理功能函数得到仅涉及该图像块的计算结果,而且,在对原图像进行块操作时,都可以根据需要指定不同大小的矩形块。然而,不同的是,非重叠块操作对原图像的划分不存在重叠区域,而且在对某一图像块进行处理后,得到的是对应输出图像中同样大小的图像块;滑动邻域操作是基于像素级的操作模式,以原图像某像素点为中心,以指定大小的图像块作为该像素点的邻域,对该像素点的整个邻域进行处理,每次处理后仅得到输出图像中对应像素点的值,而不是一个图像块的计算结果,而且,接下来不改变邻域的大小,仅仅移动邻域的中心像素位置,从而计算出所有的输出图像像素值,在这一过程中相邻图像邻域很明显有重叠区域。
1.非重叠图像块操作
非重叠图像块的定义将图像的数据矩阵划分为同样大小的矩形区域,不同的图像块在图像上面排列,相互之间没有重叠。它的排列顺序是从左上角开始。如果图像不能恰好被划分,则在图像的右、下部对其补零。如图所示,一个 15×30 的图像按照 4×8 的图像块进行划分,结果在图像的右边补了两列“0”,在图像的下边补了一行“0”。
另外,对于一些特别的图像处理操作,可能还需要进行一些特别的图像块划分,即包含有“重叠(Overlap)”定义区域的非重叠(Distinct)图像块划分方式,
图中阴影区域表示对图像块进行补“0”操作。
MATLAB 提供了一个通用的非重叠图像块操作函数 blkproc,其语法格式为:
B = blkproc(A,[m n],fun)
B = blkproc(A,[m n],fun,P1,P2,⋯)
B = blkproc(A,[m n],[mborder nb