Throughtout the presentation, test data will look like this: 01-Photo.tif
Commands on the Fiji menu will look like: [File > Save]
Widefield and Confocal microscopes acquire images in different ways.
Widefield and laser-scanning microscopes acquire images in different ways.
Detectors collect photons and convert them to a voltage
The A/D converter determines the dynamic range of the data
Unless you have good reason not to, always collect data at the highest possible bit depth
32 bit is a special data type called floating point.
TL;DR: pixels can have non-integer values which can be useful in applications like ratiometric imaging.
ImageJ is a java program for image processing and analysis.
Fiji extends this via plugins.
Learn more about Bio-Formats here
01-Photo.tif
and 02-Biological_Image.tif
[Window > Tile]
command is very useful when opening multiple images[Image > Properties]
also allows you to view and set calibrationum
or micron
Images are an array of intensity values. The intensity histogram shows the number (on the y-axis) of each intensity value (on the x-axis) and thus the distribution of intensities
Photos typically have a broad range of intensity values and so the distribution of intensities varies greatly
Fluorescent micrographs will typically have a much more predicatble distribution:
The Black and White points of the histogram dictate the bounds of the display (changing these values alters the brightness and contrast of the image)
The histogram is now stretched and the intensity value of every pixel is effectively doubled which increases the contrast in the image
If we repeat the same manipulation, the maximum intensity value in the image is now outside the bounds of the display scale!
Values falling beyond the new White point are dumped into the top bin of the histogram (IE 256 in an 8-bit image) and information from the image is lost
Be warned: removing information from an image is deemed an unacceptable maniplulation and can constitute academic fraud!
For an excellent (if slightly dated) review of permissible image manipulation see:Rossner & Yamada (2004): "What's in a picture? The temptation of image manipulation"
The best advice is to get it right during acquisition!
02-Biological Image.tif
[Image > Adjust > Brightness & Contrast]
[Process > Enhance Contrast]
to autocontrast[Image > Crop]
: Reduce the canvas size to current area selection[Image > Duplicate]
: Duplicate the selected window/stack or selection[Image > Rename]
: Change the title of the window[Image > Scale]
: Scale the image pixels up or down (calibration is also scaled)02-Biological Image.tif
[Analyze > Measure]
[Analyze > Plot Profile]
The measurements provided are set via [Analyze > Set Measurements...]
except for selection-specific measurements (length, angle, coords)
02-Biological Image.tif
[Analyze > Measure]
The measurements provided are set via [Analyze > Set Measurements...]
except for selection-specific measurements (length, angle, coords)
The ROI manager is used to store and measure selections
02-Biological Image.tif
[Edit > Selection > Add to Manager]
[More > Multi-measure]
[More > Save]
for better data provenance!02-Biological Image.tif
[Image > Properties]
)[Analyze > Tools > Scale Bar]
What Happened to our yellow scale bar?
Open the Original image
Run [Image > Type > RGB Color]
Try adding a scale bar again
More on scale bars here. For another way to approach this, see Overlays
Some file formats (eg. TIF) can store multiple images in one file which are called stacks
When more than one dimension (time, z, channel) is included, the images are still stored in a linear stack so it's critical to know the dimension order (eg, XYCZT, XYZTC etc) so you can navigate the stack correctly.
You will very rarely have to deal with Interleaved stacks because of Hyperstacks which give you independent control of dimensions with additional control bars.
Convert between stack types with the [Image > Hyperstack]
menu
06-MultiChannel.tif
[Image > Hyperstacks > Stack to Hyperstack]
)[Image > Color > Channels Tool]
and change to GreyscaleIn this image, each channel already has an associated Look Up Table (LUT)
Change to Composite mode
[Image > Adjust > Brightness & Contrast]
IMPORTANT! The nav bar still selects the active channel, and that is where measurements / maniplulations are applied!
The infobar text, slider and 1px coloured image border all indicate which channel is selected.
Colour in your images is (almost always) dictated by arbitrary lookup tables
Lookup tables (LUTs) translate an intensity (1-256 for 8 bit) to an RGB display value
Colour in your images is (almost always) dictated by arbitrary lookup tables
Lookup tables (LUTs) translate an intensity (1-256 for 8 bit) to an RGB display value
You can use whatever colours you want (they are arbitrary after all), but the most reliable contrast is greyscale
More info on colour and sensitivity of the human eye here
Additive and Subtractive Colours can be mixed in defined ways
Non 'pure' colours cannot be combined in reliable ways (as they contain a mix of other channels)
BUT! Interpretation is highly context dependent!
~10% of the population have trouble discerning Red and Green. Consider using Green and Magenta instead which still combine to white.
06-MultiChannel.tif
[Image > Hyperstacks > Stack to Hyperstack]
)[Image > Lookup Tables]
, try a few different ones[Image > Color > Channels Tool]
, make sure you're in Color or Composite mode, hit More, select a LUT[Image > Color > Display LUTs]
to see all the LUTs on your version of FijiA couple of useful LUTs:
Applications
Fiji has an odd way of dealing with masks
Run [Process > Binary > Options]
and check Black Background
. Hit OK.
Segmentation is the separation of an image into areas of interest and areas that are not of interest
The end point for most segmentation is a binary mask (false/true, 0/255)
For most applications, intensity-based thresholding works well. This relies on the signal being higher intensity than the background.
We use a Threshold to pick a cutoff.
07-nuclei.tif
[Image > Adjust > Threshold]
Sometimes you will want to automatically set a threshold. Use the dropdown and Auto
button
You can trial all autothresholding methods using [Image > Adjust > Auto Threshold]
and select 'Try All'
Hit 'Apply' to create a mask based on the current Threshold
What can you do with a mask?
Connected component analysis (CCA) is used to identify contiguous objects in a mask
08-nucleiMask.tif
(or use yours from the last step)[Analyze > Analyze Particles]
But...there are at least 3 problems with this:
A quick fix for separating partially-touching roughly circular objects is to use [Process > Binary > Watershed]
before running CCA
Analyze Particles comes with the option to Display Results
[Analyze > Set Measurements]
and one row per objectTo apply measurements to the original image: check Add to Manager
in Analyze Particles, open the original image
, then run [More > Multi Measure]
Don't forget [Analyze > Set Measurements]
to pick parameters
You may want to create an output or display image showing the results of CCA or segmentation. Analyze particles has several useful outputs:
Count masks are very useful in combination with [Image > Look Up Tables > Glasbey]
-style (IE random) LUTs
Another trick is to turn the mask into a composite selection then draw it into the original
08-nucleiMask.tif
[Edit > Selection > Create Selection]
[Edit > Selection > Make Inverse]
. Add it to the ROI manager ('t')original image
[Image > Type > RGB Color]
(remember what happened with the Scale Bar?)[Edit > Draw]
(this will use the current foreground colour and line width)Example visualisation of woundhealing
From the CCI website gallery. Data c/o Daimark Bennett
for movie
From the CCI website gallery. Data c/o Daimark Bennett
Manual analysis (while sometimes necessary) can be laborious, error prone and not provide the provenance required. Batch processing allows the same processing to be run on multiple images.
The built-in [Process > Batch]
menu has lots of useful functions:
We'll use a subset of dataset BBBC008 from the Broad Bioimage Benchmark Collection
BBBC008_partial
Output
For simple file conversion, Convert
is a very useful tool
[Process > Batch > Convert]
For slightly more complex manipulations try using the Macro
interface
[Process > Batch > Macro]
Scale
and the macro box will populaterun("Red");
You should see an output folder containing small red-coloured nuclei
But how to figure out the commands?
The macro recorder will record most plugins and commands from the menu. Run [Plugins > Macros > Record]
then run a command
Pop quiz!
Basic test
//-- Calibrate
run("Properties...", "unit=um pixel_width=0.1 pixel_height=0.1");
//-- Add the scale bar
run("RGB Color");
run("Scale Bar...", "width=10 height=10 font=30 color=Green background=None location=[Lower Left]");
Advanced test
//-- [BONUS 2] Estimate and print the counts
run("Find Maxima...", "noise=10 output=[Point Selection]");
getSelectionCoordinates(xPos,yPos);
print("Image: "+getTitle()+" has "+xPos.length+" objects");
run("Select None");
//-- [BONUS 1] Add the title
run("RGB Color");
setFont("SansSerif", 18, "antialiased");
setColor("red");
drawString(getTitle(), 20, 30);
//-- Calibrate
run("Properties...", "unit=um pixel_width=0.1 pixel_height=0.1");
//-- Add the scale bar
run("RGB Color");
run("Scale Bar...", "width=10 height=10 font=30 color=Green background=None location=[Lower Left]");
Scripting is useful for running the same process multiple times or having a record of how images were processed to get a particular output
Fiji supports many scripting languages including Java, Python, Scala, Ruby, Clojure and Groovy through the script editor which also recognises the macro language from the previous example (which we'll be using)
As an example, we're going to (manually) create a montage from a three channel image, then see what the script looks like
06-MultiChannel.tif
[Plugins > Macros > Record]
[Image > Hyperstacks > Stack to Hyperstack]
)[Image > Color > Channels Tool]
and set the mode to grayscale
[Image > Type > RGB color]
channels
with [Image > Rename]
composite
[Image > Type > RGB color]
merge
with [Image > Rename]
[Image > Stacks > Tools > Concatenate]
and select Channels and merge in the two boxes (see right)[Image > Stacks > Make Montage]
change the border width to 3 then hit OKGot it? Have a look at the Macro Recorder and see if you can see the commands you ran
Open the script editor with [Plugins > New > Script]
and copy in the following code:
//-- Record the filename
imageName=getTitle();
print("Processing: "+imageName);
//-- Display the stack in greyscale, create an RGB version, rename
Stack.setDisplayMode("grayscale");
run("RGB Color");
rename("channels");
//-- Select the original image
selectWindow(imageName);
//-- Display the stack in composite, create an RGB version, rename
Stack.setDisplayMode("composite");
run("RGB Color");
rename("merge");
//-- Close the original
close(imageName);
//-- Put the two RGB images together
run("Concatenate...", " title=newStack open image1=channels image2=merge");
//-- Create a montage
run("Make Montage...", "columns=4 rows=1 scale=0.50 border=3");
//-- Close the stack (from concatenation)
close(newStack);
Open the file again and hit Run
Comments, variables, print, active window
This script operates on an open image but it's easily converted to a batch processing script using the built in templates:
The full script is here. I added these lines at the top and bottom:
open(input + File.separator + file);
saveAs("png", output + File.separator + replace(file, suffix, ".png"));
close("*");
If you're interested in a scripting workshop, let me know! We can put one together in the near future.
In the meantime:
Adapted from a slide by Fabrice Cordelieres
Colocalisation is highly dependent upon resolution! Example:
Same idea goes for cells. Keep in mind your imaging resolution!
We will walk through using JaCoP (Just Another CoLocalisation Plugin) to look at Pearson's and Manders' analysis
If you're doing colocalisation analysis at all, I highly recommend reading the companion paper https://doi.org/10.1111/j.1365-2818.2006.01706.x
Pearson's Correlation Coefficient
Figure from https://doi.org/10.1111/j.1365-2818.2006.01706.x
JaCoP
[Plugins > Install Plugin]
, point to the jar file11-colocA.tif
and 12-colocB.tif
[Plugins > JaCoP]
, uncheck everything except Pearsons, select the same image for both channels13
and 14
Manders' Overlap Coefficient
11
, 12
,13
and 14
)[Plugins > JaCoP]
, check both Pearsons and Manders[Process > Noise > Add Noise]
or blur your images [Process > Filters > Gaussian Blur]
and see how that affects the coefficientsLife exists in the fourth dimension. Tracking allows you to correlate spatial and temporal properties.
Most partcles look the same! Without any way to identify them, tracking is probabilistic.
Tracking has two parts: Feature Identification and Feature Linking
For every frame, features are detected, typically using a Gaussian-based method (eg. Laplacian of Gaussian: LoG)
Spots can be localised to sub-pixel resolution!
Without sub-pixel localisation, the precision of detection is limited to whole pixel values.
Feature linkage
For each feature, all possible links in the next frame are calculated. This includes the spot disappearing completely.
A 'cost matrix' is formed to compare the 'cost' of each linkage. This is globally optimised to calculate the lowest cost for all linkages.
In the simplest form, a cost matrix will usually consider distance. Many other parameters can be used such as:
Which can allow for a more accurate linkage especially in crowded or low S/N environments
Open 10-tracks.tif
Hit the arrow to play the movie. Right Click on the arrow to set playback speed
If you're interested in how the dataset was made see this snippet
Run [Plugins > Tracking > Trackmate]
Generally your aim should be to provide the minimum threshold that removes all noise. Slide the navigation bar, then hit Preview to check out a few other timepoints.
Hit next, accepting defaults until you reach 'Set Filters on Spots'
Linking Max Distance
Sets a 'search radius' for linkage
Gap-closing Max Frame Gap
Allows linkages to be found in non-adjacent frames
Gap-closing Max Distance
Limits search radius in non-adjacent frames
Common outputs from Trackmate: (1) Tracking data
Common outputs from Trackmate: (2) Movies!
You may have to adjust the display options to get the tracks drawing the way you want (try "Local Backwards")
While simple, Tracking is not to be taken on lightly!
Increasing resolution (via higher NA lenses) almost always leads to a reduced field
Often you will want both!
We can achieve this with tile scanning (IE. imaging multiple adjacent fields)
Stitching is the method used to put them back together again
Images acquired as adjacent frames (zero overlap)
Stitching_noOverlap.zip
. Unzip to the desktop.[Plugins > Stitching > Grid/Collection Stitching]
{i}
zero pad with more i
- noOverlap_{iii}.tifWhy do the images not line up?
Run [Plugins > Stitching > Grid/Collection Stitching]
again
Check the settings are as before but add "compute overlap" and hit OK
Stitching_Overlap.zip
. Unzip to the desktop.[Plugins > Stitching > Grid/Collection Stitching]
againTwo things to remember when using Grid/Collection Stitching:
The most important point is to know your data!
Thank you for your attention!
We will send you a survey for feedback; please take 2 minutes to answer, it helps us a lot!