How do I get the dimensions of matrices in cell array?

9 views (last 30 days)
I have a cell array, which contains coordinates of points in the image (representing the bounding boxes of recognised digits via OCR). I want to sort those digits to rows and columns in order to create a proper multi-dimensional matrix for a puzzle solver. It went pretty well, until I encountered the problem of double-digit numbers, where I want them to treat as one.
ToSortLeft=[leftbboxes,cellfun(@str2num,leftdigits)']% adding the actual nuber into the boundingbox matrix
ToSortLeft=sortrows(ToSortLeft,[2 1]);% sort each digit according to their y coordinate and then according to the x
NumL{1}(1,1:5)=ToSortLev(1,:);
p=2;
k=1;
for i=2:size(ToSortLeft,1)% code to divide rows from each other
if (ToSortLeft(i,2)-ToSortLeft(i-1,2))<SideSize*0.3
NumL{k}(p,1:5)=ToSortLeft(i,:);
p=p+1;
else
k=k+1;
p=1;
NumL{k}(p,1:5)=ToSortLeft(i,:);
p=p+1;
end
end
%%placing the digits to a cell array of matrices
NumLL{1,length(NumL)}=[];
for i=1:length(NumL)
NumL{i}=sortrows(NumL{i},-1);
if length(NumL{i})>1 %if the row contains more than one digit
sz=length(NumL{i}); %here I get an error, becuase I cant find the number of rows with the 'size' neither with the 'length' function in that particular matrix
for j=2:sz
if NumL{1,i}(j-1,1)-NumL{1,i}(j,1)<SideSize/2 %if the numbers are too close
NumL{1,i}(j-1,5)=str2num(strcat(num2str(NumL{1,i}(j,5)),num2str(NumL{1,i}(j-1,5)))); %make one
NumL{1,i}(j,:)=[];%delete the row representing the second digit
sz=sz-1;%decrement the actual number of rows in the matrix
end
end
end
NumLL{i}=fliplr(NumL{i}(:,5)'); %save the vector of digits into the cell array
end
I get an error in the third row, because it contains more digits than one, but less than the x dimension i got from the 'length' function. How can i solve this problem? If there is an easier way to sort these numbers, please tell me.

Accepted Answer

Guillaume
Guillaume on 29 Mar 2018
Edited: Guillaume on 29 Mar 2018
As a rule, I would never use length because it is often used incorrectly (on a matrix). For a vector I'd use numel. In my opinion, length should be deprecated.
To get the number of rows of the matrix stored in NumL{i} you use size with the dimension set to 1:
numrows = size(NumL{i}, 1);
  1 Comment
Bálint Udvardy
Bálint Udvardy on 29 Mar 2018
Thank you very much. I have already tried to use 'size', but my syntax was wrong.

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!