Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Why this code shows error.?

Asked by Lalit Patil on 5 Dec 2012

http://speedy.sh/bmudH/9.png

This is the image which i am testing.. And code for it is..

I = imread('9.png');

threshold = graythresh(I);

originalImage = im2bw(I, threshold);

i = bwareaopen(originalImage,350);

imshow(i)

m = max(max(i));

[r c] = find(i == m);

fid = fopen('lalit1.txt','wt');

for j=1:length(r)

fprintf(fid,'%f %f\n',r(j),c(j));

end

fclose(fid);

data = textread('lalit1.txt');

r = unique(data);

for i=r',

    c = data(data(:,2)==i,1);
    z(i,1) = mean([min(c) max(c)]);

end

fid = fopen('lalit2.txt','wt');

for j=1:length(z)

fprintf(fid,'%f %f\n',j,z(j));

end

fclose(fid);

clc;

clear;

fileID = fopen('lalit2.txt');

C = textscan(fileID, '%f32 %f32');

fclose(fileID);

y=cell2mat(C(:,1));

x=cell2mat(C(:,2));

nz = x ~= 0;

y = y(nz);

x = x(nz);

binaryImage = logical(accumarray( ceil([x(:), y(:)]), 1, [480 752]) );

imshow(binaryImage)

Why this program shows error for this attached image.?

Please give me correction..

7 Comments

Walter Roberson on 5 Dec 2012

At the MATLAB command line, type in the command

dbstop if error

Do not put this in your source code, just type it in at the command line.

Then execute your program as normal.

Eventually the program will stop in the debugger at the point you are having the problem. When that happens, at the command line prompt, type in the three commands

size(data)
size(c)
size(i)

Do not put them all on one line; use three separate lines.

Show us the output of those three commands.

Jan Simon on 5 Dec 2012

I asked you repeatedly to format code in your questions properly. You did this successfully already, but stop this unfortunately again.

  • One empty line before the code
  • one empty line after the code
  • marker the code
  • hit "{} Code" button

It is not hard, but friendly for the readers.

Lalit Patil on 6 Dec 2012

size(data)

ans = 19986 2

...............

>> size(c)

ans = 0 1

...............

>> size(i)

ans = 1 1

Lalit Patil

Products

No products are associated with this question.

2 Answers

Answer by Image Analyst on 5 Dec 2012

What do you think this code does on a binary image (badly named "i"):

m = max(max(i));
[r c] = find(i == m);

Yep, m is one, so it's the same as

[r c] = find(i);

Then you write all pixel locations to a file for some unknown reason. Then you read it all back in with this

data = textread('lalit1.txt');
r = unique(data);

but now r has unique values from all the rows and columns combined, which makes little sense. Then it continues to get crazier from then on. What are you trying to do? Whatever it is, I'm sure this is not the best way of doing it. I don't really understand what the for,c,z loop is supposed to do and why you're messing around with cell arrays, accumarray(), etc. Perhaps it's due to the lack of comments. But anyway, I'm sure there is a much easier way, if I just knew what you were trying to accomplish. Posting an image would help.

1 Comment

Lalit Patil on 6 Dec 2012

I have This original image

http://speedy.sh/dvQ99/1.png

.......................

And after running my above code i got this kind of image Whuch i want..

http://speedy.sh/9B5hh/1st.jpg

.........................

The same thing i want to do for this image,

http://speedy.sh/bmnHH/9.png

But this code shows this kind of error,

??? Subscripted assignment dimension mismatch.

Image Analyst
Answer by Walter Roberson on 6 Dec 2012

Nothing matches the equality test, so "c" becomes empty. The min and max of that are empty, the mean of emptiness is empty, and you then try to store that emptiness in a single array location. But a single array location is too big to store emptiness so you get the error.

0 Comments

Walter Roberson

Contact us