MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayTo resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Asked by mounim on 14 Dec 2012

hey everyone

please i am getting this error :

Improper assignment with rectangular empty matrix on this line :

midpoints1(k) = (leftEdge1 + rightEdge1)/2;

how can i solve that ? any help is appreciated, thanks

for k=700:800

oneRow1 = binaryImage(k, :);

leftEdge1 = find(oneRow1, 1, 'first'); rightEdge1 = find(oneRow1, 1, 'last');

hold on;

midpoints1(k) = (leftEdge1 + rightEdge1)/2;

plot(leftEdge1, k, 'rx','LineWidth',2); plot(rightEdge1, k, 'rx','LineWidth',2);

plot(midpoints1(k), k, 'yx','LineWidth',2);

end

X1=(700:800); midpoints1=midpoints1(midpoints1~=0); new_x1 = linspace(500, 900); coeffs1 = polyfit(X1, midpoints1, 1); new_y1 = polyval(coeffs1, new_x1); plot(new_y1,new_x1, '-','LineWidth',2);

*No products are associated with this question.*

Answer by Walter Roberson on 14 Dec 2012

In some rows, there are no 1's. When that happens, the results of find() are empty. You are trying to store the midpoint of that empty range into midpoints1(k), which requires a location which is a 1x1 value not a 0 x 0 value.

Walter Roberson on 14 Dec 2012

if isempty(leftEdge1) midpoint1(k) = 0; else midpoints1(k) = (leftEdge1 + rightEdge1)/2; %and do the plotting here end

## 6 Comments

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56561#comment_117148

When you use the debugger to stop at this line right before the error occurs, what are the dimensions of midpoints1, leftEdge1 and rightEdge1 at that point?

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56561#comment_117157

when i break the code at that line, the :

what i am trying to do is scanning different pictures, to finde the edge, not all the pictures give me the error, but som do !

in the pictures where i do not get the error, the leftEdge1 and rightEdge1 are single values.

what should i change to not get that error ? to not store empty values ?

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56561#comment_117169

What behavior would seem appropriate to you on rows that have no 1 in them ?

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56561#comment_117172

well, the most appopriate is just to ignore that row, and go on.

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56561#comment_117173

Read the documentation for isempty()

What value do you want stored in midpoints1(k) in this situation?

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/56561#comment_117175

it have to just store a zero ( a black pixel ), i tried this code, but it is not working 100% still gives me errors:

this one not working neither