This has been asked before so apologies for asking again, I have followed the suggested solutions provided in these answers and this, but I'cant seem to remove my error.
I've tried changing object type for the slope list and vals range but still I get the error. I ducked into the polynomial.py script but I don't understand the line of code listed in the error.
Overall I'm trying to separate an 8-bit grayscale image into individual arrays based on the grayscale values (0-255), generate a line of best fit for each value, then use each of the slopes from the lines of best fit to get an overall line of best fit for the image.
Here's my code:
image = Image.open('subfram-002.tif')
im_array = np.array(image)
#print(im_array)
####
multivec = []
####
# For loop to calculate the line of best fit for each value in the sub-frame array
arrays = [im_array] # Calling our array
vals = list(range(255)) # Range of values in array
slopes = [] # List to append each of the slopes of the line of best fit
skip = False
for i in arrays:
for j in vals:
index = list(zip(*np.where (j == i))) # Creating a list of the position indices for each value in the array
in_array = np.array(index) # Updating list to array, not needed will remove
a = list([int(i[0]) for i in index]) # Getting the first element of each tuple in the index list
b = list([int(i[1]) for i in index]) # Getting the second element of each tuple in the index list
# Add exception for vectors that are not generated due to values in 0-255 not being present
if len(a) == 0:
skip = True
elif len(b) == 0:
skip = True
else:
vec = list((np.poly1d(np.polyfit(a,b,1))).c) # Calculating list of best (1st order polynomial, consider increasing the order?)
slope = float(vec[0]) # Getting the 1st coefficient of the line of best fit, which is the slope
slopes.append(slope) # appending each slope to a list of slopes
print(type(slopes), type(vals))
slopes += ['0'] * (255 - len(slopes)) # Padding slope list in case less then 255 slopes generated
print(len(vals))
# Take in all of the slopes from each vector that is determined for each value
vec1 = (np.poly1d(np.polyfit(slopes,vals,1))).c # Determining the overall line of best fit for the array, using the slope of the vector as the comparator between sub-frames
Here's my error:
<class 'list'> <class 'list'>
255
Traceback (most recent call last):
File "aryslop.py", line 53, in <module>
vec1 = (np.poly1d(np.polyfit(slopes1,vals1,1))).c # Determining the overall line of best fit for the array, using the slope of the vector as the comparator between sub-frames
File "/home/vanoccupanther/anaconda3/lib/python3.5/site-packages/numpy/lib/polynomial.py", line 549, in polyfit
x = NX.asarray(x) + 0.0
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')