This will be a bit of a long question in hopes that someone can give advice on the best way to do what I'm trying to do.
I do SPOT peptide arrays to measure peptide-protein binding, which effectively consist of a 2D grid of circular spots, and my output is infrared fluorescent signal in a grayscale image.
Binding strength is logarithmically proportional to spot brightness, and I measure brightness by densitometry after subtracting background, which I infer from the signal in the 'valleys' between the spots. So far, I'm doing this in GelAnalyzer 19.1, a standalone program which is designed for western blots, but which works well for this application - essentially, I call each row of the array a 'lane', and each spot is a 'band'. Background is defined using the 'rolling ball method', which draws lines under the peaks, and then the signal is declared as equal to the area under the peak curve.
Here's an example showing the plot for one 'lane', shown at the bottom of this post. The background varies across the array, which is on a cellulose substrate. The blue areas are the integrated curves that the densitometric values comes from, which are used as spot signal intensities.
The thing is, I can't make accurate calls about which spots are 'positive' by only using a cutoff for the densitometric values, because this leads to some combination of false positives or false negatives. It's because some of the spots are what we call 'smears', in that they don't look like neat bright circles, but are more just a hyperintensity of background on that square that gets mistakenly considered as a peak.
Right now, I'm manually going through and making calls on which spots are actually bright spots above background ('positive') and which are just smears that aren't defined circles like they should be ('negative'), but this is obviously not ideal. Is there such a thing as an image processing tool, either as a program or as a script I can run, that will let me analyze a grid of spots to make calls on which have bright sharp circles and which do not? A measure of circle-ness, as it were.
Tagging this excellent answer with some Python options since that was a category tag. See here, and here, plus maybe look into Napari and BioImage Model Zoo/Bioimage.io. Along the lines of Napari, here will probably help give a good sense of what it can do. (Plus, here.) And I know Bioimage.io has a Python library, see here and here.