Blockproc 是在MATLAB中“抓取”图像的真正有用的函数。它有充分的文档记录,甚至附带了tutorial page。但是,当您要在块之间进行某种形式的重叠时,事情就会变得棘手。 Mathworks论坛上有一些解释,包括this onethis one,并且尝试解释here(问题1),但是没有人真正在任何地方解释为什么需要与其他标志一起设置某些标志。有人可以解释'BorderSize'参数的目的是什么吗?似乎将'Trim Borders'设置为false时,'BorderSize'参数完全符合文档所说的(以及您的期望):



但是,当您阅读'TrimBorder'详细信息时,并不会清除太多内容:



为什么我要包含'BorderSize'(即重叠图块),但不将其应用于输出?这是否只是一个解释不清的标志:'TrimBorder'必须关闭才能使用'BorderSize',或者我还缺少更大的东西吗?我想我的困惑的要点是:什么时候我想将'TrimBorder'设置为false

例子:

% Non-overlapping
A = ones(10);
B = blockproc(A, [2,2], @(x)sum(sum(x.data)));
% B =
% [ 4 4 4 4 4 ]
% [ 4 4 4 4 4 ]
% [ 4 4 4 4 4 ]
% [ 4 4 4 4 4 ]
% [ 4 4 4 4 4 ]

% GOOD Overlapping--one-pixel border
B = blockproc(A, [2,2], @(x)sum(sum(x.data)), 'BorderSize', [1,1], 'TrimBorder', false);
% B =
% [ 9  12 12 12 9  ]
% [ 12 16 16 16 12 ]
% [ 12 16 16 16 12 ]
% [ 12 16 16 16 12 ]
% [ 9  12 12 12 9  ]

% BAD Overlapping--one-pixel border
B = blockproc(A, [2,2], @(x)sum(sum(x.data)), 'BorderSize', [1,1]);
% B = []

最佳答案



考虑要在图像中每个大小为MxN的每个块上应用函数fun的所有工作流程,但是为了使结果有效,您实际上需要MxN块周围的边框像素。 (过滤,形态,任何单个输出像素值取决于mxn周围邻域的函数)。即您需要输入(M + m,N + n)块来计算一个MxN输出块。

简单(又称虚构)示例:

h = fspecial('gaussian', 3);
im = imread('peppers.png');
B1 = blockproc(im, [20 20], @(bs)imfilter(bs.data,h));
imshowpair(im, B1,'montage');

matlab - MATLAB blockproc函数中的'BorderSize'和 'TrimBorder'-LMLPHP

注意到网格线了吗?在这种情况下,您只需在完整图片上调用imfilter。但是,blockproc允许您处理大于物理内存的图像。因此,对于此讨论,想象一下im是一个巨大的tiff文件。

对于此工作流程-如果您仅使用BorderSize在每个20x20块周围包括3个像素边框,而没有修剪输出边框:
h = fspecial('gaussian');
im = imread('peppers.png');
B1 = blockproc(im, [20 20], @(bs)imfilter(bs.data,h), 'BorderSize', [3 3], 'TrimBorder', false);
imshowpair(im, B1,'montage');

matlab - MATLAB blockproc函数中的'BorderSize'和 'TrimBorder'-LMLPHP

所以-您确实需要修剪边框(默认)
h = fspecial('gaussian');
im = imread('peppers.png');
B1 = blockproc(im, [20 20], @(bs)imfilter(bs.data,h), 'BorderSize', [3 3], 'TrimBorder', true);
imshowpair(im, B1,'montage');

matlab - MATLAB blockproc函数中的'BorderSize'和 'TrimBorder'-LMLPHP

注意-我以IMFILTER为例。对于小图像,可以直接使用IMFITLER。仅对于较大的图像,才考虑在BLOCPROC中使用IMFITLER。

10-04 14:38