Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a substitute for blockproc in Matlab?

I've been using blockproc for processing images blockwise. Unfortunately, blockproc is part of the Image Processing Toolbox, which I don't have on my personal computer.

Is there a combination of functions in base Matlab that can substitute for blockproc?


My initial guess was to use im2col to transform each block into columns, and then arrayfun to process each column. Then I realized that im2col is also a part of the Image Processing Toolbox, so that doesn't solve my problem.

like image 547
SetchSen Avatar asked Jun 28 '12 03:06

SetchSen


2 Answers

Here is an example using MAT2CELL. It dividing the image into N-by-M tiles, and handles the case when the image size is not evenly divisible by the number of tiles.

%# 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

The input image and the resulting tiles:

input_imagetiles

like image 180
Amro Avatar answered Sep 23 '22 06:09

Amro


Won't mat2tiles together with cellfun and cell2mat do more or less what blockproc does?

You could write a wrapper yourself to make it use the same arguments as blockproc, I don't think it should be that hard to do.

like image 43
Egon Avatar answered Sep 26 '22 06:09

Egon