Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.



Re: Edges between pixels
Posted:
Mar 13, 2013 4:14 PM


"Lee ZY" <kk_yin@hotmail.com> wrote in message <khppb1$5dc$1@newscl01ah.mathworks.com>... > Hi, > I would like to generate the edges between all the pixels in an image. For instance, a 3*3 image (pixel 1 to 9), the edges = [1 2;1 3; 1 4; 1 5; 1 6; 1 7; 1 8; 1 9; 2 3; 2 4; 2 5;..;2 9;..;9 7; 9 8]. > > One way i could think of is by replicating the values as follows, > n=3 ; > x=(1:3)'; > r=repmat(x,1,n)'; > r=r(:) > > x2=[1:3]; > r2=repmat(x2,1,n)' > edges=[r,r2] > > and the output: > edges = > > 1 1 > 1 2 > 1 3 > 1 4 > 1 5 > 1 6 > 1 7 > 1 8 > 1 9 > 2 1 > 2 2 > 2 3 > 2 4 > 2 5 > . > . > 8 9 > 9 1 > 9 2 > 9 3 > 9 4 > 9 5 > 9 6 > 9 7 > 9 8 > 9 9 > > However when i tried on a relatively big image, i got this error, > ??? Maximum variable size allowed by the program is exceeded. > > Wondering if there is a more effective way of generating the edges. Thanks in advance!
I would seriously question why you are doing this because I have a feeling you will find that MATLAB has MANY built in functions to do things that would generally require you to know the edges.
That being said, I would advise you loop through each pixel in your image and get the edges for that one pixel instead of making a large list. For large images, you can very easily get lists with millions and millions of elements, which is not something you usually want.
Also, each pixel can only have 4 edges, and 8 surrounding pixels, but never 9 so keep that in mind.



