How to roll a numpy 2D array to create grey level co-occurrence matrices, calculate dissimilarity

2016-12-16 Thread Matteo
I am very new to GLCM.

I have some 1D array I would like to calculate dissimilarity in the 
vertical direction, so I am trying to trick scikit-image by converting my 
1D array into 2D.

Say I have an 16x5 2D array. I make 5 copies of it to get a 16x5 array. I 
want to pass rows 0-4, then rows 5-9 and so on to run greycomatrix, by just 
lookign at the vertical direction,  append to output, and ultimately 
calculate dissimilarity.

Example array:

x =np.array([7, 2, 0, 8, 8, 3, 2, 2, 0, 5, 3, 3, 4, 8, 7, 0])
w=5
s = np.array([x,]*w,dtype=np.uint8).transpose()


array([
 [7, 7, 7, 7, 7],
 [2, 2, 2, 2, 2],
 [0, 0, 0, 0, 0],
 [8, 8, 8, 8, 8],
 [8, 8, 8, 8, 8],
 [3, 3, 3, 3, 3],
 [2, 2, 2, 2, 2],
 [2, 2, 2, 2, 2],
 [0, 0, 0, 0, 0],
 [5, 5, 5, 5, 5],
 [3, 3, 3, 3, 3],
 [3, 3, 3, 3, 3],
 [4, 4, 4, 4, 4],
 [8, 8, 8, 8, 8],
 [7, 7, 7, 7, 7],
 [0, 0, 0, 0, 0]], dtype=uint8)


Below I test rolling:


test = np.roll(s[:, :], -5)
test

array([[2, 2, 2, 2, 2],
   [0, 0, 0, 0, 0],
   [8, 8, 8, 8, 8],
   [8, 8, 8, 8, 8],
   [3, 3, 3, 3, 3],
   [2, 2, 2, 2, 2],
   [2, 2, 2, 2, 2],
   [0, 0, 0, 0, 0],
   [5, 5, 5, 5, 5],
   [3, 3, 3, 3, 3],
   [3, 3, 3, 3, 3],
   [4, 4, 4, 4, 4],
   [8, 8, 8, 8, 8],
   [7, 7, 7, 7, 7],
   [0, 0, 0, 0, 0],
   [7, 7, 7, 7, 7]], dtype=uint8)



Now I roll and pass top 5 rows to greycomatrix:


levels = 9# this rolls the 2D array up one row at a time, each time 
calculating GLCM on the top 5x5 elements
out = []
counter = 0
while counter < np.shape(s)[0]:
 s = np.roll(s[:, :], -5)
 glcm = greycomatrix(s[:5,:], [1], [np.pi/2], levels = levels, symmetric = 
True, normed = True)
 out.append(glcm)
 counter +=1 


  
But unfortunately output is a 5D array:


print np.shape(out)
(16, 9, 9, 1, 1)



I tried to recast into a 4D array to pass to greycoprops in different ways, but 
unsuccessfully.


With: 

out1 = np.array(out).reshape((16, 9, 9, 1)) 
np.shape(out1)
(16, 9, 9, 1)

diss = greycoprops(out1, 'dissimilarity')


I get this error:


---
AssertionError Traceback (most recent call last)
 in ()
> 1 diss = greycoprops(out1, 'dissimilarity')
 2 diss

/Users/matteoniccoli/anaconda2/lib/python2.7/site-packages/skimage/feature/
texture.pyc in greycoprops(P, prop)
 187 
 188 (num_level, num_level2, num_dist, num_angle) = P.shape
--> 189 assert num_level == num_level2
 190 assert num_dist > 0
 191 assert num_angle > 0

AssertionError:


It may be that I do not really understand the shape of the output, and the 
requirements of greycoprops.


print np.shape(np.array(out))
print np.shape(np.array(out[0][:][:][:][:]))
print np.shape(np.array(out[:][0][:][:][:]))
print np.shape(np.array(out[:][:][0][:][:]))
print np.shape(np.array(out[:][:][:][0][:]))
print np.shape(np.array(out[:][:][:][:][0]))


(16, 9, 9, 1, 1)
(9, 9, 1, 1)
(9, 9, 1, 1)
(9, 9, 1, 1)
(9, 9, 1, 1)
(9, 9, 1, 1)


Can anybody suggest a way to make this work?


Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"scikit-image" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to scikit-image+unsubscr...@googlegroups.com.
To post to this group, send an email to scikit-image@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/scikit-image/cedb722f-3a56-4333-bced-1bc25155693b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Is it possible to save contours to spreadsheet

2018-04-19 Thread Matteo
I am using a modified version of this scikit-image demo 
<http://scikit-image.org/docs/dev/auto_examples/edges/plot_contours.html> to 
create contours from the edges resulting from watershed segmentation of an 
image. I would like to save the resulting contours in a spreadsheet, not an 
image, to take into a GIS package (although I do save image for another 
application).
I am trying to use Pandas DataFrames as described in this StackOverflow 
question:
https://stackoverflow.com/questions/49930616/how-to-store-scikit-image-contours-in-a-pandas-dataframe-with-a-single-vertex-an
But I wonder if there's an easier way I overlooked.
Thanks,
Matteo

-- 
You received this message because you are subscribed to the Google Groups 
"scikit-image" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to scikit-image+unsubscr...@googlegroups.com.
To post to this group, send an email to scikit-image@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/scikit-image/674b51dc-b8b9-48d5-8f5e-e62f41e919cd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.