过去帮助我的一些细节与(i)在块处理时分割图像的方法和(ii)“不均匀分割”有关,如 OP 所述。
(i) 分割/处理图像的方法:
1.处理非重叠块:
使用默认参数 {'BorderSize',[0 0]},可以使用blockproc 处理,如下所示。
(i)-1 的示例:注意输出的阻塞性质。这里每个大小为 32 x 32 的非重叠块用于计算 std2(),输出 std2 值用于填充该特定块。输入和输出的大小为 32 x 32。
fun = @(block_struct) std2(block_struct.data) * ones(size(block_struct.data));
I2 = blockproc('moon.tif',[32 32],fun);
figure; subplot(1, 2, 1);
imshow('moon.tif'); title('input');
subplot(1,2, 2)
imshow(I2,[]); title('output');
输入输出图像:
(i)-2:处理重叠块:
使用参数{'BorderSize',[V H]}:在块的上方和下方添加V行,在块的左侧和右侧添加H列。处理的块有 (N + 2*V) 行和 (M + 2*H) 列。使用默认参数 {'TrimBorder',true},将输出的边框修剪为 N 行和 M 列的原始输入块大小。
(i)-2 的示例:下面使用 blockproc 的代码使用 {'BorderSize',[15 15]} 和 [N M] = [1 1]。这类似于使用自定义内核过滤图像的每个像素。所以处理单元的输入是一个大小为 (1 + 2*15) 行和 (1 + 2*15) 列的块。并且由于 {'TrimBorder',true} 默认情况下,31 行 x 31 列块的 std2 作为每个像素的输出提供。修剪边框后的输出大小为 1 x 1。因此,请注意,与前面的示例相比,此示例输出是“非阻塞”的。此代码需要更长的时间来处理所有像素。
fun = @(block_struct) std2(block_struct.data) * ones(size(block_struct.data));
I2 = blockproc('moon.tif',[1 1],fun,'BorderSize',[15 15]);
figure; subplot(1, 2, 1);
imshow('moon.tif'); title('input');
subplot(1,2, 2)
imshow(I2,[]); title('output');
输入输出图像:
(ii) “不均匀的划分”:
1.零/复制/对称填充:
零填充,以便整数倍的块(N 行 x M cols 大小)可以覆盖不均匀维度中的 [图像 + 边界零点]。这可以通过使用默认参数 {'PadMethod', 0} 和 {'PadPartialBlocks' , true} (默认为 false )来实现。如果零边界区域导致从边界块计算的值出现高度不连续性,则可以使用 {'PadMethod', 'replicate'} 或 {'PadMethod', 'symmetric'}。
2.假设图像中有一个“活动区域”用于块处理
对于处理每个像素的情况,如情况 (i)-2,我们可以假设沿图像外围的所有边都有一个 floor(block_size/2) 像素的边界区域,用作“虚拟”地区。用于块处理的 Active 区域包含在 Dummy 区域中。
类似的东西用于成像传感器,其中位于活动像素成像阵列外围的虚拟像素允许像所有活动区域像素的颜色插值这样的操作。由于颜色插值通常需要 5x5 像素掩码来插值像素的颜色值,因此可以使用 2 个像素的边界虚拟外围。
假设 MATLAB 索引,区域 ( floor(block_size/2) + 1 ) 到 ( Input_Image_Rows - floor(block_size)/2) ) 行由 ( floor(block_size/2) + 1 ) 到 ( Input_ImageCols - floor(block_size )/2) ) 列被视为活动区域(假设边为方形块,block_size),其对每个像素进行块处理,如 (i)-2 中所示。
假设方块大小为 5 x 5,如下所示:
block_size = 5;
buffer_size = floor(block_size/2);
for i = (buffer_size+1):(image_rows-buffer_size)
for j = (buffer_size+1):(image_cols-buffer_size)
... % block processing for each pixel Image(i,j)
end
end
Matlab 版本:R2013a