Проблема в том, что вы очищаете контейнер mat5 каждый раз, когда выполняется цикл while. Если вы переместите его из цикла while, это должно решить проблему.
Edit: K также устанавливается в 1 каждый раз, когда выполняется цикл while. Это означает, что после первой итерации цикла for. K будет равно 1 k=1
и перезапишет ваши предыдущие данные.
function mat5 = charextract(ipimg)
%%%aa=imread('num_ip.tif');
bb=rgb2gray(ipimg);
cc=imbinarize(bb);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% SEGMENTATION %%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[x,y]=size(cc);
ee=sum(cc,2);
mat2=y-ee;
mat3=mat2~=0;
mat4=diff(mat3);
index1=find(mat4);
[q,w]=size(index1);%size of index2 matrix is q*w
kap=1;
lam=1;
mat5=([]); % moved out of while loop
k=1;
while kap<((q/2)+1)%number of loops=number of lines
for j=(index1(lam)+1):1:index1(lam+1)
mat5(k,:)=cc(j,:); %store the line segmented matrix
%aadd{j}=mat5(k,:);
k=k+1;
end
lam=lam+2;
kap=kap+1;
%aa=mat5+1;
%figure, imshow(mat5);
end
end