My apologies. It is clear now that the issue was not in the idea for the implementation, or the code, but clearly my incomplete understanding of graycomatrix and graycoprops. Since I am sliding along a 16x5 array, with 9 levels, I should get a 16x9x9x1x1 5D array. Now that I understand this better, it occurs to me that I just need to slide over this array also, passing each of the 16 9x9x1x1 4D partial array to greycopros, to get 16 values of dissimilarity. Does that make sense?
diss = [] for i in np.arange(np.shape(out)[0]): ds = greycoprops(out[i], 'dissimilarity') diss.append(ds) diss will give: [array([[ 3.75]]), array([[ 3.5]]), array([[ 1.5]]), array([[ 2.]]), array([[ 2.]]), array([[ 2.25]]), array([[ 2.25]]), array([[ 2.]]), array([[ 1.75]]), array([[ 1.5]]), array([[ 3.25]]), array([[ 4.75]]), array([[ 5.]]), array([[ 5.25]]), array([[ 5.5]]), array([[ 3.75]])] Thank you On Friday, December 16, 2016 at 11:15:00 AM UTC-7, Matteo wrote: > > Sorry, below I meant to write:"Say I have an 16x1 1D array. I make 5 > copies of it to get a 16x5 2D array..." > > On Friday, December 16, 2016 at 11:13:20 AM UTC-7, Matteo wrote: >> >> 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) >> <ipython-input-15-a88f05b0e3e2> in <module>() >> ----> 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/1c537ab4-1373-4627-8f56-973d179482e4%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.