在Matlab中是否可以替代blockproc?

时间:2012-06-28 03:37:13

标签: matlab image-processing matrix

我一直在使用blockproc来按块处理图像。不幸的是,blockproc是图像处理工具箱的一部分,我个人电脑上没有。

基础Matlab中是否有一组函数可以替代blockproc


我最初的猜测是使用im2col将每个块转换为列,然后arrayfun来处理每列。然后我意识到im2col也是图像处理工具箱的一部分,所以这不能解决我的问题。

2 个答案:

答案 0 :(得分:8)

以下是使用MAT2CELL的示例。它将图像划分为N-by-M图块,并处理图像尺寸不能被图块数量整除的情况。

%# 2D grayscale image
I = imread('coins.png');

%# desird number of horizontal/vertical tiles to divide the image into
numBlkH = 4;
numBlkW = 4;

%# compute size of each tile in pixels
[imgH,imgW,~] = size(I);
szBlkH = [repmat(fix(imgH/numBlkH),1,numBlkH-1) imgH-fix(imgH/numBlkH)*(numBlkH-1)];
szBlkW = [repmat(fix(imgW/numBlkW),1,numBlkW-1) imgW-fix(imgW/numBlkW)*(numBlkW-1)];

%# divide into tiles, and linearize using a row-major order
C = mat2cell(I, szBlkH, szBlkW)';
C = C(:);

%# display tiles i subplots
figure, imshow(I)
figure
for i=1:numBlkH*numBlkW
    subplot(numBlkH,numBlkW,i), imshow( C{i} )
end

输入图像和生成的图块:

input_image tiles

答案 1 :(得分:2)

cellfuncell2mat一起mat2tilesblockproc不会做更多或更少的事情吗?

您可以自己编写一个包装器,使其使用与blockproc相同的参数,我认为不应该那么难。