Hey David,
There’s nothing built in right now for such a task, but scikit-image is perfect for this type of thing. I’d suggest using a threshold (there are several: Module: filters — skimage v0.18.0 docs (scikit-image.org) and you may need to invert the image first). Then you’ll have lots of dots on the binary image. I would then use ROI Properties to enumerate and characterize the dots ( Measure region properties — skimage v0.18.0 docs (scikit-image.org)). The weighted centroid property is likely what you want. IMO ROI Props are the most powerful thing in scikit-image. At this point you have a few options and will likely need to create an algorithm by hand to compare the ROIs. If the placement is mostly reproducible then you could simply enumerate over the ROIs and grab the ones closest to a known X or Y position (i.e. grabbing the dots along a given row or column) and then do the same for another row/column and then compare the average x or y distance. Or compare the max/min/stdev to get the metric you’re after. The last part is the part you’ll have to think through but thresholding and ROI props should help you immensely.