[Numpy-discussion] Count occurrences in a nested ndarray
josef.pktd@gmai...
josef.pktd@gmai...
Tue Oct 19 20:29:40 CDT 2010
On Tue, Oct 19, 2010 at 9:09 PM, Dewald Pieterse
<dewald.pieterse@gmail.com> wrote:
> Hi All
> I have a nested array created using:
> edges = scipy.misc.pilutil.imfilter(prent,'find_edges')
> edges
> array([[[ 0, 255, 0],
> [ 0, 255, 0],
> [ 0, 255, 0],
> ...,
> [ 0, 255, 0],
> [ 0, 255, 0],
> [ 0, 255, 0]],
> [[ 0, 255, 0],
> [ 0, 0, 0],
> [ 0, 0, 0],
> ...,
> [ 0, 0, 0],
> [ 0, 0, 0],
> [ 0, 255, 0]],
> [[ 0, 255, 0],
> [ 0, 0, 0],
> [ 0, 0, 0],
> ...,
> [ 0, 0, 0],
> [ 0, 0, 0],
> [ 0, 255, 0]],
> ...,
> [[ 0, 255, 0],
> [ 0, 0, 0],
> [ 0, 0, 0],
> ...,
> [ 0, 0, 0],
> [ 0, 0, 0],
> [ 0, 255, 0]],
> [[ 0, 255, 0],
> [ 0, 0, 0],
> [ 0, 0, 0],
> ...,
> [ 0, 0, 0],
> [ 0, 0, 0],
> [ 0, 255, 0]],
> [[ 0, 255, 0],
> [ 0, 255, 0],
> [ 0, 255, 0],
> ...,
> [ 0, 255, 0],
> [ 0, 255, 0],
> [ 0, 255, 0]]], dtype=uint8)
> I want to count the number of occurrences of certain unique elements in the
> array, I know what the elements are that I want to count [0,255,0],
> [255,0,0] and [0,0,255].
> I want to count the number of pixels of a particular color in a picture to
> determine the edge length and calculate areas and such.
> array does not have a array.count() method and trying to count the instances
> using a nested for loop like:
> for xiter in range(xindex):
> for yiter in range(yindex):
> if edges[xiter,yiter,:] == [255,0,0]:
> groenpixelarea = groenpixelarea + 1
> if edges[xiter,yiter,:] == [0,255,0]:
> rooipixelarea = rooipixelarea + 1
> if edges[xiter,yiter,:] == [0,0,255]:
> bloupixelarea = bloupixelarea + 1
> results in:
> 16 for xiter in range(xindex):
> 17 for yiter in range(yindex):
> ---> 18 if edges[xiter,yiter,:].any() == [255,0,0]:
> 19 groenpixelarea = groenpixelarea + 1
> 20 if edges[xiter,yiter,:] == [0,255,0]:
> ValueError: The truth value of an array with more than one element is
> ambiguous. Use a.any() or a.all()
> WARNING: Failure executing file: <analiseerverwerkteprent.py>
>
> What am I doing wrong?
if (edges[xiter,yiter,:] == [255,0,0]).all()
makes element wise comparison and then joins them by all
but you should be able to do this for all pixels at one
(edges == np.array([255,0,0])[None, None,:]).all(-1).sum()
or something like this
For more complex patterns there might be something fast in scipy.ndimage.
Josef
> Thanx
> --
> Dewald Pieterse
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
More information about the NumPy-Discussion
mailing list