Ich muss die Bilder verarbeiten, die ich mit dem Mikroskop mit einem vertikalen Binning erfasse, um die Abstände zwischen den dunklen/hellen Regionen zu erhalten. Kreisförmiges Bild macht das Binning und subtrahieren Sie ein parabolisches Profil: < /p>
def threshold(image, X0Y0R):
'''
crop the image along the circle of the ocular (step1)
vertical binning of image, and subtract parabolic background (step2),
resulting in sub_binn
X0Y0R is the (X0,Y0,R) tuple, with circle center and radius
returns:
((np.max(sub_binn)-np.min(sub_binn))/2)+np.min(sub_binn) -> sub_binn's avg gray level
image -> the rotated, circle-cropped image
binn -> 1D array vert binning, previous to parabolic subtraction
sub_binn -> 1D array used by image_analisys()
'''
image = rotate(image, tilt, reshape=True)
######## -->> step1
X0,Y0,R = X0Y0R[0],X0Y0R[1],X0Y0R[2]
Y, X = np.ogrid[:image.shape[0], :image.shape[1]]
outer_disk_mask = (X - X0)**2 + (Y - Y0)**2 > R**2
image[outer_disk_mask] = False
######## -->> step2
binn = []
for i in range(len(image[0])):
binn = np.append(binn, np.sum(np.transpose(image)))
binn = binn[np.argwhere(binn>0)]
x_n = np.arange(len(binn))
par = np.polyfit(range(len(binn)), binn, 2)
sub_binn = []
for i in range(len(binn)):
sub_binn = np.append(sub_binn, binn[]-(x_n*par[1]+par[0]*(x_n*x_n)))
return ((np.max(sub_binn)-np.min(sub_binn))/2)+np.min(sub_binn),image, binn, sub_binn
< /code>
Wenn ich jetzt das Ergebnis untersuche: < /p>
image = img.imread('image.png').astype(np.int32)
print(image.shape)
X0,Y0,R = 950,700,550
it=threshold(image,X0Y0R=(X0,Y0,R))
fig,ax=plt.subplots(1,2,figsize=(12,4))
plt.subplot(121)
plt.imshow(it[1], interpolation='none',cmap="gray")
plt.subplot(122)
plt.plot(it[2],color='gray',label='vertical binning')
plt.plot(it[3],color='black',label='after parab subtract')
plt.hlines(y=it[0], color='red',xmin=0,xmax=1000)
print(it[1].shape, 2*R)
plt.legend()
plt.show()
< /code>
Ich sehe, dass die parabolische Anpassung niemals korrekt ist - z. In diesem Fall überschätzt es es:
, da es an verschiedenen Bildern wirkt.>
Subtrahieren Sie den parabolischen Durchschnitt vom Bild (Vignettenentfernung) ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post