Last active
May 4, 2023 11:06
-
-
Save lacan/45f865b5a38d7c3a96a7cd8b25923407 to your computer and use it in GitHub Desktop.
[1D Full Width At Half Maximum] This computes the Full Width at Half Maximum FWHM in an image for anz line profile drawn on the image and added to the ROI manager #fiji #imageJ #BIOP #FWHM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Calculate 1D Full Width at half Maximum of a single line or a series of lines added to the ROI Manager | |
* Created by Olivier Burri and Romain Guiet, BioImaging & Optics Platform (BIOP) | |
* Last Update: 2020.10.21 | |
* | |
* Due to the simple nature of this code, no copyright applies | |
* | |
* Installation | |
* ------------ | |
* From within Fiji Please use "Plugins > Macros > Install" and select this file | |
* | |
* Use | |
* --- | |
* Open an image and draw a line ROI across a feature for which you would like to calculcate the FWHM | |
* Press F2 to run the process. | |
*/ | |
macro "Get FWHM [F2]" { | |
nR = roiManager("count"); | |
image_name = getTitle(); | |
if (selectionType() > 0 || nR > 0) { | |
if (nR > 0 ) { | |
for (i = 0; i < nR; i++) { | |
selectImage(image_name); | |
roiManager("select", i); | |
doFWHM(); | |
} | |
} else { | |
doFWHM(); | |
} | |
} else showMessage("Please draw a line."); | |
// Companion function to make the math for FWHM | |
function doFWHM(){ | |
// Gather useful variables for final output. Title and Calibration | |
image_name = getTitle(); | |
getVoxelSize( voxel_width, voxel_height, voxel_depth, voxel_unit ); | |
// In case the ROI has a name, it is useful to add it to the results table | |
roi_name = Roi.getName; | |
// This line actually gets the 1D line profile of the selection. Note that if you have set a "Line Tickness" | |
// this one is also taken into account to provide an average value along the thickness of the line. | |
y = getProfile(); | |
// Produce the X coordinates, but uncalibrated | |
x = Array.getSequence( lengthOf(y) ); | |
// Use the Built-in Gaussian model from the ImageJ Curve Fitter (Gaussian with offset) | |
Fit.doFit("Gaussian", x, y); | |
// Display the plot for our ROI | |
Fit.plot; | |
rename( "FWHM "+roi_name ); | |
// Fit parameters as follows: y = a + (b - a) exp( -(x - c^2)/(2*d^2) ) | |
d = Fit.p(3); // parameter d of gaussian, related to the FWHM, see http://fr.wikipedia.org/wiki/Largeur_%C3%A0_mi-hauteur | |
rSquared = Fit.rSquared ; | |
FWHM = (2 * sqrt( 2 * log(2) ) ) * d; | |
nR = nResults; | |
// Prepare an out put in the form of a Results Table | |
setResult( "Label",nR, image_name ); | |
setResult( "ROI", nR, roi_name ); | |
setResult( "FWHM ("+voxel_unit+")", nR, FWHM * voxel_height ); // This step actually calibrates the FWHM | |
setResult( "rSquared",nR,rSquared ); | |
updateResults(); | |
selectWindow("Results"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I've got a -1 index array error with the
nResults-1
indices in line 67 and 68.