This algorithm can be used on images where objects have similar size. In case the image contains objects of different size, the rolling-ball algorithm can badly affect your objects.
From left to right, top to bottom: 1: raw image; 2: background corrected with rolling ball of 10px ; 3: rolling ball of 20px ; 4: rolling ball of 50px ; 5: rolling ball of 100px ; 6: rolling ball of 200px
ImageJ macro code
run("Close All");
newImage("Raw image", "8-bit black", 2000, 2000, 1);
rawImg = getTitle();
selectImage(rawImg);
run("Add...", "value=100");
makeOval(243, 228, 30, 30);
setForegroundColor(255, 255, 255);
run("Fill", "slice");
makeOval(330, 327, 72, 72);
run("Fill", "slice");
makeOval(456, 472, 144, 144);
run("Fill", "slice");
makeOval(699, 777, 273, 273);
run("Fill", "slice");
makeOval(1153, 1299, 565, 565);
run("Fill", "slice");
run("Select All");
run("Duplicate...", " ");
dup1 = getTitle();
selectImage(dup1);
rename("Rolling Ball 10");
run("Subtract Background...", "rolling=10");
selectImage(rawImg);
run("Duplicate...", " ");
dup2 = getTitle();
selectImage(dup2);
rename("Rolling Ball 20");
run("Subtract Background...", "rolling=20");
selectImage(rawImg);
run("Duplicate...", " ");
dup3 = getTitle();
selectImage(dup3);
rename("Rolling Ball 50");
run("Subtract Background...", "rolling=50");
selectImage(rawImg);
run("Duplicate...", " ");
dup4 = getTitle();
selectImage(dup4);
rename("Rolling Ball 100");
run("Subtract Background...", "rolling=100");
selectImage(rawImg);
run("Duplicate...", " ");
dup5 = getTitle();
selectImage(dup5);
rename("Rolling Ball 200");
run("Subtract Background...", "rolling=200");
run("Tile");
Another way to remove background of an image is to subtract to this image a blurred version of itself, with a large sigma.
From left to right: 1: raw image ; 2: gaussian blurred version with sigma=500 ; 3: background subtracted image
ImageJ macro code
run("Close All");
newImage("Raw image 8-bit", "8-bit black", 2000, 2000, 1);
rawImg = getTitle();
selectImage(rawImg);
run("Add...", "value=100");
makeOval(243, 228, 30, 30);
setForegroundColor(255, 255, 255);
run("Fill", "slice");
makeOval(330, 327, 72, 72);
run("Fill", "slice");
makeOval(456, 472, 144, 144);
run("Fill", "slice");
makeOval(699, 777, 273, 273);
run("Fill", "slice");
makeOval(1153, 1299, 565, 565);
run("Fill", "slice");
run("Select All");
run("Duplicate...", " ");
rename("Raw image");
dup32raw = getTitle();
selectImage(dup32raw);
run("32-bit");
run("Duplicate...", " ");
rename("Gaussian blured");
dup32blur = getTitle();
selectImage(dup32blur);
run("32-bit");
run("Gaussian Blur...", "sigma=500");
imageCalculator("Subtract create", dup32raw, dup32blur);
result = getTitle();
rename("Background subtracted");
selectImage(rawImg);
close();
run("Tile");