2015-03-07 2 views
1

Мне нужно было разделить изображение в оттенках серого в равных частях, поэтому я использовал функцию mat2cell. Затем мне пришлось выравнивать каждую из частей отдельно, для этой цели я использовал функцию histeq. Для этого я повторно использовал одну и ту же переменную массива ячеек. Вот код:Как создать одиночное изображение из массива ячеек матриц в Matlab?

height=round(size(img,1)/number_of_divisions); 
length=round(size(img,2)/number_of_divisions); 
M=zeros(number_of_divisions,1); 
N=zeros(1,number_of_divisions); 
M(1:number_of_divisions)=height; 
N(1:number_of_divisions)=length; 
aux=mat2cell(img,M,N); 

for i=1:size(aux,1) 
    for j=1:size(aux,2) 
     aux{i,j}=histeq(aux{i,j},256); 
    end 
end 

Итак, как мне объединить каждую ячейку в одно изображение?

+0

Просто заметил ваши первые буксирные тросы не работают всегда. Для size '[1001,1001]' и 'number_of_divisions' он терпит неудачу. Еще одна причина использовать 'blockproc' – Daniel

+0

да, это правда, спасибо. Я пытался открыть его сам, но я до сих пор не понимаю, что делает «blockproc» с пикселями, которые не будут «приняты», когда деление пикселей по числу блоков не является целым числом (причина он не работает также с mat2cell). Не могли бы вы объяснить мне, пожалуйста? – user2952272

+0

'blockproc' использует размер, который вы передаете, и последняя строка/столбец блоков при необходимости меньше. – Daniel

ответ

0

Использование cell2mat

img2=cell2mat(aux); 

Для лучшей производительности замените код с blockproc

blocksize=ceil(size(img)./number_of_divisions); 
img2=blockproc(img,blocksize,@(block_struct)histeq(block_struct.data)); 
+0

Да, это сработало! Я должен был догадаться, у Matlab есть функция для каждой проблемы: D – user2952272

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