Regular Spots quantification

Good morning,
I should quantifier each spot of the slides acquisition (see attachment). Does anybody know if there is an automatic way to do that by IMAGEJ or another software?
Thank you all and best regards.

How many spots do you count on that image?

Dear iarganda, there are 96 spots and I need to quantify all. By “measure” function is possible on a point or little selection. I need to do that automaticatly to all 96 spots maybe creating a grid or something like that.

I see. You can try using the Trainable Weka Segmentation plugin. I got what it looks to me like reasonable preliminary results:

I have some doubts about the image format though. When I try to open it in Fiji, it complains because it seems to be a weird TIFF (neither 8 nor 16 nor 32-bit). If I open the image using bio-formats I get a 2-channel image. So I finally opened it in Gimp and save it as an 8-bit PNG. What is the original format?

What also worked for me is using File > Import > Image…, which uses SCIFIO to open the file.
I paste a png version of the first channel here:

I suggest you use a script to create a grid of circular selections that you can then measure using the Multi Measure command of the ROI Manager.

Here is an example in Groovy that create those selection after you created a rectangular selection (just copy and paste into the Script Editor, select Language > Groovy, and click Run):

// @ImagePlus imp
// @int(label="Number of Columns") nColumns
// @int(label="Number of Rows") nRows
// @int(label="Diameter of Circle Selections") diameter

import ij.IJ
import ij.plugin.frame.RoiManager
import ij.gui.OvalRoi

roi = imp.getRoi()
if (roi == null) {
    IJ.error("No ROI found. Please create a selection.")

rect = roi.getBounds()
offsetX = rect.x
offsetY = rect.y
stepX = rect.width/(nColumns-1)
stepY = rect.height/(nRows-1)


rm = RoiManager.getRoiManager()

for (x = offsetX; x <= offsetX + rect.width + 1; x += stepX) {
    for (y = offsetY; y <= offsetY + rect.height + 1; y += stepY) {
        println("x: " + x + " y: " + y)
        rm.addRoi(new OvalRoi(x-diameter/2, y-diameter/2, diameter, diameter))

rm.runCommand(imp,"Show All")

Here is how it looks when choosing 12 columns, 8 rows, and a diameter of 10 pixels:

I once wrote a more elaborate example in Javascript to quantify spots on a protein array with irregular spacing, using some specified positive controls at the corners to automatically detect the grid position. I’ve created a gist for it, feel free to use it for inspiration.


I see, so you assume the spot is there even if it is not really visible. Is that what you wanted, @Fabio_Galeotti?

Yes. It is. It’s our goal.