2012-06-28 2 views
5

Я использую blockproc для обработки изображений по блоку. К сожалению, blockproc является частью инструмента обработки изображений, которого у меня нет на моем персональном компьютере.Есть ли замена для blockproc в Matlab?

Есть ли комбинация функций в базе Matlab, которая может заменить для blockproc?


Моя первоначальная догадка использовать im2col для преобразования каждого блока в столбцы, а затем arrayfun для обработки каждого столбца. Тогда я понял, что im2col также является частью инструмента обработки изображений, поэтому это не решает мою проблему.

+0

связанный с этим вопрос: [Matlab - объединить подматрицы] (http://stackoverflow.com/questions/6283918/matlab-merge -submatrices) – Amro

ответ

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

2

Не будет mat2tiles вместе с cellfun и cell2mat сделать более или менее то, что blockproc?

Вы можете написать обертку самостоятельно, чтобы она использовала те же аргументы, что и blockproc. Я не думаю, что это должно быть так сложно.

Смежные вопросы