How to find x,y matrix using for sintax
    9 views (last 30 days)
  
       Show older comments
    
i have been working for my thesis about image segmentation. i have this matrix
a =
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     1     1     1     0     0
     0     0     0     0     1     1     1     1     1     0
     0     0     0     0     0     1     1     0     0     0
     0     0     0     0     0     1     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
and then i want to find the first x,y with binary 1 using for sintax this is the one i use but its not working
---------------------------------------------
function [x1,y1,x2,y2,x3,y3,x4,y4]=gedge(x)
 [m,n]=size(x);
 % upper edge xy
 for i=1:m
    for j=1:n
        if(x(i,j)==1)
            x1=i;
            y1=j;
        break
        end
    end
 end
% left edge xy
 for j=1:n
    for i=1:m
        if(x(i,j)==1)
            x2=i;
            y2=j;
        break
        end
    end
 end
% bottom edge xy
 for i=m:-1:1
    for j=n:-1:1
        if(x(i,j)==1)
            x3=i;
            y3=j;
        break
        end
    end
 end
 % right edge xy
 for j=n:-1:1
    for i=m:-1:1
        if(x(i,j)==1)
            x4=i;
            y4=j;
        break
        end
    end
 end
%for the cropping
y=x(x1:x4,y2:y3);
-----------------------------------------------------------------
so i want to erase the 0 binary for my image segmentation. it will be this matrix:
a =
     0     1     1     1     0     
     1     1     1     1     1     
     0     1     1     0     0     
     0     1     0     0     0
please help recorrect my sintax code. Thanks
0 Comments
Accepted Answer
  random09983492
      
 on 20 Jun 2013
        Hi,
Here is my implementation. Let me know if there is something you do not understand.
[r,c] = size(a);
% Starts at bottom row and removes rows that have nothing in them.
for i = fliplr(1:r)
    if sum(a(i,:)) == 0
        a(i,:) = [];
    else
        break;
    end
end
% Starts from right-most column and removes columns with nothing in them.
for i = fliplr(1:c)
    if sum(a(:,i)) == 0
        a(:,i) = [];
    else
        break;
    end
end
% Starts at top row, counts number of empty rows until it gets to a
% non-empty row. These cannot be removed immediately or it will screw up
% the for-loop.
top_count = 0;
for i = 1:r
    if sum(a(i,:)) == 0
        top_count = top_count + 1;
    else
        break;
    end
end
% Starts at left-most column, counts number of empty columns until it gets
% to a non-empty column. These cannot be removed immediately or it will
% screw up the for-loop.
left_count = 0;
for i = 1:c
    if sum(a(:,i)) == 0
        left_count = left_count + 1;
    else
        break;
    end
end
% Now left-most empty columns and top empty rows can be safely removed.
if top_count > 0
    a(1:top_count,:) = [];
end
if left_count > 0
    a(:,1:left_count) = [];
end
More Answers (2)
  Jonathan Sullivan
      
 on 20 Jun 2013
        
      Edited: Jonathan Sullivan
      
 on 20 Jun 2013
  
      It's really simple if you use the functions find and any. See below:
ind1 = find(any(x == 1,2),1);
ind2 = find(any(x == 1,2),1,'last');
ind3 = find(any(x == 1,1),1);
ind4 = find(any(x == 1,1),1,'last');
y = x(ind1:ind2,ind3:ind4);
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


