2017-10-27  Ramon Casero  <rcasero@marcel>

	* Update build to Matlab2016b and new sourceforge paths for ITK
	and Boost.

2017-04-04  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/RegistrationToolbox/transfdiff.m
	* Add matlab/RegistrationToolbox/transfdiffreg.m: Functions
	implementing the Transformation Diffusion Reconstruction from
	Casero2017 MIA paper.

2017-03-06  Ramn Casero  <rcasero@marcel>

	* Remove python/, I've created a new github project called "pysto"
	to put python code there. Gerardus already has too much misc code.

	* Add python/requirements.txt: pip dependencies of the python
	library.

	* Add python/imgproc/matchHist.py (1.0.0): Modify image
	intensities to match the histogram of a reference image.

	* Add python/ for python functions.

2017-03-01  Ramn Casero  <rcasero@gmail.com>

	* shell-script/pre-commit-git-diff-docx.sh: (0.3.0) Fix
	bug. dtdoering's patch avoids trying to create the .md file with
	pandoc if the .docx has been deleted. It also deletes the .md file
	if the .docx file has been deleted. But the delete is not
	commited. Now we add the deleted .md file to
	.commit-amend-markdown so that the post-commit hook commits the
	delete. Also, only consider .docx to denote a Word file if it's at
	the end of the file's name.

2017-01-09  Darryl McClymont  <darryl.mcclymont@gmail.com>

	new file:   matlab/FileFormatToolbox/scimat_tformarray.m
	* this function will transform any 3D array in scimat format to another space, defined
	by the new rotation matrix, min, etc. Tested with preclinical data.	
	
	modified:   matlab/FileFormatToolbox/scimat_varian2scimat.m
	* Sorry I trampled on your edits to this function Nick, but I think we did the same thing, 
	and my version works with the non-zero slice gap. 

	Minor:
		modified:   matlab/DiffusionMRIToolbox/fit_DT.m
		modified:   matlab/DiffusionMRIToolbox/quiver_image.m
		modified:   matlab/DiffusionMRIToolbox/view_tensors.m
		modified:   matlab/DiffusionMRIToolbox/weighted_linear_fit.m


2016-12-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/RegistrationToolbox/regmatchedfilt.m (0.4.0): Fix
	bug. The alignment was not correct if IMF, IMM didn't have the
	same pixel size and offset. Now the function takes into account
	pixel size and offset if the input images are in scimat format.

2016-12-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_preprocessing.m (0.5.1): Fix
	bug. For histogram reference, the image was not being converted to
	grayscale when the user requested it.

	* matlab/CardiacToolbox/histology_preprocessing.m (0.5.0): Add
	syntax for reference histogram.

2016-12-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_crop.m (0.5.2): When input is list
	of files, now it's possible to select several crops at the same
	time. This saves time, as every file only needs to be loaded once
	for all crops.

2016-12-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_crop.m (0.5.1): Add info to the
	help header about input argument DS.

2016-12-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_crop.m (0.5.0): Add new syntax so
	that a 3D image volume can be provided as a list of files, each
	with a 2D image.

2016-12-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m (0.5.11):
	* matlab/FileFormatToolbox/scimat_save.m (0.6.8): Fix
	bug. Save/read XPosition, YPosition fields to/from tiff
	files. This way we can save/read the offset info of the image.

2016-11-28  Nicolas Basty  <nicolas.basty@eng.ox.ac.uk>

	* matlab/FileFormatToolbox/scimat_varian2scimat.m (0.1.2)
        Can now also convert acquisitions where the data is not acquired in stacks of parallel 2D images but rather
        in spokes spanning different values of psi, stored in an array. In my case this is for LA views.
	
	*matlab/FileFormatToolbox/scimat_slice_GUI.m
	Changing the view and axis
	
2016-11-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/transformix_pts.m (0.1.2): Fix bug. Minus
	sign of output x-coordinates was being ignored.

2016-11-17  Darryl McClymont  <darryl.mcclymont@gmail.com>

	*  matlab/FileFormatToolbox/scimat_slice_GUI.m (0.1.1)
	Fix bug. The GUI uses the matlab function surface, which wants corner
	coordinates. It was being given pixel centres, so the whole image was 
	off by half a pixel.

	* matlab/FileFormatToolbox/scimat_varian2scimat.m (0.1.1)
	Fix bug when gap between slices is not zero - it is now added to the 
	slice thickness, which is obviously not the same thing as having thicker
	slices, but at least the slice centres are in the right place now.

2016-11-14  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Minor changes and some new functions for processing diffusion images:

	modified:   matlab/DiffusionMRIToolbox/weighted_linear_fit.m
	modified:   matlab/DiffusionMRIToolbox/wild_bootstrapping_DTI.m
	modified:   matlab/FiltersToolbox/forward_TV.m
	modified:   matlab/DiffusionMRIToolbox/quiver_image.m
	modified:   matlab/DiffusionMRIToolbox/fit_DKI_model.m
	modified:   matlab/DiffusionMRIToolbox/fit_DT.m
	modified:   matlab/DiffusionMRIToolbox/fit_biexponential_tensor.m
	new file:   matlab/DiffusionMRIToolbox/fit_triexponential_tensor.m
	new file:   matlab/DiffusionMRIToolbox/plot_diffusion_profiles.m
	new file:   matlab/CardiacToolbox/mask2LV_cavity.m
	new file:   matlab/DiffusionMRIToolbox/dt2params.m

	* Added some tools for kurtosis tensor processing:

	new file:   matlab/DiffusionMRIToolbox/rotate_tensor.m
	new file:   matlab/DiffusionMRIToolbox/kurtosis_3333_to_66.m
	new file:   matlab/DiffusionMRIToolbox/kurtosis_66_to_3333.m
	new file:   matlab/DiffusionMRIToolbox/kurtosis_ijkl_to_rc.m
	new file:   matlab/DiffusionMRIToolbox/tensor2vector.m
	new file:   matlab/DiffusionMRIToolbox/vector2tensor.m

2016-11-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_compose_afftransf.m (0.2.7): Fix
	bug. Make sure that tfc.NumberOfParameters is correct at the
	output.

2016-10-31  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/nuimagesc.m (0.1.0): NUIMAGESC
	imagesc() with non-uniform pixel spacing.

2016-10-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_fitgeotrans.m (0.2.0): Add input
	argument alpha, to allow partial deformations of the image,
	following Alexa 2002.

	* Add matlab/ElastixToolbox/elastix_fitgeotrans.m (0.1.0):
	Transformix struct for image transformation obtained from matching
	two sets of landmarks.

2016-10-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix.m (0.5.5): Fix bug. When regParam
	was given as a filename, the filename was replaced by a struct
	before making a copy of the filename.

2016-10-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/im_resize.m (0.1.0): IM_RESIZE
	Resize a list of image files (.tif, .png, etc) with ImageMagick
	convert, directly file to file.

2016-10-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.10) Fix bug. When
	.tif images have a thumbnail, imfinfo() produces a 2-vector of
	structs, one for the image and one for the thumbnail. Now we
	discard the thumbnail metadata.

2016-10-21  Nicolas Basty  <nicolas.basty@eng.ox.ac.uk>

	* matlab\FileFormatToolbox\scimat_varian2scimat.m: This function
	converts data from varian scanners, which follow an odd
	convention, into scimat format. Either stacks of 2D images or
	single 3D images. For example to visualise 2D data using the
	scimat_slice_GUI.

2016-10-11  Nicolas Basty  <nicolas.basty@eng.ox.ac.uk>

	* matlab\FileFormatToolbox\scimat_im2scimat.m: Edited to handle 2D
	slices in 3D space


2016-10-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m (0.4.6): Simplify code to
	generate the objective function terms.

2016-10-08  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.5.1):
	Fix bug. Edge length constraints: we can ignore edges where both
	vertices are fixed. But if one or two vertices are free, we have
	to write the constraint accordingly (for free vertices we use
	variable names, and for fixed vertices we use the numerical value
	of their coordinates).

2016-10-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.5.0):
	New input argument "lmax": Maximum length allowed to any edge of
	the output parametrization. This can avoid triangles moving to the
	opposite side of the sphere to become positive.

2016-10-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/sphtri_foldcc.m (0.3.0): New input
	isManuallyGood, to manually label vertices as good, even if they
	belong to a bad triangle.

	* matlab/ManifoldToolbox/sphtri_foldcc.m (0.2.1): Fix
	bug. Function broke if there were no good vertices within any
	fold.

2016-10-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/sphtri_foldcc.m (0.2.0): Fix bug. The
	function was not producing the right lists of vertices. Now the
	code is simpler and seems to work well.

2016-10-04  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/sphtri_foldcc.m (0.1.0):
	SPHTRI_FOLDCC Find connected components of groups of vertices
	causing a fold on the sphere.

2016-09-27  Ramon Casero  <rcasero@gmail.com>

	* Delete matlab/ManifoldToolbox/tri_sphparam.m: Move to
	private-gerardus. Paper not published yet, and function needs
	substantial rewriting.

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.4.0):
	Change the way we compute the box that bounds where the vertices
	can move to. Now we compute the convex hull of the component we
	are unfolding, and take into account whether it intersects any of
	the Cartesian axes. If it does, the box extends to the radius of
	the sphere. This is to avoid chopping off part of the sphere where
	the vertices could move to.

	* Add matlab/ThirdPartyToolbox/TriangleRayIntersectionToolbox:
	* matlab/add_gerardus_paths.m (0.3.8):

	- Toolbox to compute intersections with triangulations. We use it
	in the new box computation in tri_ccqp_smacof_nofold_sph_pip.m. By
	Jaroslaw Tuszynski, 29 Sep 2011 (Updated 15 Jun 2016)

	http://uk.mathworks.com/matlabcentral/fileexchange/33073-triangle-ray-intersection

2016-09-26  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/cons_smacof_pip.m (0.4.5): Don't use the same file
	for initial and computed solutions. Delete model and solution
	files after being used, to avoid cluttering /tmp. Fix bug with the
	format string when writing the initial solution to file. Close
	file after writing it.

	* ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.3.1): Check
	that there are no NaN values in input Y. Reduce search space for
	solution to box that encloses the points. Correct the index of a
	group of constraints (it had no practical effect, but it was
	jumping one number).

2016-09-22  Ramon Casero  <rcasero@gmail.com>

	* tri_sphparam.m (0.5.1): Fix bug. Bad concatenation of vectors.

2016-09-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.3.0):
	Improve the constraint that says that the points have to be within
	a box that encloses the sphere. Now we form the box enclosing the
	fixed vertices of the component.

	The reason for this change is that a negative triangle can flip by
	sending a vertex to a far away point on the sphere. With a smaller
	box, we prevent this from happening. A smaller box of possible
	solutions also accelerates the solver.

	* matlab/PointsToolbox/cons_smacof_pip.m (0.4.4): Change expected
	names for SCIP binary. We remove the version number so that we
	don't need to be changing it every time they release a new
	version.

2016-09-19  Ramon Casero  <rcasero@gmail.com>

	* .gitignore: Add extensions of Windows library and directory for
	Boost libraries.

2016-09-14  Ramon Casero  <rcasero@gmail.com>

	* .gitignore: Add list of files that are automatically generated
	by the CMake build system, so git shouldn't track them.

	* matlab/FiltersToolbox/scimat_resize3.m (0.1.1): Specify that the
	inputs SZ and SIGMA are in [row, col, slice] order, so that they
	agree with the SCIMAT format, and then swap rows and columns
	internally to match the resize3D format.

2016-09-13  Ramon Casero  <rcasero@gmail.com>

	* Update matlab/ThirdPartyToolbox/Iso2meshToolbox to latest version
	* add_gerardus_paths.m: (0.3.7)

	- iso2mesh-1.7.9 for linux64 by Qianqian Fang <q.fang at neu.edu>

	- https://sourceforge.net/projects/iso2mesh/files/iso2mesh/1.7.9%20%28Deviled%20Egg-beta%29/

	* Rename matlab/ThirdPartyToolbox/iso2meshToolbox as
	matlab/ThirdPartyToolbox/Iso2meshToolbox.

	* .gitignore: Some of the directories needed a "/" before their
	name, so that they refer to the directory at the root of gerardus,
	instead of every directory or file with the same name.

2016-09-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m (0.8.0)

	- No longer remove non-manifold vertices. We leave that to an
	external program like meshlab.

	* Add matlab/FiltersToolbox/scimat_resize3.m: (0.1.0)
	* matlab/FiltersToolbox/scimat_downsample.m: (0.3.2)
	* matlab/FileFormatToolbox/scimat_resample.m: (0.1.2)

	- SCIMAT_RESIZE3 Resize a 3D scimat image.

2016-09-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_downsample.m: (0.3.1)
	* matlab/FileFormatToolbox/scimat_resample.m: (0.1.1)

	- Small edits to help header to make them have the format expected
	by update_README.sh.

	* Delete stlread.m, stlwrite.m, license-stlwrite.txt:

	- Redundant with GraphToolbox.

	* Add ThirdPartyToolbox/GraphToolbox:
	* add_gerardus_paths.m: (0.3.6)

	- Add Toolbox Graph, by Gabriel Peyre 26 Jun 2004 (Updated 19 Jul
	2009.

	A toolbox to perform computations on graph. We are particularly
	interested in functions to write/read meshes in .off format to
	interact with Meshlab.

	http://uk.mathworks.com/matlabcentral/fileexchange/5355-toolbox-graph

2016-09-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.8.0)

	- Simplify code removing the attempts at cleaning non-manifold
	vertices. I think the code was buggy, and was producing
	non-manifold meshes. Better clean the meshes up manually with
	meshlab.

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.9)

	- Fix bug. When the scimat struct didn't have the field
	scimat.property, the function crashed when trying to delete
	it. Now it only deletes the field if it exists. I have extended
	this check to fields that are removed in scimat.axis too.

2016-09-06  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/stlwrite.m:

	- Export a variety of inputs (patch, surface) to an STL triangular
	mesh. by Sven 30 Jul 2008 (Updated 30 Mar 2015).

	https://www.mathworks.com/matlabcentral/fileexchange/20922-stlwrite-filename--varargin-

2016-07-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_correct_frame_shifts.m: (0.2.2)

	- Loop to produce output images is now parallel (parfor). It makes
	things faster.

2016-07-21  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_correct_frame_shifts.m: (0.2.2)

	- Put transformation of images into a parfor loop, to make use of
	multiple cores.

	* matlab/CardiacToolbox/blockface_correct_frame_shifts.m: (0.2.1)

	- Delete temp output file created by transformix, so that we don't
	swamp /tmp.

2016-07-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_correct_frame_shifts.m: (0.2.0)

	- Fix bug. Affine transformations are not commutative, so it was
	incorrect to first accumulate the transformations that propagate,
	and then add on top the transformations that don't propagate. Now,
	for non-propagating transformation T at slice I, we add T^-1 at
	slice I+1, to cancel it.

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.8)

	- If the file extension is not one of the special cases (.mat,
	.mha.mhd, .lsm, .vmu), try to read the file with imread. Before,
	we only attempted this for .png and .tif files, but there's no
	reason why we should be restricted that way.

2016-07-18  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_intraframe_reg.m: (0.5.0)

	- Add IDX input argument so that we can select which slices to
	register to the previous one, rather than having to register every
	I to I-1.

2016-07-11  Ramon Casero  <rcasero@gmail.com>

	* Normalize all the line endings in the repository, so that we
	don't have a mix of CRLF for Windows and LF for linux.

2016-07-06  Ramon Casero  <rcasero@gmail.com>

	* .gitattributes:

	- Protect .mha from automatic changes in end of line characters by
	telling git that they are always binary.

2016-06-29  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/match_file_lists.m: (0.2.0)

	- Sort the lists alphabetically.

	- Fix bug so that filenames in a list can have different formats
	and lengths as long as they have the same token in the same place.

2016-06-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_intraframe_reg.m: (0.4.3)

	- Fix bug. Typo in field name in a struct.

	* Add .gitignore:

	- To prevent getting lots of clutter in "git status".

2016-05-27  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.9.6)

	- Add g++ version for Matlab2015b.

2016-05-25  Hao Xu  <hao.xu@eng.ox.ac.uk>

	* Delete common.svnprops.

	- It was for the old subversion repository.

2016-05-18  Ramon Casero  <rcasero@gmail.com>

	* Add shell-script/pre-commit-git-diff-docx: (0.1.0)

	- Git hook to create a copy of .docx files in Markdown format
	(.md) before the commit. That way, automatic diff emails will show
	the differences in the Word document.

2016-05-11 Nicolas Basty <nicolas.basty@eng.ox.ac.uk>

	* add matlab\FileFormatToolbox\scimat_resample.m
	
	- Adding this function that I wrote to resample scimat files. I'm using it to extract slices of volumes or profiles of images.


2016-05-11 Nicolas Basty <nicolas.basty@eng.ox.ac.uk>

	*matlab\FiltersToolbox\im2col3.m: (0.2)
	*matlab\FiltersToolbox\im2col3.m: (0.2)

	- Fixed a bug where X and Y were the wrong way round. Did not notice at first because I always used the same X & Y.

2016-01-19 Jo Bates <jobates81@gmail.com>
	*matlab/DiffusionMRIToolbox/dt_from_smoldyn_pt1
	*matlab/DiffusionMRIToolbox/dt_from_smoldyn_pt2
	*matlab/DiffusionMRIToolbox/dt_from_smoldyn_pt3

	- added these 3 functions which calculate the diffusion tensor from the smoldyn data

	*matlab/FileFormatToolbox/smoldyn2matlab

	- amended to include cutting down the data to only those molecules which finish
	inside the voxel to be analysed to reduce the data to be saved.

2015-10-23  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/ExportFigureToolbox:
	* matlab/add_gerardus_paths.m: (0.3.5)

	- Add export_fig by by Yair Altman 11 Apr 2009 (Updated 05 Oct
	2015). Downloaded from

	http://uk.mathworks.com/matlabcentral/fileexchange/23629-export-fig

	This function saves a figure or single axes to one or more vector
	and/or bitmap file formats, and/or outputs a rasterized version to
	the workspace. This function is especially suited to exporting
	figures for use in publications and presentations, because of the
	high quality and portability of media produced.

?2015-10-19  Jo Bates  <jobates81@gmail.com>

	* matlab/DiffusionMRIToolbox/add_Rician_noise_to_simulated_dMRI_data

	- changed to allow any dimension of data

2015-10-19  Jo Bates  <jobates81@gmail.com>


	* matlab/DiffusionMRIToolbox/add_Rician_noise_to_simulated_dMRI_data

	- Allows Rician noise with known SNR to be added to simulated data

2015-10-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/ThirdPartyToolbox/dijkstra.m: (0.4.0)
	* matlab/ThirdPartyToolbox/dijkstra.cpp: (0.4.0)
	* matlab/test/test_dijkstra.m: (0.3.3)

	- Fix bug. The adjacency-distance matrix input to dijkstra()
	should be transposed, i.e. (j,i) is the distance from i to j,
	because of how the corresponding MEX file is implemented. We have
	changed the interface rather than transposing internally, because
	in that case we would have to make a copy of a potentially large
	matrix. It's better to let the user transpose the matrix on the
	Matlab side, and that way not have both the matrix and its
	transpose in memory.

	Reported by Matthew Morena, issue 89

	https://github.com/rcasero/gerardus/issues/89

2015-10-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_preprocessing.m: (0.4.2)

	- Now the reference image is output in the same format as at the
	input. Internally, now it's always processed as an array.

2015-10-07  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/rotateXLabels.m:

	- Rotate x-tick labels to any angle, preserving font settings and
	coping with resize, zoom, pan etc.

	- Note that as of R2014b this functionality is built into MATLAB
	axes using the 'XTickLabelRotation' property.

	- By Ben Tordoff, 01 Jun 2010 (Updated 08 Oct 2014), downloaded
	from

	http://www.mathworks.com/matlabcentral/fileexchange/27812-rotatexlabels--ax--angle--varargin--

2015-09-30  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/scimat_scimat2imref.m: (0.1.0)

	- SCIMAT_SCIMAT2IMREF Matlab's image reference frame from SCIMAT
	metadata.

2015-09-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.7)

	- Allow to load metadata only for .tif/.png files, without the
	actual image. (This speeds things up a lot when you don't need the
	image).

2015-09-26  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/scimat_imagesc.m: (0.1.0)

	- Display 2D image in real world coordinate axes.

2015-09-25  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/transformix_pts.m: (0.1.1)

	- Fix bug. The delimiter in the points files has to be ' ' instead
	of ',', otherwise transformix fails to read the points (without
	giving an error message). Also, increase the precision of the
	numbers we write to 15 digits. This has limited value, because
	transformix output coordinates only have 6 digits, anyway.

	* matlab/ElastixToolbox/transformix.m: (0.3.1)

	- Minor, some comments and the way opts is initialized.

	* Add matlab/ElastixToolbox/transformix_pts.m: (0.1.0)

	- Matlab interface to the image warping program "transformix", but
	for point transformation.

2015-09-23 Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Add matlab/DiffusionMRIToolbox/quiver_image.m (0.0.1)

	- Displays a 2D slice of a 3D image with a quiver plot
	overlaid on top.

	* Add matlab/FiltersToolbox/forward_TGV.m (0.0.1)

	- Second order total generalised variation of an image (up to 3D)

	* Add matlab/FiltersToolbox/inverse_TGV.m (0.0.1)

	- Returns the residuals of 2nd order total generalised variation

2015-09-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.5)

	- Fix bug. For.mha/.mhd files, if the first byte of the raw data
	was ASCII 13 (CR = carriage return), then fgetl combined it with
	the last \n (ASCII 10, LF new line feed) after "ElementDataFile =
	LOCAL", so it read one byte too few.

2015-09-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/writemetaimagefile.m: (0.2.2)

	- If output file cannot be open, give an error instead of just a
	message.

	* matlab/ElastixToolbox/elastix.m: (0.5.4)

	- If input images are filenames, don't first load them to memory
	to write them as temp files again. Use the original files
	directly. This speeds things up.

	- Internally, we want to keep both a struct with the registration
	parameters to do some checks and a file to pass to elastix.

	- Fix bug. When filenames contained whitespaces, the call to
	elastix on the command line would fail. Now filename passed to
	command line in "".

2015-08-28 Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Delete matlab/ThirdPartyToolbox/waveletcdf97

	- Toolbox has no licence, so we cannot redistribute it.

	* Add matlab/ThirdPartyToolbox/waveletcdf97/

	- This tool computes the CohenDaubechiesFeauveau 9/7 (CDF 9/7)
	wavelet transform. It was downloaded from
	http://www.getreuer.info/home/waveletcdf97
	on 2015-03-26.

	* Add matlab/ThirdPartyToolbox/waveletcdf97/waveletcdf97_3D.m

	- An extension of Pascal Getreuers CohenDaubechiesFeauveau 9/7
	wavelet code to handle 3D images.

2015-08-26 Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/weighted_linear_fit.m (0.1.1)

	- Parameters now passed through a struct rather than individual
	arguments.
	- Now can use a unique weighting vector for each signal (but this
	is slower)
	- Now gives the option of weighting by Y^2, which may be used for
	signals with noise following a Rician distribution.

	* matlab/DiffusionMRIToolbox/fit_DT.m (0.1.10)

	- Modified to work with the new version of weighted_linear_fit.

2015-08-21  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_preprocessing.m: (0.4.0)

	- Now we can process a stack of images, and the inputs can be
	filenames as well as scimats or arrays. Converting to grayscale is
	optional. Some general rewriting of the function.

2015-08-15  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.4)

	- For .png/.tif files, scimat.rotmat gets created last, so that
	the fields are in the same order as with other functions. Matlab
	gives an error if you try to do scimat(I) = scimat_other and the
	fields are not in the same order. A proper solution to this would
	be to reorder the fields automatically, but this is a quick fix
	that works for the moment.

	* matlab/CardiacToolbox/histology_preprocessing.m: (0.3.1)

	- Accept inputs given in scimat format.

2015-08-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/RegistrationToolbox/regmatchedfilt.m: (0.3.0)

	- Input images now can be in scimat format, so we can work with
	physical units.

	- Fix bug. CenterOfRotation is in (x,y) format, but we were using
	(row,col) format.

2015-08-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.3)

	- Fix bug. When the file header doesn't provide ResolutionUnit,
	XResolution or YResolution, the function now gives a warning, and
	chooses defaults, instead of failing.

	* matlab/ElastixToolbox/transformix.m: (0.3.0)

	- Now input image can be in scimat format, so transforms can be in
	physical coordinates. Better support for .png/.tif/.mha files.

	* matlab/ElastixToolbox/elastix.m: (0.5.3)

	- Fix bug. When the input image was in array form, we kept the
	channels in dimension 3 instead of 5 in the conversion to scimat.

2015-08-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix.m: (0.5.2)

	- If .png/.tif files doesn't provide SamplesPerPixel tag, compute
	number of channels from BitDepth.

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.2)

	- Add 'meter' as a valid resolution unit for .tif/.png files.

2015-08-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_save.m: (0.6.7)

	- Fix bug. For PNG and TIFF output formats. scimat.data channels
	are now 5th instead of 3rd dimension.

	* matlab/ElastixToolbox/elastix.m: (0.5.1)

	- Fix bug. When deleting temp files, we no longer store the names
	in a cell array, but as a matrix, with one filename per row.

	* matlab/ElastixToolbox/elastix_read_reg_output.m: (0.3.0)

	- Change output from IM to SCIMAT. This way, the output is not
	only the image, but also contains the metadata.

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.1)

	- Support reading compressed .mha/.mhd files. Thanks to function
	provided in mha_read_volume() by Dirk-Jan Kroon, 10 Nov 2010
	(Updated 23 Feb 2011)
	http://uk.mathworks.com/matlabcentral/fileexchange/29344-read-medical-data-3d/content/mha/mha_read_volume.m

	- In .mha/.mhd code, write labels as 'ObjectType' instead of
	'objecttype' to improve readability of code.

	- In .mha/.mhd code, recognise and process a couple more labels.

	* matlab/ElastixToolbox/elastix.m: (0.5.0)

	- Accept SCIMAT structs as inputs. This allows to provide images
	in physical coordinates (i.e. with spacing and offset values).

2015-08-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_im2scimat.m: (0.3.1)

	- Extend to SCIMAT images with 2D or 3D, and with frames and
	channels.

	* matlab/FiltersToolbox/scimat.m: (0.2.3)

	- Explain better the difference between number of spatial
	dimensions and number of axes.

2015-07-31  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix.m: (0.4.6)

	- Accept input .mha/.mhd images.

	- Deal with colour images better. Now images can have any number
	of channels, and they are split into the corresponding number of
	temporal files. The temporal files are no longer PNG, but the same
	format as the input images.

	- Fix bug. If the images format is .tif, elastix produces both a
	.tif and .dcm file. To avoid this kind of problems, now we are
	more specific when looking for the output image file.

	* matlab/FileFormatToolbox/scimat_save.m: (0.6.6)

	- Fix bug. When input image was 2D, the function threw an error
	because it assumed that all images were 3D.

	* matlab/FileFormatToolbox/writemetaimagefile.m: (0.2.1)

	- Fix bug. When input image is 2D and in colour, the dimension has
	to be 2 (not 3) with 3 channels.

	* matlab/FileFormatToolbox/scimat_load.m: (0.5.0)

	- Add input optional parameter 'HeaderOnly'.

	* matlab/FileFormatToolbox/scimat_load.m: (0.4.7)

	- Fix bug. When reading colour TIFF, PNG files, channels need to
	go in the 5th dimension of scimat.data.

2015-07-30  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_read_reg_output.m: (0.2.4)

	- Fix bug. If the images format is .tif, elastix produces both a
	.tif and .dcm file. To avoid this kind of problems, now we are
	more specific when looking for the output image file.

	* matlab/FiltersToolbox/scimat.m: (0.2.2)

	- Add multi-channel images to the scimat standard (e.g. RGB
	images).

	* matlab/FileFormatToolbox/scimat_save.m: (0.6.5)

	- Now we can write rotation matrices to MetaImage files.

	* matlab/FileFormatToolbox/writemetaimagefile.m: (0.2.0)

	- Add input argument for rotation matrix, and deal with images
	with more than one channel.

	- Deal with cases for resolution, offset when image has 2 to 4
	dimensions (before, we always assumed 3 dimensions).

	- Replace separate blocks of code for 2D, 3D and 4D images with a
	single block of code for any number of dimensions. This makes the
	code much shorter.

	- Update to new syntax of narginchk, nargoutchk.

	* matlab/FileFormatToolbox/scimat_load.m: (0.4.6)

	- Read PNG, TIFF files.

	- Now we can have scimat with number of channels
	('ElementNumberOfChannels') and rotation matrix ('Orientation',
	'TransformMatrix', 'Rotation').

	- Deal with synomyms for MetaImage tag 'Offset'.

	- Deal with minor MetaImage tags: 'ObjectType', 'HeaderSize'.

	- Explicitly check that 'CenterOfRotation' is 0. We cannot deal
	with other centers of rotation yet.

	- If file reports ElementSpacing(:) == 0, replace by
	ElementSpacing(:) == 1.0 to potentially avoid problems with
	ITK/Elastix registration.

2015-07-29 Ben Villard <b.016434@gmail.com>

	* CMakelists.txt
	* matlab/FindMatlab.cmake

	- Added the compiler information for the latest MATLAB version (2015Ra)
	- Changed the tarball url for ITK, as the source forge one was obsolete.
	- created a dummy project in FindMatlab.cmake

2015-07-28 Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/FiltersToolbox/forward_TV.m (0.1.3)
	* matlab/FiltersToolbox/inverse_TV.m (0.1.1)

	- Now works in 1 dimension.

2015-07-28  Ramon Casero  <rcasero@gmail.com>

	* Add shell-script/imresize-meta.sh: (0.1.0)

	- Script to resize image files, changing the pixel spacing
	accordingly so that the real world print size remains the same.

2015-07-23 Nicolas Basty <nicolas.basty@eng.ox.ac.uk>

	* Add matlab\FiltersToolbox\im2col3.m: (0.1.0)

	- IM2COL3 rearranges 3D image blocks into columns

	* Add matlab\FiltersToolbox\col2im3.m: (0.1.0)

	- COL2IM3 rearranges matrix columns into a 3D image


2015-07-20 Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Add matlab/DiffusionMRIToolbox/view_tensors.m (0.1.1)

	- VIEW_TENSORS  Renders diffusion tensors in 3D, colour coded by HA

	* matlab/DiffusionMRIToolbox/wild_bootstrapping_DTI.m (0.1.2)
	* matlab/DiffusionMRIToolbox/fit_DKI_model.m (0.1.0)

	- Minor bug fixes

2015-07-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_colon.m: (0.1.2)

	- Fix bug. If not all the levels were the same transform, the
	function gave an error when trying to remove the top level.

	* matlab/ElastixToolbox/elastix_colon.m: (0.1.1)

	- Fix bug. If you wanted to extract more than one level, the
	second level repeated the same transform for every image, instead
	of the real ones.

2015-07-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_cat.m: (0.3.2)

	- Fix bug. Function broke when one of the input transforms was
	empty or a cell vector of empties.

2015-07-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/FindMatlab.cmake: (0.2.10)

	- Find Matlab version without having to run matlab (solves
	Gerardus issue #50).

2015-06-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ElastixToolbox/elastix_length.m: (0.1.0)

	- ELASTIX_LENGTH Number of transform levels in an elastix series.

2015-06-24  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ElastixToolbox/elastix_colon.m: (0.1.0)

	- ELASTIX_COLON  Colon operator for elastix transforms.

2015-06-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/CMakeLists.txt: (0.2.8)

	- Fix bug. forward_TV_mex was renamed by Darryl to forward_TV_aux
	some time ago, but this file still had the old name.

2015-06-14  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/vmu2png.m: (0.2.2)

	- Fix bug. We were not setting ResolutionUnit to "meter", so it
	was an undefined value in the file metadata, and conversion to
	other formats gave erroneous resolution values.

	* matlab/RegistrationToolbox/regmatchedfilt.m: (0.2.1)

	- Fix bug. I had forgotten to update the output transform with the
	optimal angle.

	* Add matlab/FiltersToolbox/imcmass.m: (0.1.0)

	- IMCMASS  Centre of mass of an image.

	* Add matlab/RegistrationToolbox/regmatchedfilt.m: (0.2.0)

	- Extend registration to find rotation optimum too.

2015-06-12  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ElastixToolbox/elastix_affine_crot.m: (0.1.0)

	- ELASTIX_AFFINE_CROT Change centre of rotation of Elastix affine
	transform.

2015-06-10  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/RegistrationToolbox/regmatchedfilt.m: (0.1.0)

	- Matched filter registration.

2015-06-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/README.md:
	* matlab/ElastixToolbox/elastix_cat.m: (0.3.1)

	- Add info about the order of concatenating transforms depending
	on whether we use -t0 or apply the initial transform
	explicitly. Add section "Devil in the details of composition of
	transformations".

2015-06-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/README.md:

	- Start small manual for the Elastix Toolbox.

2015-06-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_cat.m: (0.3.0)

	- Extend so that we can concatenate vectors of transforms,
	tf1(1:M),...,tfN(1:M). In that case, all vectors must have the
	same number of elements.

	* matlab/ElastixToolbox/elastix_cat.m: (0.2.1)

	- Fix bug. Order of the concatenated transforms was not correct.

	* matlab/ManifoldToolbox/trifacet_area3D.m: (0.1.1)

	- Fix help header. Missing licence notice. Convert function name
	to uppercase.

	- Check number of input and output arguments.

2015-06-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_compose_afftransf.m: (0.2.6)
	* matlab/test/test_elastix_compose_afftransf.m: (0.1.2)

	- Fix bug. Transforms have to be composed as a1*a2 instead of
	a2*a1.

	* matlab/ElastixToolbox/elastix_affine_matrix2struct.m: (0.2.0)
	* matlab/ElastixToolbox/elastix_affine_struct2matrix.m: (0.2.0)

	- Extend functions so that we can process N transforms instead of
	only 1.

2015-05-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/transformix.m: (0.2.6)

	- Add optional parameter opts.AutoDefaultPixelValue, for automatic
	estimation of the colour to give to pixels that are newly created
	by transformix.

2015-05-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix.m: (0.4.5)

	- Help header: Note that t0 doesn't seem to work in conjunction
	with masks.

2015-05-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_write_param2file.m: (0.2.3)

	- Note in help header that the function works with sequences of
	parameter structures too.

	* matlab/ElastixToolbox/elastix.m: (0.4.4)
	* matlab/ElastixToolbox/transformix.m: (0.2.5)
	* matlab/ElastixToolbox/elastix_delete_param_file.m: (0.1.1)
	* matlab/ElastixToolbox/elastix_read_reg_output.m: (0.2.3)
	* matlab/ElastixToolbox/elastix_read_file2param.m: (0.2.4)
	* matlab/ElastixToolbox/elastix_compose_afftransf.m: (0.2.5)

	- Fix help header: 1) Description of transform sequences:
	TB.InitialTransformParametersFileName = TA means that TA is
	applied first. 2) they are a sequence, not "nested". ("Nested"
	means that a function is local to another function). 3) lowercase
	to uppercase for function names.

2015-05-26  Benjamin Villard  <b.016434@gmail.com>
	* matlab/FiltersToolbox/scimat_upsample.m (0.2.1)

	- Changed the header information as it was completely wrong. (It
	had the header information for scimat_downsample)

	* matlab/FilesFormatToolbox/scimat_slice_GUI.m (0.1.0)

	- Changed the version of the function. It was still in alpha
	version. Updated it to beta version 0.1.0

	* matlab/FiltersToolbox/scimat_lineintersection.m (0.1.0)

	- Added and promoted function to beta version and merged it to the
	master branch.
	(Before promotion (Alpha version) function was in
	scimat_lineintersection branch of gerardus) This function returns
	the line intensities from two intersecting scimat files at a
	specified resolution.

	* matlab/FiltersToolbox/scimat_downsample.m (0.3.0)

	- Added and promoted function to beta version and merged it to the
	master branch.
	(Before promotion (Alpha version) function was in
	scimat_lineintersection branch of gerardus) This function takes a
	scimat struct and downsamples the scimat image (stored in
	scimat.data) by half. It first applies a Gaussian filter in order
	to smooth the image and the proceeds to sample half of the
	original image.

	* matlab/FiltersToolbox/scimat_upsample.m (0.2.0)

	- Added and promoted function to beta version and merged it to the
	master branch.
	(Before promotion (Alpha version) function was in
	scimat_lineintersection branch of gerardus) This function takes a
	scimat struct and a highre resolution image, and proceeds to
	replace the scimat image (stored in scimat.data) by the image, as
	well as recalculates all the attributes such that the scimat
	struct is sampled by twice. Used in conjunction with
	scimat_downsample.m.

	* matlab/FilesFormatToolbox/scimat_slice_GUI.m (0.1.0)

	- Added and promoted function to beta version and merged it to the
	master branch.
	(Before promotion (Alpha version) function was in
	scimat_lineintersection branch of gerardus) This function Create
	graphical user interface to view slices in scimat struct.
	Checkboxes allow for slice visibility to be turned on/off

	2015-05-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/ElastixToolbox/elastix_cat.m: (0.2.0)

	- Fix bug. The concatenation was in the opposite order. If we want
	to apply T1 and T2 in that order, then
	T2.InitialTransformParametersFileName = T1.

	* Move elastix functions from ItkToolbox to new directory
	ElastixToolbox.

	- Although elastix is based on ITK, the elastix_* and transformix
	functions independently of ITK, and we don't need to build
	anything.

2015-05-22  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix_compose_afftransf.m: (0.2.4)

	- Remove internal nested functions and replace them by
	elastix_affine_matrix2struct() and elastix_affine_struct2matrix().

	* Rename matlab/ItkToolbox/elastix_affine_tform2param.m as
	matlab/ItkToolbox/elastix_affine_matrix2struct.m: (0.1.0)

	- A tform is a structure used by Matlab. In reality, this function
	converts the affine matrix contained inside the tform to the
	elastix struct format.

2015-05-20  Ramon Casero  <rcasero@gmail.com>

	* Add elastix_affine_struct2matrix.m: (0.1.0)

	- Convert any type of affine transform from elastix struct format
	to homogeneous coordinates matrix format.

	* Add matlab/ThirdPartyToolbox/Conv2FFTToolbox:
	* matlab/add_gerardus_paths.m: (0.3.3)

	- Alternative to conv2() using the FFT. This is way much faster
	for the convolution of two similarly sized images. Downloaded from

	http://www.mathworks.com/matlabcentral/fileexchange/31012-2-d-convolution-using-the-fft

	By David Young, 11 Apr 2011.

2015-05-20  Jack Allen <jack.allen@jesus.ox.ac.uk>

	* Add matlab/ManifoldToolbox/trifacet_area3D (0.1.0)
	
	- Function to compute surface area of a 3D triangular mesh. 
	It also can return the list of triangle side lengths and triangle areas.

2015-05-15  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix.m: (0.4.3)
	* matlab/ItkToolbox/elastix_bspline_grid.m: (0.1.4)
	* matlab/ItkToolbox/elastix_bspline_grid2param.m: (0.1.1)

	- Clarify in the help header that elastix parameters x->rows,
	y->columns.

2015-05-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix_cat.m: (0.1.1)

	- In help header, clarify why "InitialTransformParametersFileName"
	points to the transform that is applied after the current one.

2015-05-13  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/fit_DKI_model.m
	* matlab/DiffusionMRIToolbox/fit_DT.m
	* matlab/DiffusionMRIToolbox/fit_biexponential_tensor.m
	* matlab/DiffusionMRIToolbox/fit_stretched_exponential_tensor.m
	* matlab/DiffusionMRIToolbox/weighted_linear_fit.m
	* matlab/DiffusionMRIToolbox/wild_bootstrapping_DTI.m

	Various minor bug fixes (no major development)

2015-05-12  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ItkToolbox/elastix_cat.m: (0.1.0)

	- ELASTIX_CAT  Concatenation of elastix transforms.

2015-05-08  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_preprocessing.m: (0.3.0)

	- Add output argument for registration mask. This mask can be used
	to speed up registration.

2015-04-28  Christopher Kelly <christopher.kelly28@googlemail.com>

	* Add directories lib, lib/bin

	- fix bug when running add_geradus_paths.m, if directory doesn't exist

2015-04-27  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ItkToolbox/elastix_bspline_grid2param.m: (0.1.0)
	* Add matlab/test/test_elastix_bspline_grid2param.m: (0.1.0)

	- Convert control points from grid to TransformParameters vector
	form.

	* matlab/ItkToolbox/elastix_bspline_grid.m: (0.1.3)

	- Fix bug. The displacement vector was being reshaped in the wrong
	way. Now it's first reshaped to the elastix grid size, and only
	then the rows and columns are swapped.

2015-04-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix_bspline_grid.m: (0.1.2)

	- Fix bug. I had forgotten to add a visualization example to the
	help header.

	* matlab/ItkToolbox/elastix_bspline_grid.m: (0.1.1)

	- Fix bug. Rows/columns and X/Y coordinates were incorrect.

2015-04-24  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ItkToolbox/elastix_bspline_grid.m: (0.1.0)

	- ELASTIX_BSPLINE_GRID Control point grid of B-spline
	transformation.

	* Add .gitattributes:

	- File to configure how we manage line endings so that they are
	consistent between Linux, Windows and Mac OSX.

2015-04-09  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* add matlab/DiffusionMRIToolbox/fit_DKI_model.m (0.1.0)

	- Fits the diffusion kurtosis model to diffusion MRI data.

2015-03-23  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/fit_DT (0.1.8)

	- Combined constrained and nonlinear fitting section - if you are doing
	nonlinear fitting, you might as well constrain it. Now the only options
	are linear and nonlinear (linear by default). 
	- Added support for parallelisation (i.e. parfor loops rather than for
	loops)
	- Added Jacobian to nonlinear fitting

	* renamed matlab/FiltersToolbox/forward_TV_mex.cpp to 
	/forward_TV_aux.cpp
	* matlab/FiltersToolbox/forward_TV.m
	- changed function calls accordingly 

2015-03-23  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* add matlab/DiffusionMRIToolbox/fit_biexponential_tensor.m (0.1.1)

	- Fits the function: S = S0_fast * e^(b*D_fast) + S0_slow e^(b*D_slow)
	That is, two tensors on top of each other.

2015-03-12  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* add matlab/DiffusionMRIToolbox/weighted_linear_fit.m (0.1.0)

	- WEIGHTED_LINEAR_FIT fits the function Y = MX (matrices) such that the
	residuals follow a gaussian distribution after having a certain function
	applied to them. It is good when you have a nonlinear function that you 
	can easily linearise, but you want a result closer to the nonlinear fit,
	and you dont know what weighting vector to use.

	* matlab/DiffusionMRIToolbox/fit_stretched_exponential.m (0.1.4)

	- Now uses weighted linear fit (see above). Also now has extra output for
	S0. Jacobian is now used in non-linear fitting, speeding this up by around 20%.

2015-03-11  Benjamin Villard  <b.016434@gmail.com>

	* matlab/ItkToolbox/elastix_compose_afftransf(0.2.3)

	- corrected for minor bug to allow non struct inputs.
	
	* matlab/FiltersToolbox/dcm2scimat(0.2.4)
	
	- changed small error that checks for mode input.
	
2015-03-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_ndgrid.m: (0.4.1)

	- Small changes. Fix copyright date, Ben as author ("Modified by"
	is for third party software), typos.

	* matlab/FileFormatToolbox/dcm2scimat.m: (0.4.1)

	- Rename variable "foo" as "pos". foo (and bar) are "placeholder
	names used to name entities such as variables, functions, and
	commands whose purpose is unimportant and serve only to
	demonstrate a concept." (Wikipedia).

	* matlab/DiffusionMRIToolbox/fit_DT.m: (0.1.8)

	- Add note to point at Jo's alternative method fit_DT_YHd_method.

2015-03-09  Benjamin Villard  <b.016434@gmail.com>

	* matlab/FiltersToolbox/scimat_intersect_plane.m: (0.4.3)

	- Replace interp3 by interpn.

	* matlab/FiltersToolbox/scimat_ndgrid: (0.4.0)

	- Modified scimat_ndgrid to allow for 2d->4D inputs.

2015-03-09  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* add matlab/test/test_tensor_fitting_methods.m (0.1.1)

	- Compares two methods of fitting the diffusion tensor to simulated data

2015-03-06  Benjamin Villard  <b.016434@gmail.com>

	* Add matlab/ThirdPartyToolbox/InfoTheoryToolbox

	- Added Information Theory toolbox provided on MATLAB Central by
	Michael Chen.  This toolbox contains various matlab files to
	compute nmi (normalized mutual information), and different entropy
	measures. File was obtained here:

	http://uk.mathworks.com/matlabcentral/fileexchange/35625-information-theory-toolbox/content/nmi.m

2015-03-06  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/fit_DT.m (0.1.7)

	- Can now perform a weighted linear tensor fit

	* matlab/DiffusionMRIToolbox/fit_stretched_exponential.m (0.1.3)

	- Now only fits the voxels that are above the noise floor (extra
	input argument for noise threshold, and output argument for number
	of shells fitted in each voxel).

2015-02-27  Benjamin Villard  <b.016434@gmail.com>

	* matlab/FileFormatToolbox/dcm2scimat.m: (0.4.0)

	- Changed dcm2scimat to check for uniform spacing between the
	different slices given in the input. If non uniform dataset, a
	volume will not be produced, and an error will be given.

2015-02-25  Ramon Casero  <rcasero@gmail.com>

	* matlab/DiffusionMRIToolbox/fit_DT_YHd_method.m: (0.1.0)
	* matlab/RegistrationToolbox/regdemons3d.m: (0.1.1)

	- Add missing subversion properties.

2015-02-25  Jo Bates <jobates81@gmail.com>

	* Add matlab\DiffusionMRIToolbox\fit_DT_YHD_method.m: (0.1.0)

	- fit diffusion tensor to dMRI data, using the Y=Hd method as described by Kingsley.

2015-02-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/get_gerardus_dependencies.m: (0.1.0)

	- GET_GERARDUS_DEPENDENCIES Grab Gerardus files that a script
	depends on.

2015-02-24  Adam Szmul  <aszmul@gmail.com>

	* matlab\RegistrationToolbox\regdemons.m: (0.1.2)

	- Added interpolation before registration


	* matlab\RegistrationToolbox\regdemons3d.m: (0.1.1)

	- Inverse transform added.

	- Gaussian smoothing and interpolation by mex functions
	to make it faster.

	* Add matlab\ThirdPartyToolbox\ImGaussianToolbox: (0.1.0)

	- MEX function: Fast Gaussian filtering of 1D, 2D greyscale 
	/ color image or 3D image volume.

	- By Dirk-Jan Kroon. Downloaded from 
	http://uk.mathworks.com/matlabcentral/fileexchange/25397-imgaussian.


	* Add matlab\ThirdPartyToolbox\Mirt3DMexinterpToolbox: (0.1.0)

	- MEX function: Fast 3D linear interpolation of scalar or 	vector valued 3D images.

	- By  Andriy Myronenko. Downloaded from 
	http://uk.mathworks.com/matlabcentral/fileexchange/24177-3d-interpolation

	* matlab/add_gerardus_paths.m: (0.3.2)

	- ImGaussianToolbox and Mirt3DMexinterpToolbox added to the 	path.

2015-02-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/dcm2scimat.m: (0.3.0)

	- Now the user can directly provide a DICOM filename instead of
	having to load the image and metadata separately.

	- Convert units from mm and ms to metres and seconds.

	- Transpose rotation matrix so that we can use it for
	right-multiplication, as in Matlab points are usually given as row
	vectors.

	* matlab/FileFormatToolbox/scimat_index2world.m: (0.5.0)
	* matlab/FileFormatToolbox/scimat_world2index.m: (0.5.0)
	* matlab/FiltersToolbox/scimat.m: (0.2.1)

	- Add rotation matrix.

	- Work done together with Ben and Chris.

	* matlab/FileFormatToolbox/scimat_index2world.m: (0.4.1)
	* matlab/FileFormatToolbox/scimat_world2index.m: (0.4.1)

	- Generalize from 3 to N-dimensions.

	- Don't remove "dummy" dimensions. That was a thing of scirunnrrd,
	and no longer applies to scimat structs.

	* matlab/FiltersToolbox/scimat_crop.m: (0.4.0)

	- Make the function work with any number of dimensions, using
	permute() to shift circularly the dimensions of the image.

	- Fix how the coordinates of the "botton-left" corner of the image
	are computed. Now we use scimat_index2world, because once we
	implement rotation matrices, a simple translation as we had before
	will not be correct.

2015-02-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_crop.m: (0.3.0)

	- Generalize function to 1D to 4D, as we are going to be using
	3D+t volumes.

	- Fix bugs from last commit.

	- Ben added as author, not as doing modifications.

	- Remove unused fields inherited from the scirunnrrd struct,
	e.g. scimat.axis.max.

	* matlab/FileFormatToolbox/scimat_save.m: (0.6.4)

	- Rename variable scirunnrrd as scimat, as it's more clear for
	other file formats that are not the Seg3D matlab format.

	- Fix the help header, that was too Seg3D-oriented.

	- When we save to Seg3D matlab format, remove the new rotation
	matrix field, if necessary.

	* matlab/FileFormatToolbox/scimat_load.m: (0.4.5)

	- Remove fields from scirunnrrd that are unused in scimat.

	- Add default rotation matrix field.

	* matlab/FileFormatToolbox/scimat_im2scimat.m: (0.3.0)

	- Add input argument for rotation matrix.

	- Remove unused fields that were a legacy from scinrrd. We don't
	need them, and shouldn't be part of scimat.

	* matlab/FiltersToolbox/scimat.m: (0.2.0)

	- Rewrite, as we are going to be using rotation matrices and 3D+t
	volumes regularly.

2015-02-11  Benjamin Villard  <b.0134@gmail.com>

	- Added the offset for the position of the pixel coordinates in
	regards to the 'min' field. Previously the coordinates gave the
	centre of the voxel/pixel.

2015-02-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/CMakeLists.txt: (0.2.7)

	- Add Darryl's forward_TV_mex() function to the build system.

2015-02-06  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/wild_bootstrapping_DTI.m (0.1.2)

	- Now returns cone of uncertainty for 2nd and 3rd eigenvectors
	too.

2015-01-29  Benjamin Villard <b.016434@gmail.com>

	* matlab/FilesFormatToolbox/dcm2scimat.m (0.2.0)

	- Modified dcm2scimat.m Added temporal dimension to the axis
	properties.

2015-01-29  Benjamin Villard <b.016434@gmail.com>

	* matlab/FilesFormatToolbox/dcm2scimat.m (0.1.0)

	- Added function dcm2scimat.m. The function converts DICOM data
	structure to scimat format.  Inputs fed are the dicom
	metainformation along with the dicom image files.

2015-01-27  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.9.5)

	- Issue 44. Fix bug. Build was breaking without a clear error
	message in linux systems if program "m4" was not installed,
	because it's necessary to build GMP. Now we search for it, and
	give a clear error message so that the user installs m4.

2015-01-27  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/fit_DT.m (0.1.6)

	- Modified the argument for skipping voxels. Can now be either a
	scalar threshold or a mask.

	* matlab/FiltersToolbox/forward_TV.m: (0.1.2)

	- Added missing details in help header.

2015-01-27  Benjamin Villard <b.016434@gmail.com>

	* matlab/FiltersToolbox/scimat_crop.m (0.2.1)

	- Modified scimat_crop.m to allow cropping of 4D volumes.

2015-01-21  Ramon Casero  <rcasero@gmail.com>

	* matlab/FilesFormatToolbox/load_dcm.m (0.1.1)

	- Fix help header. Part of the copyright notice missing. Help
	header has to be separated from copyright notice. Make similar to
	other Gerardus functions.

2015-01-21  Benjamin Villard  <b.016434@gmail.com>

	* Add matlab/FilesFormatToolbox/load_dcm.m (0.1.0)

	-LOAD_DCM Load array of DICOM filenames as 3D+t image and
	metainformation matrix.

	* matlab/FileFormatToolbox/load_multi_dcm_dir.m: (0.2.0)

	- Modifications. Changed the output to include Dicomdirpath, and
	added the SVM properties.

2015-01-14  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Add matlab/DiffusionMRIToolbox/wild_bootstrapping_DTI.m (0.1.1)

	- Returns uncertainty measures from diffusion tensor images via
	wild bootstrapping. See Whitcher 2008 - Using the Wild Bootstrap
	to Quantify Uncertainty in Diffusion Tensor Imaging

2015-01-14  Christopher Kelly  <christopher.kelly28@googlemail.com>

	* matlab/FileFormatToolbox/load_multi_dcm_dir.m: (0.1.0)

	- Modifications to original third party function
	matlab/ThirdPartyToolbox/loaddcmdir.m.

	- Interface changed to give preview of image.

	- Allows the selection of multiple series.

	- Fewer output arguments, now the only output contains the
	information of the series selected.

	* Copy matlab/ThirdPartyToolbox/license-loaddcmdir.txt to
	matlab/FileFormatToolbox/license-load_multi_dcm_dir.txt:
	* Copy matlab/ThirdPartyToolbox/loaddcmdir.m to
	matlab/FileFormatToolbox/load_multi_dcm_dir.m:

	- baseline before applying my modifications

2014-12-24  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/DiffusionMRIToolbox/global_reference_frame.m (0.1.3)

	- Add extra argument for voxel dimensions

	* matlab/DiffusionMRIToolbox/fit_stretched exponential.m (0.1.2)

	- Large number of edits, essentially a full re-write. Code now
	handles multi-shell diffusion data and returns anomalous
	anisotropy, fractal dimension, and model parameters. Previous
	version fit the model to all directions at once, whereas the
	correct way to do it is to fit each direction individually.

	* matlab/DiffusionMRIToolbox/fit_DT.m (0.1.3)

	- Change in output arguments. Eigenvalues are now returned, and
	the vector field is concatenated in last dimension rather than
	being returned as three arrays.

2014-12-11  Ramon Casero  <rcasero@gmail.com>

	* Delete matlab/CardiacToolbox/getCMR42Contours:

	- Issue 31. (WontFix) Zombie issue, not started in 5 weeks. To be
	put out of it's misery, files will be deleted.

2014-12-11  Adam Szmul <aszmul@gmail.com>

	* Add matlab/RegistrationToolbox/regdemons.m: (0.1.0)

	- REGDEMONS Image registration using Thirion's Demons algorithm.

	* Add matlab/RegistrationToolbox:

	- Toolbox for image registration functions.

	* matlab/add_gerardus_paths: (0.3.1)

	- Add DiffusionMRIToolbox and RegistrationToolbox to the path.

	* Add lib/bin:

	- Fix bug. If you ran add_gerardus_paths.m without building the project first,
	it gave an error because lib/bin doesn't exist.

2014-12-10  Benjamin Villard <b.016434@gmail.com>

	* Delete apply_rotation_matrix_to_vector.m (0.1.1)

	- Delete since more of a local function than a global one. 

2014-12-09  Benjamin Villard <b.016434@gmail.com>

	* Add apply_rotation_matrix_to_vector.m (0.1.1)

	- Applies a rotation matrix to short axis or long axis slice world coordinates.

2014-12-08  Darryl McClymont  <darryl.mcclymont@gmail.com>
	
	* FiltersToolbox/bwrmsmallcomp.m (0.1.3)

	- previous change broke Ramons existing code - output class
	  now matches input class

2014-12-08  Darryl McClymont  <darryl.mcclymont@gmail.com>
	
	* FiltersToolbox/bwrmsmallcomp.m (0.1.2)

	- changed output from uint8 to logical

2014-12-05  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* DiffusionMRIToolbox/global_reference_frame.m (0.1.2)

	- Now accepts hearts with orientations other than axial (extra argument)

	* matlab/DiffusionMRIToolbox/fit_DT.m: (0.1.4)

	- Added outputs for secondary and tertiary eigenvectors

2014-12-02  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Add DiffusionMRIToolbox/global_reference_frame.m (0.1.1)

	- Returns unit vectors for the global reference frame

	* FiltersToolbox/imagesc_nD.m (0.1.0)

	- minor. User can now supply an empty array for the col variable

2014-12-02  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/tightfig.m: (0.1.0)

	- Remove excess margins from figures.

	- by Richard Crozier, 02 Dec 2011 (Updated 17 Dec 2012).

	- Downloaded from MatlabCentral

	http://uk.mathworks.com/matlabcentral/fileexchange/34055-tightfig

2014-12-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/pts_pca.m: (1.1.1)

	- Small changes.

	- Update syntax of functions that check number of input/output
	arguments.

	- Remove trailing and following whitespaces in brackets.

2014-11-30  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.9.4)

	- I had forgotten to uncomment adding the matlab directory, so the
	Matlab files were not being built.

	* CMakeLists.txt: (0.9.3)

	- Fix bug. Add explicit check for OpenGL, because CGAL_ImageIO
	depends on OpenGL to build. Before this fix, if OpenGL was not in
	the system (e.g. libgl1-mesa-dev for Ubuntu), the build would fail
	without a clear message indicating what the problem was.

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.5.0)

	- Change function interface. Remove input argument X, it's
	unnecessary and creates confusion with initial guess Y0. Now first
	argument is the method, then the distance matrix, then the sphere
	radius.

2014-11-28  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Created DiffusionMRIToolbox

	* Moved fit_DT.m and dt2image.m from CardiacToolbox
	to DiffusionMRIToolbox

	* matlab/DiffusionMRIToolbox/fit_DT.m: (0.1.3)

	- Added extra functionality: diffusion tensor fitting can
	be performed using linear or nonlinear fitting, and using
	positivity constraints or not.

	- Fixed bug where 1D signals crashed

	- Now outputs S0, rather than log(S0)

	* matlab/DiffusionMRIToolbox/DT2image: (0.1.3)

	- minor change to handle S0 rather than log(S0) from fit_DT

	* Add matlab/DiffusionMRIToolbox/fit_stretched_exponential.m

	- FIT_STRETCHED_EXPONENTIAL    Fit the stretched exponential model of 
	diffusion to an image

2014-11-26 Christopher Kelly  <christopher.kelly28@gmail.com>

	* matlab/FiltersToolbox/imblend.m: (0.2.1)

    - Update old syntax to check input/output arguments.

2014-11-25 Irvin Teh <irvin@well.ox.ac.uk>

	* matlab/FiltersToolbox/imagesc_nD.m: (0.1.0)

	- Minor formatting fix to imagesc_nD.m

2014-11-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/tri2sphrad.m: (0.1.0)

	- TRI2SPHRAD Estimate radius of sphere with same area as
	triangular mesh.

2014-11-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/smacof.m: (0.1.1)
	* matlab/PointsToolbox/cons_smacof_pip.m: (0.4.3)
	* matlab/ManifoldToolbox/tri_sphparam.m: (0.4.6)

	- Fix bug. To compute stress we were adding all the terms in the
	distance matrix instead of only the upper triangular half.

2014-11-21  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* matlab/CardiacToolbox/fit_DT.m: (0.1.2)

	- Fixed minor bug, program crashed without all output arguments.

	* Add matlab/FiltersToolbox/forward_TV.m: (0.1.1)
	* Add matlab/FiltersToolbox/forward_TV_2D.m: (0.1.1)
	* Add matlab/FiltersToolbox/inverse_TV.m: (0.1.1)
	* Add matlab/FiltersToolbox/inverse_TV_2D.m: (0.1.1)
	* Add matlab/FiltersToolbox/forward_TV_mex.cpp: (0.1.1)

	- Functions to do forward/inverse total variation transforms, very
	common in reconstruction algorithms as a spatial
	regulariser. Essentially just finite differences in x, y, and z.

2014-11-07  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/histology_blockface_manual_correction.m: (0.1.0)

	- HISTOLOGY_BLOCKFACE_MANUAL_CORRECTION Manual landmark correction
	of 3D histology volume to match blockface volume.

2014-11-05  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/histology_blockface_reg.m: (0.1.0)

	- HISTOLOGY_BLOCKFACE_REG Register deformed histology volume to
	blockface.

2014-11-05  Jo Bates <jobates81@gmail.com>

	* Add smoldyn2matlab(0.1.0)

	- converts Smoldyn molecule trajectory into Matlab format

2014-11-05  Christopher Kelly  <christopher.kelly28@gmail.com>

	* Add matlab/ThirdPartyToolbox/loaddcmdir.m,
	* Add matlab/ThirdPartyToolbox/license-loaddcmdir.txt:

	- add loaddcmdir.m function by Laszlo Balkay, last updated 05 Oct
	2011,

	- reads metadata from DICOMDIR file and shows list of the
	different DICOM SERIES in Pop-up menus

	http://www.mathworks.co.uk/matlabcentral/fileexchange/7926-dicomdir-reader

2014-11-04  Ramon Casero  <rcasero@gmail.com>

	* Add test/test_skeleton_label.m: (0.1.0)

	- Test script for skeleton_label.m.

	- First script that generates images to be included in the wiki as
	documentation.

2014-11-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix.m: (0.4.2)

	- Fix bug. Other functions expect the intial transform to be
	opts.t0 instead of opts.T0.

	* matlab/ItkToolbox/elastix_read_reg_output.m: (0.2.2)

	- Fix bug. Sometimes, elastix can produce an empty iteration info
	file. Trying to read it gave an error. Now, if the file is empty
	we return empty iterInfo.

	* matlab/FileFormatToolbox/imread_list.m: (0.1.1)

	- Fix bug. Wrong variable name.

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.4.5)

	- Even if the initial guess points provided by the user are within
	the sphere radius tolerance, we reproject them on the sphere,
	because tiny radius errors can create neighbourhoods that cannot
	be untangled.

	* matlab/CardiacToolbox/histology_intraframe_reg.m: (0.2.2)

	- Fix bug. Wrong number when checking number of output arguments.

	- Fix bug. Other functions expect the intial transform to be
	opts.t0 instead of opts.T0.

	- Rename input argument from PATHTOFILES to PATHSTR for uniformity
	with other function in the toolbox.

2014-10-31  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/imread_list.m: (0.1.0)

	- IMREAD_LIST  Read list of image files into volume.

	* Rename matlab/CardiacToolbox/blockface_imread_gray.m (0.1.1) as
	matlab/FileFormatToolbox/imread_list.m: (0.1.0)

	- Reading a list of images into a volume is a function of general
	interest, it made no sense that it was in CardiacToolbox and
	called "blockface_imread_gray".

2014-10-30  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* renamed matlab/CardiacToolbox/DT_to_image.m: (0.1.0) to
	matlab/CardiacToolbox/dt2image.m (0.1.0)

2014-10-27  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ItkToolbox/elastix_affine_tform2param.m: (0.1.0)

	- elastix_affine_tform2param Convert Matlab tform affine transform
	to elastix parameter vector.

2014-10-27  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Add matlab/CardiacToolbox/fit_DT.m: (0.1.1)
	* Add matlab/CardiacToolbox/DT_to_image.m: (0.1.1)

	- Functions for fitting the diffusion tensor model.

2014-10-22  Irvin Teh  <irvin@well.ox.ac.uk>

	* Add matlab/FiltersToolbox/imagesc_nD.m: (0.0.1)

	- Reformats nD-arrayed 2D image data for display as 2D montage.

2014-10-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/match_file_lists.m: (0.1.0)

	- match_file_lists Remove elements from a file list that are not
	in another.

2014-10-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_intraframe_reg.m: (0.2.1)

	- Fix bug. In elastix, if we want to first apply transform ta and
	then tb, we need to make ta.InitialTransformParametersFileName =
	tb, counter-intuitively. We were doing it the other way around,
	and that was causing oscillations in the registration after
	several iterations.

	- Change the registration parameters to have a bit of a coarser
	grid, and speed up by random sampling 10% of the images instead of
	using all voxels.

	- Fix bug. Using "end" as index for T0 overwrote the transform for
	slice N-1 instead of N.

	- Encapsulate mask creation into local function. The mask is not
	more complex. We threshold segment the foreground, as before, but
	then we remove background noise, we dilate and fill the mask, and
	then we fit an ellipse to the mask, and that ellipse becomes the
	actual mask.

	- Add debug code to show how a grid is deformed by the B-spline
	transforms.

	* matlab/ItkToolbox/elastix.m: (0.4.1)
	* matlab/ItkToolbox/transformix.m: (0.2.4)

	- Minor. Add note to help header explaining order of nested
	transforms.

2014-10-14  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.4.5)

	- Add parameter: sphparam_opts.Scale. Factor to scale the mesh,
	distance matrix, sphere radius, volmin, volmax and
	SMACOF_OPTS.TolFun. This is typically used when very small
	tetrahedra cause "infeasible solutions" but volmin cannot be
	reduced further because feasibility tolerance (feastol) >=
	1e-6. MDS is invariant to scaling, and this factor acts
	transparently, by unscaling the solution and output stress values.

	- Fix bug. Convert volmin, volmax to vectors if they are given as
	scalars. This prevents a later "Index out of bounds" error.

2014-10-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.4.4)

	- Now X is no longer a mandatory argument. For most test we do,
	when the distance matrix and sphere radius have been precomputed,
	X is not needed. So remove meshcheckrepair(); instead, it's the
	user that has to make sure that tri has all triangles positively
	oriented before passing it to this function.

	- Fix bug: the "update the parametrization" loop only works for
	local SMACOF, but we had it for all methods.

	- Local SMACOF: Check the topology only after having updated the
	solution.

	- Classical MDS: Sometimes the solution can be "inside-out". We
	used to compute lat, lon and then invert lon to solve this, but
	it's simpler to invert the x-coordinate without computing lat,
	lon.

2014-10-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/surface_param.m: (0.6.2)
	* matlab/ManifoldToolbox/tri_sphparam.m: (0.4.3)

	- For Classical MDS, instead of first computing full eigenvector
	decomposition and then keeping only the 2 or 3 leading ones, we
	only compute those 2 or 3 eigenvectors. This is much much faster
	for large distance matrices.

	- Specify in the help that the distance matrix for closed surfaces
	is a matrix of geodesic distances.

	* matlab/PointsToolbox/triuvec.m: (0.1.0)

	- triuvec  Extract upper triangular part into vector form.

2014-10-08  Darryl McClymont  <darryl.mcclymont@gmail.com>

	* Add matlab/ThirdPartyToolbox/bwdistsc.m:
	* Add matlab/ThirdPartyToolbox/license-bwdistsc.txt:

	- Computes a distance transform for anisotropic voxel dimensions.

2014-10-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_intraframe_reg.m: (0.2.0)

	- Register colour images without converting to grayscale. The main
	change, apart from taking advantage of the new versions of our
	elastix and transformix functions that can deal with colour, is
	that the registration uses
	'MultiMetricMultiResolutionRegistration', so that it can deal with
	more than one channel.

	- Allow an initial transform. This way, we can use the original
	histology images, and pass the result of the rigid registration as
	initial transforms. We will also be able to run e.g. 4 iterations
	of diffusion, and then if we want to diffuse more, simply pass the
	nested transforms from those 4 iterations as the new initial
	transforms.

	- Simplify the code a lot, by putting the registration of extreme
	and intermediate slices in local functions.

	- Put temp duplicate images in a temp directory in /tmp, instead
	of directly in /tmp. This keeps things tidy, and it's easier to
	delete them later too.

	* matlab/ItkToolbox/transformix.m: (0.2.3)

	- If transform is empty, return input image instead of giving an
	error.

2014-10-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix_compose_afftransf.m: (0.2.2)

	- Add 'TranslationTransform' and 'EulerTransform' to the list of
	affine transforms that are accepted.

	- Use tf2 instead of tf1 as the template for the combined
	transform. It makes sense, as tf2 is the last transform applied to
	the image. We still maintain the rotation center from tf1, though.

	* matlab/test/test_elastix_compose_afftransf.m: (0.1.1)

	- Add section "Different image size in each transform".

	* matlab/ItkToolbox/elastix_read_file2param.m: (0.2.3)

	- Fix bug. Matlab str2num() converts 'true'/'false' to 1/0, rather
	than [], so those strings were being incorrectly detected as
	numeric values.

	* matlab/CardiacToolbox/histology_preprocessing.m: (0.2.0)

	- Do not convert to grayscale internally. Now we can use
	elastix/transformix with colour images. If grayscale is needed,
	convert the images before passing them to this function.

2014-09-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix.m: (0.4.0)

	- Enable registration of multi-channel images (e.g. colour
	images), using the "multi-image" syntax in elastix.

	* matlab/ItkToolbox/elastix_read_file2param.m: (0.2.2)
	* matlab/ItkToolbox/elastix_write_param2file.m: (0.2.2)

	- Allow multivalued fields, e.g.

	(FixedImagePyramid "FixedSmoothingImagePyramid" "FixedSmoothingImagePyramid" "FixedSmoothingImagePyramid")

2014-09-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m: (0.2.1)

	- Upgrade with same changes we made for
	tri_ccqp_smacof_nofold_sph_pip().

	- Allow AMIN, AMAX to be vectors so that we can pass different
	volume boundaries to each mesh tetrahedron.

	- SCIP will fail to work properly without warning when FEASTOL is
	too small. In particular, FEASTOL<numerics/epsilon (def 1e-9) will
	make FEASTOL=0. See below email reply by Stefan Vigerske in SCIP
	mailing list. Thus, now we don't let it be <1e-9.

	- Fix bug. According again to the email response below, contraints
	need to be modified as VMIN+FEASTOL*max(1, |VMIN|), instead of the
	VMIN+FEASTOL that we had before. (See similar entry below in
	Changelog for tri_ccqp_smacof_nofold_sph_pip for more details).

	- Do not create constraints for the cases f(x) > -Inf and f(x) <
	Inf. These constraints have no effect on the problem, and they
	produce the following warning in SCIP:

	"WARNING: indefinite expression tree in	constraint <c45>"

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m: (0.2.5)

	- Fix bug. We were checking VMIN as if it only could be a scalar,
	not a vector.

	* matlab/ManifoldToolbox/trifacet_signed_area.m: (0.2.0)

	- Add output argument with negative triangles reoriented so that
	all have a positive signed area.

2014-09-23  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/histology_intraframe_reg.m: (0.1.0)

	- histology_intraframe_reg Registration diffusion of histology
	slices.

	* Add matlab/CardiacToolbox/histology_preprocessing.m: (0.1.0)

	- histology_preprocessing Prepare slices for intra-histology
	registration.

2014-09-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix_read_file2param.m: (0.2.1)
	* matlab/ItkToolbox/elastix_write_param2file.m: (0.2.1)

	- Fix bug. Not all files will have field
	"InitialTransformParametersFileName", e.g. registration parameter
	files would ignore that field. The function was giving an error if
	the field was not present.

	* matlab/ItkToolbox/elastix.m: (0.3.2)
	* matlab/ItkToolbox/transformix.m: (0.2.2)

	- If transform/parameter files are nested, delete all of them.

	* Add matlab/ItkToolbox/elastix_delete_param_file.m: (0.1.0)

	- elastix_delete_param_file Delete nested transform files.

2014-09-16  Ramon Casero  <rcasero@gmail.com>

	* Rename matlab/ItkToolbox/elastix_compose_transf.m as
	matlab/ItkToolbox/elastix_compose_afftransf.m:
	* matlab/CardiacToolbox/blockface_correct_frame_shifts.m: (0.1.1)
	* matlab/ItkToolbox/elastix_transf_imcoord2.m: (0.1.1)
	* Rename matlab/test/test_elastix_compose_transf.m as
	matlab/test/test_elastix_compose_afftransf.m:

	- elastix/transformix work also with transforms that are not
	affine (e.g. B-spline), so this function name is misleading.

	* matlab/ItkToolbox/elastix_read_file2param.m: (0.2.0)

	- Enable nested transforms.

	* matlab/ItkToolbox/elastix_write_param2file.m: (0.2.0)

	- Enable nested transforms.

2014-09-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix.m: (0.3.1)

	- Kind of fix bug, but not completely. When an initial transform
	is provided, the result transform provided by elastix links to it
	in field t.InitialTransformParametersFileName. When the initial
	transform is provided as a struct, this means that we return a
	link to a temp file that has been deleted.

	Here, we are going to always return
	t.InitialTransformParametersFileName='NoInitialTransform', but
	this is just a quick fix because I won't be able to work on this
	for the next week. What we have to do next is allow for nesting in
	the t struct. I.e., t.InitialTransformParametersFileName=t0, where
	t0 is another transform struct.

2014-09-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/elastix_read_reg_output.m: (0.2.1)

	- Minor. Struct field was lowercase instead of uppercase.

	* matlab/ItkToolbox/elastix.m: (0.3.0)

	- Add optional parameters: 't0' to provide an initial transform to
	apply to the image before the registration. 'fMask', 'mMask' to
	provide masks for the fixed and moving image.

	* matlab/ItkToolbox/transformix.m: (0.2.1)

	- Fix bug. When image was grayscale, imfile was not a cell array,
	but it was indexed as such.

	* matlab/ItkToolbox/transformix.m: (0.2.0)

	- Now colour input figures are transformed and output in colour
	too, but transforming each channel, instead of converting to
	grayscale.

2014-09-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/histology_blockface_preprocessing.m: (0.2.0)

	- Now we input the elliptical (heart outline) and the polygonal
	(wax blockface) masks.

	- Correct scratches in block face.

	- Instead of finding threshold between background and foreground
	as the intersection of two gaussians, which doesn't work too well,
	we simply find the mode of intensities. Because there's a lot more
	background than tissue, the mode corresponds to the most typical
	background value. We then make all intensities that are <= the
	mode equal to zero. This is a very conservative threshold, that
	removes some background, but preserves practically all tissue.

	- We then extend the histograms of blockface and histology to
	cover the whole intensity range.

2014-08-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_create_masks.m: (0.2.0)

	- Instead of expr, input directory and result of dir().

	* matlab/CardiacToolbox/blockface_correct_perspective.m: (0.2.0)

	- Rewrite. Instead of for 2 images, apply perspective correction
	to set of files. Use new projective2d object and imwarp instead of
	old tform and imtransform.

	* Add matlab/CardiacToolbox/blockface_correct_frame_shifts.m: (0.1.0)

	- blockface_correct_frame_shifts Correct shift between blockface
	image frames.

	* matlab/ItkToolbox/elastix_compose_transf.m: (0.2.1)

	- Transpose affine matrix to match Matlab's tform convention.

	* matlab/ItkToolbox/elastix_compose_transf.m: (0.2.0)

	- Simplify. For the moment, only similarity transforms, but now we
	can convert any elastix affine transform to an affine matrix,
	compose the transforms, and then return a transform with the most
	flexible type of the two.

2014-08-22  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_intraframe_reg.m: (0.4.1)

	- 90 Blockface needs a larger value of Scales.

	* Add matlab/ItkToolbox/elastix_compose_transf.m: (0.1.0)
	* Add matlab/test/test_elastix_compose_transf.m: (0.1.0)
	* Add matlab/test/SimilarityTransformExample.mat:

	- elastix_compose_transf Composition of two transforms in elastix
	format.

2014-08-21  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ItkToolbox/elastix_transf_imcoord2.m: (0.1.0)

	- elastix_transf_imcoord Convert 2D pixel coordinates using
	elastix/transformix transform.

	* Move elastix functions to matlab/ItkToolbox:

	- matlab/FiltersToolbox/elastix.m
	- matlab/FiltersToolbox/elastix_read_file2param.m
	- matlab/FiltersToolbox/elastix_read_reg_output.m
	- matlab/FiltersToolbox/elastix_write_param2file.m
	- matlab/FiltersToolbox/transformix.m

2014-08-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/smacof.m: (0.1.0)

	- Add opts.Update = 'reduced' for the reduced form of the Guttman
	update proposed by Gasner et al.

	* Rename matlab/CardiacToolbox/blockface_find_frame_shifts.m as
	matlab/CardiacToolbox/blockface_intraframe_reg.m.

	- This function no longer tries to detect jumps, which is more
	complicated, but only do the registration between frames.

	* matlab/CardiacToolbox/blockface_find_frame_shifts.m: (0.4.0)

	- Change translation transform by similarity transform, because in
	some cases, frames shift not by translation but because the camera
	seems to zoom in or out a bit.

	- Tune the registration parameters so that they get a good precise
	registration between frames (e.g. switch to
	AdvancedMattesMutualInformation, make iteration steps smaller,
	etc.).

	- Don't return tnorm, as with similarity transforms it doesn't
	make much sense. Instead, we return all the parameters of the
	registration.

	- Use struct instead of file for registration parameters.

	- Swap input arguments so that path goes first, then file names.

	* matlab/FiltersToolbox/elastix.m: (0.2.0)

	- Input parameters for the registration can be a struct apart from
	a text file now.

	- Input images (whether input is a filename or array) that are RGB
	(colour) are now converted to grayscale before processing, because
	elastix will only use the first channel otherwise, and ignore the
	rest.

	- Rename input argument param -> opts.

	* Add matlab/FiltersToolbox/elastix_read_file2param.m: (0.1.0)

	- elastix_read_file2param Read file with elastix parameters to
	struct.

	* matlab/FiltersToolbox/elastix_read_reg_output: (0.2.0)

	- Move code to read TransformParameters.0.txt to independent
	function elastix_read_file2param().

	* matlab/FiltersToolbox/elastix_write_param2file.m: (0.1.1)

	- Update help header with new function.

2014-08-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/transformix: (0.1.1)

	- Check that T is either a struct or string. Correct the help
	header to note that it can be either.

	* Add matlab/FiltersToolbox/transformix: (0.1.0)

	- transformix Matlab interface to the image warping program
	"transformix".

	* Add matlab/FiltersToolbox/elastix_write_param2file.m: (0.1.0)

	- elastix_write_param2file Write struct with elastix parameters to
	file.

2014-08-15  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/blockface_find_frame_shifts.m: (0.3.0)

	- Shift output variables, so that t(I) corresponds to the
	transfrom from frame I to frame I-1, etc. This makes that tnorm, t
	and iterInfo have one element per frame, and makes it easier to
	work with them.

2014-08-14  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/elastix.m: (0.1.0)

	- elastix Matlab interface to the image registration program
	"elastix".

	* matlab/CardiacToolbox/blockface_find_frame_shifts.m: (0.2.0)

	- Instead of returning the translation transform as a 2-vector
	with the X, Y translation, now we return a struct with all the
	fields in the TransformParameters.0.txt file.

	- Intead of reading TransformParameters.0.txt manually, we now use
	elastix_read_reg_output().

	- Instead of creating temp files and directories and calling
	elastix by hand using system(), we use new function elastix() to
	do the registration.

	- Fix bug. We were registering the corrected grayscale moving
	image to the original RGB fixed image.

	- Rename output arguments tx, txnorm as t, tnorm.

	- Add output argument iterInfo.

	* matlab/FiltersToolbox/elastix_read_reg_output.m: (0.1.2)

	- Rename output argument param as t, as this variable contains the
	transform result, not algorithm parameters.

2014-08-13  Ramon Casero  <rcasero@gmail.com>

	* Rename matlab/FiltersToolbox/elastix_read_transf_result.m as
	matlab/FiltersToolbox/elastix_read_reg_output.m.

	* matlab/FiltersToolbox/elastix_read_transf_result.m: (0.1.1)

	- Rename output iter as iterInfo.

	- Remove double quotes "" from text fields in the struct.

	* Add matlab/FiltersToolbox/elastix_read_transf_result.m: (0.1.0)

	- elastix_read_transf_result Read the result image and transform
	parameters of a registration computed with elastix.

	* Rename matlab/CardiacToolbox/blockface_frame_shifts.m as
	matlab/CardiacToolbox/blockface_find_frame_shifts.m.

2014-08-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/scimat_surface2seg.m: (0.1.1)

	- Fix bug. Instead of passing the size of the image volume, we
	were passing the size of the size vector.

	* Add matlab/CardiacToolbox/blockface_frame_shifts.m: (0.1.0)

	- blockface_frame_shifts Find translation shifts between
	consecutive blockface frames.

2014-08-06  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/scimat_surface2seg.m: (0.1.0)

	- scimat_surface2seg Convert triangular mesh into segmentation.

2014-08-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/surface_tridomain.m: (0.3.0)

	- Add 'sphunif' option, to generate uniform meshing of the sphere.

	* Move matlab/PointsToolbox/surface_interp.m to
	matlab/ManifoldToolbox/surface_interp.m.
	* Move matlab/PointsToolbox/surface_param.m to
	matlab/ManifoldToolbox/surface_param.m.

	- To group them with surface_tridomain(), and highlight that these
	are manifold functions.

	* Add matlab/PointsToolbox/surface_interp.m: (0.0.1)
	* Delete matlab/PointsToolbox/surface_interpolation.m:

	- SURFACE_INTERP Interpolate an open or closed surface from a
	parametrized scattered set of points.

	- Cannibalize old surface_interpolation() to make more modular,
	leaner functions. We already added surface_param(), that took the
	parametrization block. Now, surface_interp() takes the
	interpolation methods themselves. Another function,
	surface_domain() will provide the sampling of the surface domain.

	- surface_interp() is still in alpha, because I have tested it
	only with spherical interpolation. I added a warning for the user.

2014-08-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/surface_param.m: (0.6.1)

	- Some missing and wrong info in help header. Move CALD after
	smdscale.

2014-07-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/CMakeLists.txt: (0.3.1)
	* Add matlab/FileFormatToolbox/CMakeLists.txt: (0.1.1)

	- We want to compile Matlab function vmu2png.m into a binary that
	we can run from the command line.

2014-07-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/vmu2png.m (0.2.1)

	- Save 'PixelHeight' and 'PixelWidth' as an "Other" field in the
	PNG image. Although these can be computed from
	e.g. 'PhysicalHeight'and 'YResolution', in case of round-off
	errors we want to have the original value from the microscope too.

	- Fix bug. When path to file was empty (i.e. file is in current
	directory), the function tried to save the PNG to the filesystem's
	root directory '/'.

2014-07-23  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.9.2)

	- Make gerardus compile for Matlab 2013b on linux. This requires
	Boost 1.49, and g++ 4.7. Thanks to Louie Cardone-Noott, who made
	the original patch for this.

2014-07-10  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/histology_blockface_preprocessing.m (0.1.0)

	- HISTOLOGY_BLOCKFACE_PREPROCESSING Prepare histology and
	blockface for registration.

2014-07-09  Ramon Casero  <rcasero@gmail.com>

	* Rename matlab/CardiacToolbox/correct_blockface_perspective.m as
	matlab/CardiacToolbox/blockface_correct_perspective.m (0.1.0)

	* matlab/CardiacToolbox/blockface_imread_gray.m (0.1.1)

	- Output image volume is now the same class of the images in the
	files, instead of double.

	* matlab/CardiacToolbox/blockface_equalise_illumination.m (0.3.0)

	- Changes in the method. After estimating block surface
	illumination, crop out too little or large illumination
	values. They correspond to interpolation artifacts on the edges,
	and produce a bad equalisation.

	- After equalisation, rescale intensity range so that it matches
	intensity range of the original image.

	- Convert equalised image from double to the type of the input
	image.

	* Rename matlab/CardiacToolbox/equalise_blockface_illumination.m
	as matlab/CardiacToolbox/blockface_equalise_illumination.m (0.2.0)

	* Add matlab/CardiacToolbox/blockface_imread_gray.m (0.1.0)

	- BLOCKFACE_IMREAD_GRAY Read multiple image files into grayscale
	volume.

	* CardiacToolbox/blockface_create_masks.m (0.1.1)

	- Fix bug. We need a wait() to that user can reposition or modify
	the ellipse and polygon.

	* Add matlab/CardiacToolbox/blockface_create_masks.m (0.1.0)

	- BLOCKFACE_CREATE_MASK User interface to create the elliptical
	and polygonal segmentation masks used to correct blockface
	illumination.

2014-06-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m (0.4.2)

	- Add option sphparam_opts.AllInnerVerticesAreFree. For local
	SMACOF only, this allows to recompute the free vertices in each
	local neighbourhood. When the option is set to true, then in each
	local neighbourhood we find the boundary, and then all the
	vertices inside are considered to be free. This option makes local
	neighbourhoods more "convex", and can help solve difficult
	ones. On the other hand, it increases the number of free vertices,
	which implies solving larger problems.

2014-06-22  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m (0.4.1)

	- First version that works in a full resolution RV alpha-shape
	mesh (doing three passes with different volume constraint
	boundaries).

	- Fix local neighbourhoods. We were allowing for holes in the
	local neighbourhoods (see comments in the code for a detailed
	explanation). Now the local neighbourhoods are simply connected.

	- Put the code that computes the local neighbourhoods in an
	internal function called get_local_neighbourhood(). This makes the
	code more readable, modular and easier to debug.

	- Make the check of the radius of the intial guess points less
	strict (from 1e-10 to 1e-8 error).

2014-06-21  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m (0.4.0)

	- Parallelize the consmacof-local method converting the for loop
	that untangles each connected component into a parfor loop.

2014-06-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m (0.3.6)

	- Remove 'LocalConvexHull' option. It lets the algorithm move
	vertices that belong to another tangled component, which causes
	errors, as we don't recompute tangled vertices in each loop. Now
	that the algorithm has been fixed, it doesn't seem necessary
	either.

	- Remove code that decided between the intial guess and the found
	solution. For local constrained SMACOF, as we want to keep the
	found solution even if its not valid, so that we can run the
	algorithm again with different bounds.

	* matlab/ManifoldToolbox/tri_sphparam.m (0.3.5)

	- Fix bug. As now we don't assing NaNs to vertices of local
	components that cannot be untangled, we also need to change the
	test in topology check to see whether a valid solution was
	returned.

	- Add note to the help header: Note that it seems that SCIP, or
	maybe the way we input/output the problem to it causes small
	tolerances in the constraints. E.g. if VMIN=1, we may get a
	tetrahedron in the solution with volume 1-1e-5. This will be
	detected by TopologyCheck as a violation of the constraint, but it
	shouldn't be a problem in most cases.

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.2.4)

	- Allow VMIN, VMAX to be vectors so that we can pass different
	volume boundaries to each mesh tetrahedron.

	- Fix bug. One of the constraints was never written because it had
	if(vmax(I)>inf) instead of if(vmax(I)<inf).

	* matlab/ManifoldToolbox/tri_sphparam.m (0.3.4)

	- Adapt to change in tri_ccqp_smacof_nofold_sph_pip(). Now VMIN,
	VMAX can be vectors.

	- When a local component cannot be untangled, leave its vertices
	untouched intead of converting them to NaN.

2014-06-18  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m (0.3.3)

	- Fix general structure of the function so that it works with all
	the methods. Now each method has to compute the stress of the
	solution (sigmasol), because e.g. MDS uses a full distance matrix,
	but constrained SMACOF uses sparse matrices. After exiting the
	methods, common code can check whether the solution is valid
	(yIsValid). Also, we take into account that some methods produce
	sigma scalar, and others sigma cell array.

	- When the initial guess is empty, give it sigma0 = Inf instead of
	empty, so that the MDS method will always replace the intial guess
	by the found solution.

	- Stop checking self intersecting triangles to select tangled
	vertices for constrained SMACOF, in addition to negative
	areas. Now that the algorithm seems fixed, negative areas seem to
	be enough, as they should.

	- Fix bug in case 'smacof', 'consmacof-global',
	'consmacof-local'. Input guess should be y0, not y, that doesn't
	exist.

	- In 'consmacof-local', the solution now updates only the free
	vertices, and leaves the fixed vertices as they were
	originally. This makes a difference when SCIP doesn't find a
	solution, and it returns NaN for all the points coordinates.

	- Fix bug. Run topology check only if the solution has no
	NaN. Otherwise, it produces a segfault.

	* matlab/PointsToolbox/cons_smacof_pip.m (0.4.2)

	- Fix bug. If dx, dy are sparse matrices, sigma0 will be a sparse
	scalar, and this gives an error with a fprintf() call.

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.2.3)

	- Fix bug. Bad syntax for max().

2014-06-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.2.2)

	- SCIP will fail to work properly without warning when FEASTOL is
	too small. In particular, FEASTOL<numerics/epsilon (def 1e-9) will
	make FEASTOL=0. See below email reply by Stefan Vigerske in SCIP
	mailing list. Thus, now we don't let it be <1e-9.

	- Fix bug. According again to the email response below, contraints
	need to be modified as VMIN+FEASTOL*max(1, |VMIN|), instead of the
	VMIN+FEASTOL that we had before.

	http://listserv.zib.de/pipermail/scip/2014-May/002014.html

	"setting the feastol that small is not supported. There is another
	tolerance (numerics/epsilon) that is (silently) assumed to be
	smaller than feastol, and by default 1e-9. Numbers smaller than
	epsilon are treated as 0.

	Further, a feastol of 1e-10 while still having values like 1e4 in
	your problem might give issues when having to use double
	precision. The limited precision of the floating point numbers is
	also the reason why -0.166666666666667 ends up as
	-0.16666666666666699048.

	Bottomline: Don't set feastol too small."

2014-06-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m (0.2.1)

	- Do not create constraints for the cases f(x) > -Inf and f(x) <
	Inf. These constraints have no effect on the problem, and they
	produce the following warning in SCIP:

	"WARNING: indefinite expression tree in	constraint <c45>"

2014-06-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_index2world.m (0.4.0)
	* matlab/FileFormatToolbox/scimat_world2index.m (0.4.0)
	* matlab/ManifoldToolbox/tri_find_nonmanifold_vertex.m (0.2.0)

	- Interface change. Input variable AX becomes SCIMAT. Now, instead
	of passing scimat.axis, the user has to pass scimat. This way, we
	will also be able to get scimat.rotmat without having to add
	another input variable.

	* matlab/CardiacToolbox/scimat_rv_crescent_tips.m (0.2.1)
	* matlab/FileFormatToolbox/scimat_save.m (0.6.3)
	* matlab/FiltersToolbox/scimat_centroids.m (0.2.1)
	* matlab/FiltersToolbox/scimat_intersect_plane.m (0.4.2)
	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m (0.7.2)
	* matlab/FiltersToolbox/skeleton_label.m (0.15.6)
	* matlab/FiltersToolbox/scimat_box.m (0.2.1)
	* matlab/FiltersToolbox/scimat_skeleton_prune.m (0.5.1)
	* matlab/FiltersToolbox/scimat_estimate_bias_field.m (0.2.1)
	* matlab/FiltersToolbox/scimat_seg2label_stats.m (0.9.1)
	* matlab/FiltersToolbox/scimat_seg2voxel_stats.m (0.2.1)
	* matlab/ManifoldToolbox/scimat_tri_to_raster.m (0.2.2)
	* matlab/PointsToolbox/bwmesh.m (0.1.8)
	* matlab/PointsToolbox/scimat_simlandmarks_thickslice.m (0.1.2)
	* matlab/PointsToolbox/scimat_dmatrix_thickslice.m (0.1.5)
	* matlab/PointsToolbox/pts_mesh.m (0.2.2)
	* matlab/PointsToolbox/scimat_pca.m (0.2.1)
	* matlab/test/test_scimat_dmatrix_imgeodesic.m (0.1.3)
	* matlab/test/test_surface_param.m (0.6.3)

	- Correct the functions so that they accommodate the interface
	change of scimat_index2world, scimat_world2index and
	tri_find_nonmanifold_vertex.

2014-06-12  Ramon Casero  <rcasero@gmail.com>

	* Rename matlab/FileFormatToolbox/scinrrd_tiff2nrrd.m as
	matlab/FileFormatToolbox/scimat_tiff2scimat.m (0.3.0)

	* Rename matlab/FiltersToolbox/scinrrd_centroids.m as
	matlab/FiltersToolbox/scimat_centroids.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_regionprops.m as
	matlab/FiltersToolbox/scimat_regionprops.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_seg2label_stats.m as
	matlab/FiltersToolbox/scimat_seg2label_stats.m (0.9.0)

	* Rename
	matlab/FiltersToolbox/scinrrd_optimal_intersecting_plane.m as
	matlab/FiltersToolbox/scimat_optimal_intersecting_plane.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_crop.m as
	matlab/FiltersToolbox/scimat_crop.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_ndgrid.m as
	matlab/FiltersToolbox/scimat_ndgrid.m (0.3.0)

	* Rename
	matlab/FiltersToolbox/scinrrd_vertical_orientation_pca_basis.m as
	matlab/FiltersToolbox/scimat_vertical_orientation_pca_basis.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_estimate_bias_field.m as
	matlab/FiltersToolbox/scimat_estimate_bias_field.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_gradients.m as
	matlab/FiltersToolbox/scimat_gradients.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_papillary_muscles.m as
	matlab/FiltersToolbox/scimat_papillary_muscles.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_box.m as
	matlab/FiltersToolbox/scimat_box.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_seg2voxel_stats.m as
	matlab/FiltersToolbox/scimat_seg2voxel_stats.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_skeleton_prune.m as
	matlab/FiltersToolbox/scimat_skeleton_prune.m (0.5.0)

	* Rename
	matlab/FiltersToolbox/scinrrd_vertical_orientation_pca_basis.m as
	matlab/FiltersToolbox/scimat_vertical_orientation_pca_basis.m (0.3.0)

	* Rename matlab/PointsToolbox/scinrrd_pca.m as
	matlab/PointsToolbox/scimat_pca.m (0.2.0)

	* Rename matlab/CardiacToolbox/scinrrd_rv_crescent_tips.m as
	matlab/CardiacToolbox/scimat_rv_crescent_tips.m (0.2.0)

	* matlab/FileFormatToolbox/scimat_load.m (0.4.4)
	* matlab/FiltersToolbox/scimat_blockproc3.m (0.3.2)
	* matlab/FiltersToolbox/skeleton_label.m (0.15.5)

	- In the early days of Gerardus, we called "scimat" structs as
	"nrrd", which was a bad choice. Here we rename the functions that
	were still called "scinrrd_*", and/or had "nrrd" as input/output
	arguments.

	* Add matlab/FiltersToolbox/scimat.m (0.1.0)
	* matlab/FileFormatToolbox/scimat_load.m (0.4.3)
	* matlab/FileFormatToolbox/scimat_save.m (0.6.2)
	* matlab/CardiacToolbox/is_lv_on_the_left.m (0.1.2)
	* matlab/FileFormatToolbox/scimat_index2world.m (0.3.1)
	* matlab/FileFormatToolbox/scimat_world2index.m (0.3.1)
	* matlab/FileFormatToolbox/scimat_im2scimat.m (0.2.1)
	* matlab/FiltersToolbox/scimat_intersect_plane.m (0.4.1)
	* matlab/FiltersToolbox/scinrrd_ndgrid.m (0.2.2)
	* matlab/FiltersToolbox/scimat_squeeze.m (0.2.1)
	* matlab/FiltersToolbox/scimat_unsqueeze.m (0.2.1)

	- Help file that contains information about the SCIMAT struct.

	* Rename matlab/FileFormatToolbox/scinrrd_im2nrrd.m to
	 matlab/FileFormatToolbox/scimat_im2scimat.m (0.2.0)

	* Rename matlab/FileFormatToolbox/scinrrd_world2index.m to
	matlab/FileFormatToolbox/scimat_world2index.m (0.3.0)

	* Rename matlab/FileFormatToolbox/scinrrd_index2world.m
	matlab/FileFormatToolbox/scimat_index2world.m (0.3.0)

	* Rename matlab/FiltersToolbox/scinrrd_intersect_plane.m to
	matlab/FiltersToolbox/scimat_intersect_plane.m (0.4.0)

	* Rename matlab/FiltersToolbox/scinrrd_squeeze.m to
	matlab/FiltersToolbox/scimat_squeeze.m (0.2.0)

	* Rename matlab/FiltersToolbox/scinrrd_unsqueeze.m to
	matlab/FiltersToolbox/scimat_unsqueeze.m (0.2.0)

	* Rename matlab/FileFormatToolbox/scinrrd_seg3d2matlab to
	matlab/FileFormatToolbox/scimat_seg3d2matlab (0.2.0)

	- Update deprecated syntax for narginchk, nargoutchk.

	* matlab/FileFormatToolbox/scimat_load.m (0.4.2)
	* matlab/FileFormatToolbox/scimat_save.m (0.6.1)
	* matlab/CardiacToolbox/scinrrd_rv_crescent_tips.m (0.1.1)
	* matlab/CardiacToolbox/is_lv_on_the_left.m (0.1.1)
	* matlab/ManifoldToolbox/tri_find_nonmanifold_vertex.m (0.1.1)
	* matlab/ManifoldToolbox/scimat_tri_to_raster.m (0.2.1)
	* matlab/FiltersToolbox/scinrrd_ndgrid.m (0.2.1)
	* matlab/FiltersToolbox/scinrrd_estimate_bias_field.m (0.1.1)
	* matlab/FiltersToolbox/scinrrd_box.m (0.1.1)
	* matlab/FiltersToolbox/scinrrd_papillary_muscles.m (0.1.1)
	* matlab/FiltersToolbox/scinrrd_centroids.m (0.1.1)
	* matlab/test/test_scinrrd_surface_interpolation.m (0.1.2)
	* matlab/test/test_scimat_dmatrix_imgeodesic.m (0.1.2)
	* matlab/test/test_itk_imfilter.m (0.4.5)
	* matlab/test/test_smdscale.m (0.3.2)
	* matlab/PointsToolbox/scimat_dmatrix_thickslice.m (0.1.4)
	* matlab/PointsToolbox/scinrrd_pca.m (0.1.1)
	* matlab/PointsToolbox/scimat_simlandmarks_thickslice.m (0.1.1)
	* matlab/PointsToolbox/pts_mesh.m (0.2.1)
	* matlab/PointsToolbox/scinrrd_surface_interpolation.m (0.7.1)
	* matlab/PointsToolbox/bwmesh.m (0.1.7)
	* matlab/FiltersToolbox/skeleton_label.m (0.15.4)
	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m (0.7.1)
	* matlab/FiltersToolbox/scinrrd_seg2label_stats.m (0.8.7)
	* matlab/test/test_surface_param.m (0.6.2)

	- Gerardus functions used by this function have been renamed.

	- Update deprecated syntax for narginchk, nargoutchk when
	required.

	- Minor style updates to help header, e.g. stop at the end of
	summary, function name in lowercase, no space before/after
	bracket.

	* Delete
	matlab/FiltersToolbox/scinrrd_optimal_intersecting_plane_old.m.

2014-06-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_im2nrrd.m (0.2.0)
	* matlab/FileFormatToolbox/scinrrd_world2index.m (0.3.0)

	- Pablo Lamata contribution.

	- Update narginchk/nargoutchk syntax where appropriate.

2014-06-07  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/correct_blockface_perspective.m (0.1.0)

	- CORRECT_BLOCKFACE_PERSPECTIVE Transform Bewster angle blockface
	image onto 90 projection.

2014-06-05  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/equalise_blockface_illumination.m
	(0.1.0)
	* Add matlab/test/R_55_0001.bmp
	* Add matlab/test/polymask.mat
	* Add matlab/test/ellipmask.mat

	-EQUALISE_BLOCKFACE_ILLUMINATION Correct illumination
	inhomogeneities in blockface photography.

2014-05-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.3.2)

	- Fix bug. No need to check topology if we know that SMACOF could
	not find a valid solution.

2014-05-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.4.1)

	- Fix bug. If the user provides a problem with no free vertices
	(i.e. there's nothing to optimise), make the function exit
	gracefully instead of with an error.

2014-05-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.4.0)
	* matlab/test/test_cons_smacof_pip.m: (0.2.5)

	- Fix bug. In some cases, SCIP was returning a solution as
	"valid", but when we checked it, some of the tetrahedra had small
	negative areas. After asking in the SCIP mailing list, Stefan
	Vigerske noted that constraints are fulfilled within a
	tolerance. E.g. SCIP considers 0 >= -1e-8 as true for a 1e-6
	tolerance. But for us, this tolerance is not acceptable because it
	produces small overlaps in the output parametrization. This has to
	be corrected in two places: In the functions that create the
	string of constraints, so that the constraint+tolerance are always
	within the actual constraint values we want, and in this function,
	being able to modify the tolerance ('scip_opts.numerics_feastol').

	- Fix bug. The initial guess may have a low stress, but be an
	invalid solution. Because we don't have a function to check the
	validity of the initial solution yet, we always replace the
	initial guess by any valid solution found by SMACOF. In theory, if
	the initial guess is already the best valid solution, this could
	lead to the algorithm returning a suboptimal valid solution. But
	we hope that in practice, the algorithm wouldn't degrade the
	solution much.

	- Fix bug. If SCIP cannot find a valid solution (e.g. we set a too
	short time limit or it doesn't exist), then we cannot update the
	current solution. This also means that we need to stop the
	optimization, because the problem matrices and vectors won't
	change, and basically we would try to solve the same problem
	again, not reaching a solution either. Note however that it's
	possible that we have been finding valid solutions before, and
	it's only at a later iteration that we get to this "not valid
	solution" situation. Thus, we cannot assume that the stop
	condition below these lines means "error".

	- Add output variable to separate initial guess (sigma0) from
	stress values obtained during iterations of the SMACOF algorithm
	(sigma). This is to emphasize that we can compute the initial
	stress, but currently we cannot check whether the constraints are
	fulfilled or not. On the other hand, once SMACOF starts running,
	all sigma stress values will correspond to valid solutions (if
	there's no valid solution, sigma(I)=NaN, and the algorithm stops).

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m: (0.2.0)
	* matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m: (0.2.0)
	* matlab/ManifoldToolbox/tri_sphparam.m: (0.3.1)

	- Fix bug. In some cases, SCIP was returning a solution as
	"valid", but when we checked it, some of the tetrahedra had small
	negative areas. After asking in the SCIP mailing list, Stefan
	Vigerske noted that constraints are fulfilled within a
	tolerance. E.g. SCIP considers 0 >= -1e-8 as true for a 1e-6
	tolerance. But for us, this tolerance is not acceptable because it
	produces small overlaps in the output parametrization. This has to
	be corrected in two places: We need to be able able to modify the
	SCIP tolerance ('scip_opts.numerics_feastol') in the SMACOF
	function; and in this function, constraint intervals need to be
	modified, so that constraint+tolerance values are always within
	the actual constraint values we want.

	* Add matlab/ManifoldToolbox/sphtri_signed_vol.m: (0.1.1)

	- Fix bug. Volume of tetrahedron is det/6, not det.

2014-05-15  Ramon Casero  <rcasero@gmail.com>

	* release 0.10.0.

	- Build works for Linux and Windows.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.22)

	- Fix bug. In Windows, cgal_meshseg and cgal_checl_self_intersect
	cannot be linked here to boost_thread, or we get a "one or more
	multiply defined symbols found" link error.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.21)

	- Fix bug. cgal_meshseg and cgal_checl_self_intersect need to link
	against boost_thread.

	* CMakeLists.txt: (0.9.1)

	- Check that if we are in Windows, Gerardus is not on a network
	drive, as this will make CMake fail. As the error given by CMake
	will say nothing about the problem being the network drive, this
	is very confusing and annoying.

2014-05-13  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/vmu2png.m: (0.1.0)

	- VMU2PNG Convert a microscope image file from .vmu to .png
	format.

2014-05-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_save.m: (0.6.0)

	- Add output formats PNG (that allows saving images larger than
	4GB) with lossless compression, JPEG2000 and TIFF with
	AdobeDeflate compression.

2014-05-08  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scimat_load.m: (0.4.1)

	- Fix bug. Paul Cormack from Hamamatsu replied that pixel size is
	PhysicalWidth / PixelWidth, instead of PhysicalWidth /
	(PixelWidth-1).

	* matlab/FileFormatToolbox/scimat_load.m: (0.4.0)

	- Add new file format. Now we can read also .vmu (Hamamatsu
	Uncompressed Virtual Microscope Specimen) files.

	* matlab/FiltersToolbox/scinrrd_crop.m: (0.1.1)

	- When croppring, allow for a 4th dimension so that we can pass
	colour images with (row, col, slice, channel).

	- Update deprecated narginchk(), nargoutchk() syntax.

	* matlab/FileFormatToolbox/scinrrd_im2nrrd.m: (0.1.3)

	- Remove the limitation that input image must have 3 dimensions so
	that we can pass colour images with (row, col, slice, channel).

2014-05-07  Ramon Casero  <rcasero@gmail.com>

	* Rename matlab/FileFormatToolbox/scinrrd_load.m as matlab/FileFormatToolbox/scimat_load.m: (0.3.0)
	* Rename matlab/FileFormatToolbox/scinrrd_save.m as matlab/FileFormatToolbox/scimat_save.m: (0.5.0)
	* matlab/CardiacToolbox/process_misas_patient.m: (0.1.1)
	* matlab/FileFormatToolbox/scinrrd_im2nrrd.m: (0.1.2)
	* matlab/FileFormatToolbox/scinrrd_tiff2nrrd.m: (0.2.5)
	* matlab/FiltersToolbox/scinrrd_seg2voxel_stats.m: (0.1.2)
	* matlab/ItkToolbox/itk_imfilter.m: (0.7.7)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.6.2)
	* matlab/PointsToolbox/scimat_dmatrix_thickslice.m: (0.1.3)
	* matlab/test/test_itk_imfilter.m: (0.4.4)
	* matlab/test/test_cgal_closest_trifacet.m: (0.2.4)
	* matlab/test/test_pca_normalize.m: (0.1.1)
	* matlab/test/test_scimat_dmatrix_imgeodesic.m: (0.1.1)
	* matlab/test/test_surface_interp.m: (0.2.1)
	* matlab/test/test_cgal_trifacet_area.m: (0.1.1)
	* matlab/test/test_closest_trifacet.m: (0.3.2)

	- Renaming of scinrrd_load(), scinrrd_save() as scimat_load(),
	scimat_save(), respectively.

	- While we are at it, update deprecated narginchk(), nargoutchk()
	syntax when needed, and change function name to lower case in the
	help header.

	* matlab/test/test_surface_param.m: (0.6.1)

	- Renaming of scinrrd_load(), scinrrd_save() as scimat_load(),
	scimat_save(), respectively.

	- Check for self-intersections.


2014-05-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.3.0)
	* matlab/test/test_tri_sphparam.m: (0.1.1)

	- Fix bug. We had broken the MDS method, by always producing an
	array of NaNs as the output parametrization. We only need to check
	whether we want to replace the found solution by the initial guess
	in the SMACOF-based methods (because in MDS, there's no initial
	guess).

	- Enforce that for the MDS method, there can be no initial guess.

	- Add new output variable that tells whether the output
	parametrization is valid (all tetrahedra with positive area).

	- In the MDS method, avoid recomputing the sphere radius. We stick
	to what the user provided, or the estimate based on the mesh area.

	- All methods use a matrix of chord distances instead of geodesic
	distances, so move the code to do the conversion out of each
	"case" in the "switch" statement, to have only one call for all
	methods.

	- Input variable Y is now Y0, which makes more sense and
	simplifies the code a bit.

2014-05-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.2.0)

	- Fix the way we select the solution we return. Now we checked
	whether the initial guess and found best solution are valid. If
	both are, then we return the one with less stress. If only one is
	valid, we return that one. If neither the initial guess is valid
	nor a valid solution could be found, we return an array of NaNs.

	- Change output syntax. Now return stress value of the initial
	guess as a separate variable.

2014-05-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_cons_smacof_pip.m: (0.2.5)

2014-04-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.3.5)

	- Fix bug. There's a bug in scip-3.1.0.linux.x86_64.gnu.opt.spx,
	which causes the solution to be written as an empty file when the
	quiet flag is used. As a workaround, we disable the quiet flag in
	that case, and instead send the output to /dev/null, as suggested
	by Stefan Vigerske.

2014-04-22  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FileFormatToolbox/ndpi_focus_points.m: (0.1.0)

	- NDPI_FOCUS_POINTS Read focus points coordinates from .ndpi image
	file obtained from a Hamamatsu microscope.

2014-04-07  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/amrf_seg.m: (0.1.0)

	- AMRF_SEG  Adaptive Markov Random Field segmentation.

	* Add matlab/FiltersToolbox/im_modes.m: (0.1.0)

	- IM_MODES Estimate typical values (modes) of
	foreground/background intensities in a greyscale image.

2014-03-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam.m: (0.1.1)

	- Classical MDS solution is invariant under a mirroring
	transformation. That is, if we had the ground truth, a mirror
	image over the longitude coordinate produces the same stress, but
	with all the triangle orientations inverted. Now we mirror the
	parametrization if this reduces the number of triangles with a
	negative orientation.

2014-03-15  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.3.4)

	- Update default version of SCIP, as now 3.1.0 has been released.

	* Delete matlab/ManifoldToolbox/tri_sphparam_cons_smacof.m:

	- This function has been rewritten as tri_sphparam, to make it
	more modular. Instead of forcing a series of parametrizations
	(namely CMDS followed by constrained SMACOF with local
	neighbourhoods, followed by global constrained SMACOF), we want to
	have a function where we can call individual methods, and that
	it's not limited to the SMACOF approach (we'll want to add the
	spherical harmonics method too).

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.3.3)

	- As the stress can go up and down, now the algorithm remembers
	the best solution is has found among all iterations, and will
	return that one.

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m: (0.1.3)

	- I forgot to commit the changes to this function when I fixed the
	bug for cons_smacof_pip(). We were doing it wrong when we had
	fixed vertices. We were expecting the distance matrix to be
	d(isFree, isFree). I commited them by mistake with in the last
	commit. I'm not commiting after chaning the version number just so
	that we have this log message.

	* Add matlab/ManifoldToolbox/tri_sphparam.m: (0.1.0)
	* Add matlab/test/test_tri_sphparam.m: (0.1.0)

	- Spherical parametrization of closed triangular mesh.

	* Add matlab/ManifoldToolbox/arclen2chord.m: (0.1.0)

	- Sphere arc length distances to Euclidean chord length distances.

	* Add matlab/ManifoldToolbox/chord2arclen.m: (0.1.0)

	- Euclidean chord length distances to sphere arc length distances.

2014-03-14  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_sphparam_cons_smacof.m: (0.2.0)

	- Uncomment the block to convert local neighbourhoods to convex
	hull of local neighbourhoods. Now this is run by default, and can
	be deactivated by the user.

	- Fix bug: Bad syntax in warning messages crashed function.

2014-03-13  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/tri_sphparam_cons_smacof.m: (0.1.0)

	- TRI_SPHPARAM_CONS_SMACOF Pseudo-isometric parametrization of
	closed triangular mesh using constrained SMACOF.

2014-03-09  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/graphcc.m: (0.1.0)

	- GRAPHCC  Split a graph into connected components.

	* Add matlab/ManifoldToolbox/sphtri_signed_vol.m: (0.1.0)

	- SPHTRI_SIGNED_VOL Signed volume of the elements of a sphere
	partitioned into tetrahedra.

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.3.2)

	- Now instead of giving an error when SCIP cannot find a solution,
	we deal with this gracefully. For instance, the constraints we
	have given may define an unfeasible problem. In that case, instead
	of exiting with error(), what we want to do is that the algorithm
	exits normally, but saying that the stopCondition is e.g. 'SCIP:
	unfeasible'. This could be used, for example to then relax the
	constraints and re-run the algorithm.

2014-03-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_cons_smacof_pip.m: (0.2.4)

	- For the sphere, update calls to cons_smacof_pip() to new
	syntax. We now pass isFree as a vector, and we pass the whole
	distance matrix.

	- For the sphere with the vertices pertubed to produce fold-over,
	make not specific to a sphere sampling of 10 vertices.

	- Remove last test for the sphere, that was redundant.

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.3.1)

	- Fix bug. Wrong index writting the upper triangular terms of the
	objective function in the 3D case.

2014-03-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.3.0)
	* matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m: (0.1.4)
	* matlab/test/test_cons_smacof_pip.m: (0.2.3)

	- Fix bug for 2D with fixed vertices. Add input argument isFree to
	cons_smacof_pip(). We were doing it wrong when we had fixed
	vertices. We were expecting the distance matrix to be d(isFree,
	isFree). However, we need distance values from the free to the
	fixed vertices too. Also, the objective function needs to have
	terms that will be xi * c, where xi is a free vertex, and c a
	constant that includes xj, a coordinate of a fixed vertex. Also,
	at each SMACOF step, we have to update only the coordinates of the
	free vertices. Fixed vertices don't change.

2014-02-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m: (0.1.2)

	- Fix bug. The function didn't work correctly for the case when we
	had fixed vertices. Fixed vertices are not variables in the
	problem, so variables need to be relabelled in the
	constraints. Also, the loop for generation of constraints was very
	slow for big matrices.

	- Decrease precision of scalars written to the PIP file to 15, as
	this seems to be the actual precision for Matlab doubles.

	* matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m: (0.1.3)

	- Decrease precision of scalars written to the PIP file to 15, as
	this seems to be the actual precision for Matlab doubles.

	* matlab/test/test_cons_smacof_pip.m: (0.2.2)

	- Change test so that we can test the sphere case with fixed
	vertices.

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.2.1)

	- Give unique names to the temporal files that are used to store
	the PIP model, and the solution output, so that we can run several
	instances of this function in parallel.

	- Decrease precision of scalars written to the PIP file to 15, as
	this seems to be the actual precision for Matlab doubles.

	* Add matlab/ThirdPartyToolbox/inhull.m:
	* Add matlab/ThirdPartyToolbox/license-inhull.txt:

	- tests if a set of points are inside a convex hull. By John
	D'Errico,
	http://www.mathworks.co.uk/matlabcentral/fileexchange/10226-inhull
edit e

2014-02-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.2.1)

	- Fix bug. We were creating objfunq with space for the whole upper
	triangular matrix of distance terms. So when we had a sparse
	distance matrix, we ended up with lots of empty cells, that
	translated into lots of empty lines in the PIP file.

	- Add SCIP option 'lp_threads', 'display_freq'.

	- Increase precision of scalars written to the PIP file to 16
	places, to make the most of the double type.

	* matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m: (0.1.2)
	* matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m: (0.1.1)

	- PIP allows exponentials, so simplify terms like x * x to x^2 in
	the output to the PIP file.

	- Increase precision of scalars written to the PIP file to 16
	places, to make the most of the double type.

2014-02-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_cons_smacof_pip.m: (0.2.1)

	- New toy example for the sphere, where the MDS solution produces
	fold-over, and the CCQP-SMACOF removes the fold-over.

	* Add matlab/ManifoldToolbox/tri_ccqp_smacof_nofold_sph_pip.m: (0.1.0)

	- TRI_CCQP_SMACOF_NOFOLD_SPH_PIP Constraints in PIP format for
	CCQP-SMACOF to ensure that 2D triangules on the sphere preserve
	positive orientation.

	* matlab/PointsToolbox/cons_smacof_pip.m: (0.2.0)

	- Extend so that it can deal with 3D outputs as well as 2D.

	* matlab/test/test_cons_smacof_pip.m: (0.2.0)

	- Add tests for the sphere problem.

	* matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m: (0.1.1)

	- Small change. Remove unused computation of weights matrix.

2014-02-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/cons_smacof_pip.m: (0.0.1)
	* Add matlab/test/test_cons_smacof_pip.m: (0.0.1)

	- CONS_SMACOF_PIP SMACOF MACOF algorithm with polynomial
	constraints (PIP file format).

	* Add matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d_pip.m:
	(0.0.1)
	* Add matlab/test/test_tri_qcqp_smacof_nofold_2d_pip.m: (0.0.1)

	- TRI_QCQP_SMACOF_NOFOLD_2D_PIP Constraints in PIP format for
	QCQP-SMACOF to ensure that 2D triangules preserve positive
	orientation.

2014-02-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/add_gerardus_paths.m: (0.3.0)

	- Add gerardus/programs to the system path in Matlab. This way,
	binaries/executables can be found by functions system() or !.

2014-02-24  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d.m: (0.0.2)

	- I had forgotten to check for AMIN type.

	* matlab/test/test_qcqp_smacof.m: (0.0.3)

	- Fix bug. Missing input argument in call to function, and missing
	the definition of algorithm parameters for QCQP-SMACOF and SCIP.

2014-02-15  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.9.0)

	- Add section to download the source code of ITK 3.4.1 and build
	it. This will make users' life easier. The user still has to
	manually install with "sudo make install".

	- Fix bug: ./configure for GMP and MPFR has to be told to use
	gcc-4.4. Otherwise, several of the tests fail to build.

	- Comment out blocks for IPOPT and SCIP in linux. We didn't really
	get SCIP from OptiTools to build for Matlab, so they are not used
	for anything, and they introduce a dependency on gfortran, that
	seems to introduce a dependency on BLAS, and maybe others. It's
	pain we can live without.

2014-02-13  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/tri_qcqp_smacof_nofold_2d.m: (0.0.1)
	* Add matlab/test/test_tri_qcqp_smacof_nofold_2d.m: (0.0.1)

	- TRI_QCQP_SMACOF_NOFOLD_2D Constraints for QCQP-SMACOF to ensure
	that a 2D triangular mesh has no fold-overs.

	* Add matlab/test/test_qcqp_smacof.m: (0.0.2)

	- Add test of a mesh without an untangled solution where we use
	tri_qcqp_smacof_nofold_2d constraints to find an untangled
	solution.

2014-02-12  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/qcqp_smacof.m: (0.0.1)
	* Add matlab/test/test_qcqp_smacof.m: (0.0.1)

	- QCQP_SMACOF Scaling by MAjorizing a COnvex Function (SMACOF)
	algorithm posed as a Quadratic Program with Quadratic Constraints
	(QPQC).

	* matlab/PointsToolbox/smacof.m: (0.0.3)

	- Add output argument t with a timestamp at each iteration.

	- Add new opts: 'Display' and 'TolFun'.

	* matlab/test/test_smacof.m: (0.0.1)

	- Make a separate block for algorithm parameters.

	- Write some comments about whether the solution obtained is a
	local or global minimum and why.

	- In the plots, replace the iteration number by the actual time.

2014-02-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/smacof.m: (0.0.2)

	- Add missing check for size of weight matrix.

	- Add missing svn properties.

	* matlab/test/test_smacof.m: (0.0.1)

	- Add missing svn properties.

2014-02-10  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/smacof.m: (0.0.1)
	* Add matlab/test/test_smacof.m: (0.0.1)

	- SMACOF Classic implementation of SMACOF (Scaling by MAjorizing a
	COnvex Function) algorithm for MDS (Multidimensional Scaling).

2014-02-06  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/tiff_read_header.m:
	* Add matlab/ThirdPartyToolbox/licence-tiff_read_header.m:

	- By Dirk-Jan Kroon. This function tiff_read_header can be used to
	read the header(s) of complex Tiff files. It implements a part of
	the Tiff version 5 and 6 specifications.

	http://www.mathworks.co.uk/matlabcentral/fileexchange/36958-tiff-tag-reader

2014-01-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_squeeze.m: (0.2.0)

	- Add output argument with the mapping between the original list
	of vertices and the squeezed list of vertices.

2013-12-19  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.8.2)

	- Fix bug. Now the Windows build requires library
	boost-serialization. This has to be set at configuration time of
	boost as an external project.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.20)

	- Fix bug. The last change (0.2.19) was unnecessary. We don't need
	to tell cmake explicitely to link against boost serialization. It
	suffices that boost-serialization is built from the root
	CMakeLists.txt of gerardus.

	* matlab/ManifoldToolbox/vertex_untangle.m: (0.2.3)

	- Small edit help header.

2013-12-16  Ramon Casero  <rcasero@gmail.com>

	* At this point, Gerardus builds under Windows 64 bit.

	* matlab/MatlabImportFilter.hxx: (0.8.1)

	- Fix bug. Windows gives a compilation error for mxINT64_CLASS in
	Cgal. It's too complicated trying to fix that. Instead, we just
	disable that type as a valid input type. It's not likely that it
	will be used anyway.

	* matlab/MatlabExportFilter.hxx: (0.6.1)

	- Fix bug. Windows doesn't accept the declaration of an array
	variable with length 0, e.g. dims[0].  It doesn't allow either to
	declare an array with a variable length, so we have to use the
	mwSize *dims = new mwSize[ndims] for that.

	* CMakeLists.txt: (0.8.1)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.19)

	- Fix bug. On Windows, cgal_check_self_intersect needs to be
	linked to the boost serialize library.

	* CMakeLists.txt: (0.8.0)

	- Add linux build of library IPOPT, a dependency of OptiToolbox.

	- This also requires that gfortran and gfortran-4.4 have been
	installed in the linux system.

2013-12-15  Ramon Casero  <rcasero@gmail.com>

	* Add cpp/src/third-party/Ipopt-3.11.6:

	- Ipopt is an open-source solver for large-scale nonlinear
	continuous optimization. It can be used from modeling
	environments, such as AIMMS, AMPL, GAMS, or Matlab, and it is also
	available as callable library with interfaces to C++, C, Fortran,
	Java, and R. Ipopt uses an interior point method, together with a
	filter linear search procedure. Project manager Andreas Waechter.

	- A dependency of SCIP, that is a dependency of OptiToolbox.

	- http://www.coin-or.org/download/source/Ipopt/

2013-12-14  Ramon Casero  <rcasero@gmail.com>

	* Add cpp/src/third-party/metis-4.0.3:

	- METIS: A Software Package for Partitioning Unstructured Graphs,
	Partitioning Meshes, and Computing Fill-Reducing Orderings of
	Sparse Matrices. By George Karypis.

	- A dependency of MUMPS, that is a dependency of SCIP, that is a
	dependency of OptiToolbox.

	- Version 4.0.3 is the last version compatible with MUMPS.

	- http://glaros.dtc.umn.edu/gkhome/fsroot/sw/metis/OLD

	* cpp/src/third-party/scipoptsuite-3.0.2/zimpl-3.3.1/Makefile:
	* cpp/src/third-party/scipoptsuite-3.0.2/zimpl-3.3.1/make/make.linux.x86_64.gnu.opt:
	* cpp/src/third-party/scipoptsuite-3.0.2/scip-3.0.2/Makefile:
	* CMakeLists.txt: (0.7.0)

	- Modifications to SCIP so that it can build under linux as part
	of Gerardus.

	* cpp/src/third-party/scipoptsuite-3.0.2:

	Untar the packages distributed with SCIP so that we can manually
	tell it to use Gerardus GMP, instead of trying to use a
	system-installed version.

	* Add cpp/src/third-party/scipoptsuite-3.0.2:

	- Solving Constraint Integer Programs library, Konrad-Zuse-Zentrum
	fr Informationstechnik Berlin, Division Scientific Computing,
	Department Optimization.

	- This is SCIP Optimization Suite, that includes SCIP, SoPlex,
	ZIMPL, GCG, and UG with an easy-to-use Makefile.

	http://scip.zib.de/

2013-12-13  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/OptiToolbox:

	- A free MATLAB Toolbox for Optimization. Copyright (C) 2011-2013,
	Jonathan Currie. v2.00.

	http://www.i2c2.aut.ac.nz/Wiki/OPTI/index.php

2013-12-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/vertex_untangle.m: (0.2.2)

	- Actually, (0.2.0) was correct. It's Freitag and Plassmann (2000)
	that had another error. It's just a constant value that shouldn't
	change the result, but we'd rather have the right formulation in
	the implementation.

2013-12-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/vertex_untangle.m: (0.2.1)

	- Fix small bug. Linear program formulation typo.

	* matlab/ManifoldToolbox/vertex_untangle.m: (0.2.0)

	- Fix bug. The original formulation of the linear programming
	problem in Freitag and Plassmann (2000) has some errors, but so
	did our implementation. Hopefully fixed now.

	- Use simplex method (as in original paper), instead of
	interior-point. Simplex is faster for small problems, which will
	usually be the case with closed fans.

	- Assume that perimeter vertices are counter-clockwise oriented in
	TRI, as in the paper. This is easy to enforce with third-party
	function surfreorient() from iso2mesh.

	- To sort vertices in the perimeter as a polygonal line, now we
	don't need to compute one branch to the antipodes, and another
	one. Instead, we create an adjacency matrix that is
	non-symmetrical (i.e., it contains the orientation of the
	connections from TRI). This allows the Dijkstra algorithm to sort
	the vertices in one sweep.

2013-12-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/sphtri_vertex_istangled.m: (0.2.0)

	- Now the output is a count of adjacent triangles with inward
	pointing normal, instead of boolean. A count > 0 means that the
	vertex is tangled.

	- Fix bug. Longitude has to be mapped to X and latitude to Y, or
	else the areas change sign.

2013-12-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/sphtri_vertex_istangled.m: (0.1.0)

	- Fix bug. Centering the local neighbourhood using meanm() doesn't
	work to avoid wrap-arounds. Instead, what we do now is to compute
	the 3D Cartesian coordinates of the points, and find a spherical
	rotation that will translate the central vertex of the local
	neighbourhood to [1, 0, 0]. The reason for [1, 0, 0] is that it
	corresponds to lat=0, lon=0, so it minimizes the risk of
	wrap-arounds.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.18)
	* matlab/CgalToolbox/cgal_surfsubdivision.m: (0.1.0)

	- I had forgotten to commit the changes needed to add
	cgal_tri_simplify.

2013-11-30  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/sphereFit.m:

	- this fits a sphere to a collection of data using a closed form
	for the solution. by Nikolai Chernov.

	http://www.mathworks.com/matlabcentral/fileexchange/22643

2013-11-29  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.6.0)

	- Generalize the configuration so it's not limited to Matlab
	R2012a. For linux/mac, we will hardcode for each Matlab version
	which gcc/g++ version is needed. For the moment, we have R2012a
	and R2012b (both use 4.4). If the script doesn't know which
	gcc/g++ version is needed for the detect Matlab version, it gives
	a clear error asking for the information to be added to this
	script.

	* matlab/FindMatlab.cmake: (0.2.9)

	- Fix bug. In Linux/MacOS X systems, we need to either have been
	provided by the user with the MATLAB_ROOT variable, or that the
	'matlab' command is in the path. But if neither were available, we
	were allowing the configuration to continue. Now we give a fatal
	error, because if Matlab cannot be found, gerardus cannot build
	and it doesn't make sense to let the configuration continue, and
	get down the line errors that will be difficult to interpret.

	- Fix bug. If the user provides MATLAB_ROOT, we have to look for
	the matlab binary because it may not be in the path.

2013-11-28  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CgalToolbox/CgalTriSimplify.cpp: (0.1.0)

	- CGAL_TRI_SIMPLIFY Reduce number of faces in triangular mesh
	using edge collapse.

2013-11-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/CMakeLists.txt: (0.6.9)

	- Fix bug reported by Gary Mirams. Targets in this toolbox were
	missing a dependency to copy_compiler_config.h, which is a dummy
	target we made to make sure that CGAL gets compiled before any ITK
	or CGAL toolbox. The reason is that when CGAL compiles, it
	generates a file called compiler_config.h that dependent targets
	need.

	https://groups.google.com/forum/#!topic/gerardus-users/piPD9MgXqv0

2013-11-13  Ramon Casero  <rcasero@gmail.com>

	* Add ManifoldToolbox/sphtri_vertex_istangled.m: (0.1.0)

	- SPHTRI_VERTEX_ISTANGLED Find tangled vertices in a spherical
	triangular mesh.

	* Add matlab/ManifoldToolbox/trifacet_signed_area.m: (0.1.0)
	* Add matlab/test/test_trifacet_signed_area.m: (0.1.0)

	- TRIFACET_SIGNED_AREA Signed area of the facets in a 2D
	triangulation.

2013-11-10  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/vertex_untangle.m: (0.1.1)
	* Add matlab/test/test_vertex_untangle.m: (0.1.1)

	- Check whether the free vertex is already untangled. In that
	case, we do not relocate it (this is an untangling algorithm, not
	a mesh improvement or mesh smoothing algorithm).

	- Improvement. Replace computing triangle areas using determinants
	by the formula that results from expanding the determinant. This
	produces more accurate results, and allows us to compute all areas
	in one go, without having to use a loop.

2013-11-09  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/vertex_untangle.m: (0.1.0)
	* Add matlab/test/test_vertex_untangle.m: (0.1.0)

	- VERTEX_UNTANGLE Location of a 2D vertex at the centre of a
	closed fan triangular mesh so that we avoid edge overlapping.

2013-11-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.4.0)
	* matlab/CgalToolbox/cgal_check_self_intersect.m: (0.2.0)

	- Add input argument ITRI. Row vector of triangle indices. Only
	the triangles in ITRI will be checked for intersections. Checking
	for all triangles is quite slow, so when we are only interested in
	one triangle, this saves a lot of time.

	* matlab/ManifoldToolbox/smdscale.m: (0.5.3)
	* matlab/ManifoldToolbox/lmdscale.m: (0.1.2)

	 - Fix bug. For full distance matrices, we were using the norm of
	the matrix instead of the sum of squared terms to compute the
	stress values. The norm of a matrix is the largest single
	eigenvalue of the matrix, not the sum of squared elements.

2013-11-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/dmatrix_mesh.m: (0.4.3)

	- In 'fastmarching', symmetrize distance matrix by throwing away
	the bottom half of the distance matrix, and replacing it by the
	top half. We cannot compute only the top half, because if we use
	options.constraint_map, the algorithm will stop sometimes before
	reaching vertices it should reach. Maybe that's because it has
	already reached all vertices that correspond to the bottom half,
	I'm not sure.

	- In 'fastmarching', simplify code by always having an
	options.constraint_map, even if it's empty because the user didn't
	provide one.

	* matlab/PointsToolbox/coords_from_dist_gower.m: (0.2.1)

	- Update syntax that checks the number of input/output arguments
	as it will be deprecated by Matlab.

2013-10-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/surface_param.m: (0.6.0)
	* matlab/test/test_surface_param.m: (0.6.0)

	- Rewrite 'smdscale', previously called 'sphisomap'. We no longer
	use Dijkstra, so it's not Isomap. We use Fast Marching to compute
	distances instead by default (although Dijkstra can still be
	used). Parameters to the distance algorithm and to the MDS
	algorithm are passed with param.options and param.options2, as
	with previous methods.

	- In 'cald', add missing help for param.tri.

	- Check number of output arguments within each parameterization
	case. They have 1 or 2.

	* ManifoldToolbox/dmatrix_mesh.m: (0.4.2)

	- Fix bug. constraint_map' can create distance matrices slightly
	asymmetric. We take the mean to make it symmetric.

	* matlab/ManifoldToolbox/lmdscale.m: (0.1.1)

	- Fix bug. When I copied the code from smdscale, I forgot to
	remove the references to latitude and longiture. In this function,
	we work on the UV plane, not on the sphere.

	* matlab/PointsToolbox/surface_param.m: (0.5.3)

	- Fix help header for 'cald'.

	* matlab/PointsToolbox/surface_param.m: (0.5.2)
	* matlab/test/test_surface_param.m: (0.5.2)

	- Rewrite 'cald' (Li Shen's Control Area and Length Distortions
	(CALD) spherical parametrization). Pass parameters all together
	under param.options.

	* Add matlab/test/data/008-lv-resampled-0_31.mha:

	- Segmentation of a low resolution LV with detail and papillary
	muscles removed, for closed surface parameterization tests.

2013-10-25  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/surface_param.m: (0.5.1)
	* matlab/test/test_surface_param.m: (0.5.1)

	- Rewrite help of 'sphproj' and write test for it. Rename
	estimated sphere radius as sphrad for uniformity with the other
	methods.

	* matlab/PointsToolbox/surface_param.m: (0.5.0)
	* matlab/test/test_surface_param.m: (0.5.0)

	- Rewrite method 'lmdscale', that was non-functional. Also, now
	parameters for fast marching are passed in param.options, and
	parameters for local neighbourhood MDS are passed in
	param.options2.

	- Correct help for 'cmdsmap'.

	* matlab/ManifoldToolbox/dmatrix_mesh.m: (0.4.1)

	- Small, compute distances by column instead of by row.

	* matlab/PointsToolbox/surface_param.m: (0.4.0)
	* matlab/test/test_surface_param.m: (0.4.0)

	- Rewrite of methods 'isomap' and 'cmdsmap'. The first one now has
	an input syntax congruent with the method. The second one is the
	open surface classic MDS, that is, only valid for full distance
	matrices, using classic MDS to solve the parameterization.

	- Add 'lmdscale' for open surface with local neighbourhoods. But
	still needs correcting.

2013-10-21  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.7.0)

	- Move rasterization code to scimat_tri_to_raster().

	- Change order of output arguments. Now we provide the option of
	computing only the alpha-shape mesh. And then, if the user has
	requested the rasterization, this is computed too.

	- The rasterization method is now controlled by the string RASTER,
	rather than the previous boolean SAFE.

	* matlab/ManifoldToolbox/scimat_tri_to_raster.m: (0.2.0)

	- Replace previous code by quite similar code we had in
	scimat_lconvhull_smoothing.m().

	* Rename matlab/ManifoldToolbox/scimat_closed_surf_to_bw.m as
	matlab/ManifoldToolbox/scimat_tri_to_raster.m: (0.2.0)
	* matlab/ManifoldToolbox/delaunay_sphere.m:

2013-10-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/tri_find_nonmanifold_vertex.m: (0.1.0)

	- TRI_FIND_NONMANIFOLD_VERTEX Find indices of non-manifold
	vertices in a triangular mesh.

	* matlab/FileFormatToolbox/scinrrd_im2nrrd.m: (0.1.1)

	- Update the two lines that check the number of input/output
	arguments to more modern syntax.

	* Add matlab/ManifoldToolbox/triconncomp.m: (0.1.0)

	- TRICONNCOMP  Find connected components in mesh.

2013-10-16  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/remove_vertex_from_tri.m: (0.1.0)
	* Add matlab/test/test_remove_vertex_from_tri.m: (0.1.0)

	- REMOVE_VERTEX_FROM_TRI Remove vertices from a triangular mesh.

	* Rename matlab/ManifoldToolbox/addpoint2tri.m as
	matlab/ManifoldToolbox/add_vertex_to_tri.m: (0.2.0)

	* Rename matlab/test/test_addpoint2tri.m as
	matlab/test/test_add_vertex_to_tri.m: (0.2.0)

2013-10-15  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/PolyhedronBuilder.h: (0.1.1)

	- Fix bug. If a facet creates a non-manifold polyhedron,
	builder.end_surface() with make Matlab throw a segfault.

2013-10-14  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.6.2)

	- Using the default directions (the cartesian axes) for the rays
	in cgal_insurftri() causes similar problems to using
	itk_tri_rasterization().

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.6.1)

	- Fix bug. Remove debugging code.

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.6.0)

	- As using itk_tri_rasterization() is proving quite unreliable, we
	are allowing two syntaxes: One that uses simply cgal_insurftri(),
	even if it's slower, and an "unsafe" mode that uses
	itk_tri_rasterization() followed by dilation and then checking
	with cgal_insurftri().

2013-10-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.5.0)

	- Fix bug. Even overlapping results from itk_tri_rasterization()
	in 3 orientations miss voxels within the mesh. Add a correction
	stage, where we dilate the segmentation, fill holes, and then
	check the extra voxels with cgal_insurftri().

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.4.3)

	- Fix bug. itk_tri_rasterization() can miss quite a bit of voxels
	that should be labelled 1. It seems this is due to the way
	itk::TriangleMeshToBinaryImageFilter is
	implemented. cgal_insurftri() is more accurate, although it's much
	slower, and apparently sometimes can also forget to label a few
	voxels within the mesh, so we don't gain much. So for the moment,
	the best solution seems to be to run itk_tri_rasterization() 3
	times, permuting the coordinates, and adding the results with an
	OR. As it runs quickly, this is not too much of a problem. This
	seems to get most of the segmentation right, except for a few
	voxels within. To fix that, we run a fill holes algorithm, that is
	also quite fast.

	- Correct non-manifold orientation of triangles. It's not clear
	whether this is absolutely necessary, but it doesn't hurt, and
	allows us to fill potential holes in the surface (again, not clear
	whether alphavol can have this problem).

2013-10-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkTriRasterization.cpp: (0.1.2)

	- Instead of using tolerance=1.0, we get the voxel size in the
	smallest dimension, and divide it by 10.0.

	- Remove loop that was not doing anything.

2013-10-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CgalTriFillHoles.cpp: (0.1.1)
	* Add matlab/CgalToolbox/cgal_tri_fillholes.m: (0.1.1)

	- Note that the triangles in the input need to have a manifold
	orientation.

	* matlab/CgalToolbox/CgalMeshSegmentation.cpp: (0.1.4)
	* matlab/CgalToolbox/cgal_meshseg.m: (0.1.1)

	- Add warning to the help header about this function producing
	stray vertices, non-oriented triangles and holes, and how to
	correct it within Gerardus.

	* Add matlab/CgalToolbox/CgalTriFillHoles.cpp: (0.1.0)
	* Add matlab/CgalToolbox/cgal_tri_fillholes.m: (0.1.0)
	* Add matlab/test/test_cgal_tri_fillholes.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.17)

	- CGAL_TRI_FILLHOLES  Fill holes in a triangular mesh, with triangles.

	* matlab/ItkToolbox/ItkTriRasterization.cpp: (0.1.1)

	- Minor, remove unused variables.

	* Add matlab/CgalToolbox/PolyhedronBuilder.h: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.16)
	* matlab/CgalToolbox/CgalSurfaceSubdivision.cpp: (0.1.1)

	- Move class PolyhedronBuilder out of CgalSurfaceSubdivision.cpp
	into its own new file PolyhedronBuilder.h. This way we can reuse
	it in other cgal MEX Matlab functions.

2013-10-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/dmatrix_mesh.m: (0.4.0)

	- Add input argument "options" for 'fastmarching' method, so that
	we can pass a local neighbourhood radius for every voxel in
	OPTIONS.constraint_map.

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.4.2)

	- The alpha shape function returns a surface mesh where lots of
	the vertices are not used. We now "squeeze" the list of vertices
	to leave only those that belong to the surface.

2013-10-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.4.1)

	- Give the alpha shape mesh computed internally as an output
	(given as TRI, X).

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.4.0)

	- Speed up function from ~20 min to ~30 sec for a high res left
	ventricle of rat 008.

	- We use itk_tri_rasterization() instead of cgal_insurftri() to
	rasterize the inside of the mesh. This is much faster, although
	sometimes a few voxels can be mislabelled. To avoid it, we make an
	auxiliary duplicate of the rasterization, dilate by 1, and then
	find voxels in the dilated but not in the original
	rasterization. These voxels are candidates to be artifacts, and we
	process them with cgal_insurftri(), slower but more accurate.

	* Add matlab/ItkToolbox/ItkTriRasterization.cpp: (0.1.0)
	* Add matlab/test/test_itk_tri_rasterization.m: (0.1.0)
	* Add matlab/ItkToolbox/itk_tri_rasterization.m: (0.1.0)
	* matlab/ItkToolbox/CMakeLists.txt: (0.6.8)

	- ITK_TRI_RASTERIZATION Rasterization of triangular mesh to binary
	segmentation.

	* matlab/MatlabImportFilter.hxx: (0.8.0)
	* matlab/MatlabImportFilter.h: (0.8.0)

	- Add SwapXYInVectorOfVectors() and SwapXYInVector(). This is to
	adapt Matlab point sets given as a list of (x, y, z) to ITK images
	convention, that requires them to be (y, x, z).

	* matlab/VectorWrapper.h: (0.6.3)

	- Add partial specialization for itk::Vector<VectorValueType,
	Dimension> (including itk::Image::SpacingType).

2013-10-01  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CgalToolbox/CgalSurfaceSubdivision.cpp: (0.1.0)
	* Add cpp/src/third-party/CGAL-4.2/demo:
	* Add matlab/CgalToolbox/cgal_surfsubdivision.m: (0.1.0)
	* Add matlab/test/test_cgal_surfsubdivision.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.15)

	- CGAL_SURFSUBDIVISION 3D Surface Approximating Subdivision
	Methods.

	- The demo/Polyhedron/include contains a class to triangulate a
	polyhedron, that we use in cgal_surfsubdivision().

	* Add matlab/test/test_cgal_meshseg.m: (0.1.0)

	- Tests for cgal_meshseg().

2013-09-30  Ramon Casero  <rcasero@gmail.com>

	* matlab/VectorWrapper.h: (0.6.2)
	* matlab/VectorWrapper.hxx: (0.5.1)
	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.3.1)
	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (0.4.1)
	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.3.2)
	* matlab/CgalToolbox/CgalMeshSegmentation.cpp: (0.1.3)
	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.3.1)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.3.1)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.3.1)

	- Remove VectorValueType template from ReadCgalRowVector(), as
	it's not used in reality, but was giving the impression in
	Cgal*.cpp files that it was necessary when calling
	ReadRowVector(). It was also creating the need of unnecessary
	variations in partial specializations in the VectorWrapperCgal()
	macro.

	* matlab/CgalToolbox/CgalMeshSegmentation.cpp: (0.1.2)

	- Fix bug. Actually, it seems that we need to pass the centre of
	the boundary sphere with the offset.

	* matlab/PointsToolbox/bwmesh.m: (0.1.6)

	- Minor. Add a note that this function is superseded by
	cgal_meshseg.

	* matlab/CgalToolbox/CgalMeshSegmentation.cpp: (0.1.1)

	- Fix bug. CGAL internally seems to be ignoring the image
	coordinates offset. Now (1) we DO NOT add the offset when
	computing the boundary sphere's centre and (2) we DO add the
	offset in the X output coordinates.

	* matlab/MatlabImportFilter.hxx: (0.7.3)

	- Fix bug in ReadCgalImageFromMatlab(). We were using a pointer to
	the Matlab input instead of to the image data. When the input is a
	plain array, they are both the same, but when the image is given
	as a scimat struct, they are different. This was causing sefaults
	and Matlab to crash.

	* cpp/src/third-party/CGAL-4.2/CMakeLists.txt: (0.1.2)

	- I had forgotten to commit this file. Now CGAL ImageIO has to be
	linked to, so we add it to the build in CGAL.

2013-09-27  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CgalToolbox/CgalMeshSegmentation.cpp: (0.1.0)
	* matlab/CgalToolbox/cgal_meshseg.m: (0.1.0)
	* matlab/VectorWrapper.h: (0.6.1)

	- CGAL_MESHSEG Surface meshing of an isosurface from a
	segmentation or grayscale image.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.14)

	- Add cgal_meshseg.

	- Now targets depend on the CGAL ImageIO library, because
	MatlabImportFilter uses type _image.

	* matlab/ItkToolbox/CMakeLists.txt: (0.6.7)

	- Now targets depend on the CGAL ImageIO library, because
	MatlabImportFilter uses type _image.

	* matlab/MatlabImportFilter.h: (0.7.2)
	* matlab/MatlabImportFilter.hxx: (0.7.2)

	- Add method ReadCgalImageFromMatlab() to duplicate a Matlab
	buffer with a 3D image and encapsulate it in a CGAL::_image type.

	* matlab/MatlabImageHeader.h: (0.2.1)

	- Minor. Add some comments to member variables to make clearer
	what they contain.

2013-09-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabImageHeader.h: (0.2.0)
	* Delete matlab/MatlabImageHeader.cxx:
	* matlab/ItkToolbox/CMakeLists.txt: (0.6.6)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.13)

	- Combine MatlabImageHeader.cxx and MatlabImageHeader.h into
	MatlabImageHeader.h. This simplifies it when we have to use this
	class into other programs.

2013-09-20  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/pca_align.m: (0.1.0)
	* matlab/PointsToolbox/pca_normalize.m: (0.1.1)

	- Move the part of the code in pca_normalize() that aligns the
	point set principal components with the Cartesian axes to new
	function pca_align(), so that we can use it without having to
	normalize the points too.

	* Add matlab/FileFormatToolbox/parsave.m: (0.1.0)

	- parsave Save workspace variables to file within a parfor loop.

2013-09-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.3.1)

	- Fix bug. If the triangle is degenerated, trying to find
	intersections produced a segfault. To avoid it, we just count one
	intersection for this triangle and skip to the next one.

	- To avoid potential pointer problems, the output with the count
	of intersections is now accessed as n[idx] += 1; instead of *n +=
	1; n++.

2013-09-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/dmatrix_mesh.m: (0.3.0)

	- Add Fast Marching method. Gabriel Peyres implementation of
	Kimmel and Sethian (1998), that uses Fibonacci heaps implemented
	by John-Mark Gurney.

	- Fast Marching is ~2 times slower than Dijkstra's algorithm, but
	it suffers a lot less from metrication errors on structured
	regular meshes.

2013-09-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/VectorWrapper.h: (0.6.0)
	* matlab/VectorWrapper.hxx: (0.5.0)

	- API change to fix bug. Remove template VectorSize. It is not
	used anyway by methods in the class, and it was creating a problem
	with MatlabImportFilter. In paticular,
	MatlabImportFilter::ReadVectorOfVectorsFromMatlab does not take a
	VectorSize template argument. So when it instantiated a
	VectorWrapper, it did so without the VectorSize argument, which
	means that by default VectorSize=0, which then made some partial
	specializations in VectorWrapper.h fail. For example,
	VectorType=itk::Size<3> but VectorSize=0.

	- The rationale for VectorSize was to be able to use a single
	partial specialisation for all vector sizes,
	e.g. itk::Size<VectorSize>. But now it seemed simpler to remove
	VectorSize and just do partial specialisations of itk::Size<2>,
	itk::Size<3> and itk::Size<4>, adding two macros to make the code
	cleaner.

	* matlab/MatlabImportFilter.h: (0.7.1)
	* matlab/MatlabImportFilter.hxx: (0.7.1)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.6.1)

	- Follow API change in VectorWrapper.

2013-09-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkICPRegistration.cpp: (0.0.5)

	- Still in alpha. Adapt to new Matlab import and export filters
	API.

	* matlab/MatlabImportFilter.hxx: (0.7.0)
	* matlab/MatlabImportFilter.h: (0.7.0)

	- Change API substantially. As an overview, we have created a
	struct to represent an "input" (a pointer to the data, a string
	with its name and a flag to mark whether it has been
	provided). Inputs can be "registered", that is, we say that the
	third argument of prhs corresponds to input "XI". Once registered,
	their data can be read into C++ types (scalars, vectors, vectors
	of vectors) with the Read*FromMatlab() methods in the class.

	- Add struct MatlabInput; ConnectToMatlabFunctionInput();
	RegisterInput(); RegisterStructFieldInput();
	GetRegisteredInput(). Rename some other methods. Now all
	Read*FromMatlab() methods take a MatlabInputPointer instead of a
	position and string with the name of the input. This allows to use
	them to read fields and cells too.

	* matlab/MatlabExportFilter.h: (0.5.0)
	* matlab/MatlabExportFilter.hxx: (0.6.0)

	- Change API a bit. Rename some methods.

	- Remove from MatlabOutput flags isTopLevel, isTopLevelFirst. We
	were wrong thinking that the first output needs to be allocated
	with an empty matrix even if the user doesn't request it, or
	otherwise Matlab throws an error. It can be treated like every
	other output.

	- Remove in RegisterOutput() the syntax with base and
	pos. Currently we only support outputs directly in plhs. If we
	need to support child outputs (e.g. fields or cells), we should
	add a MatlabOutputPointer syntax.

	* matlab/ItkToolbox/ItkPSTransform.cpp: (0.5.0)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.6.0)
	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (0.4.0)
	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.3.0)
	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.3.0)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.3.0)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.3.0)
	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.3.0)

	- Adapt to new Matlab import and export filters API.

	* matlab/ItkToolbox/itk_imfilter.m: (0.7.6)

	- Add note on coordinates of W output for dandist filter.

	* matlab/test/test_itk_imfilter.m: (0.4.3)

	- Add small simple 3x3 matrix test to dandist filter.

	* matlab/test/test_itk_pstransform.m: (0.1.3)

	- Fix bug, wrong data directory.

	* matlab/GerardusCommon.h: (0.10.2)

	- Fix minor bug, text of error messages.

2013-08-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabImportFilter.hxx: (0.6.5)
	* matlab/MatlabImportFilter.h: (0.6.4)
	* matlab/ItkToolbox/ItkICPRegistration.cpp: (0.0.4)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.5.2)
	* matlab/ItkToolbox/ItkPSTransform.cpp: (0.4.1)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.2.1)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.2.1)
	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (0.3.1)
	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.2.1)
	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.2.1)
	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.2.1)

	- Rename RegisterArrayOfInputArgumentsFromMatlab() as
	ConnectToMatlabFunctionInput().

	- Add member variables for prhs, nrhs, although we are not using
	them for the moment.

	* matlab/MatlabExportFilter.h: (0.5.0)
	* matlab/MatlabExportFilter.hxx: (0.5.0)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.5.1)

	- Use new allocation methods inside of Graft and Copy
	methods. This removes duplicated code and solves potential bugs.

	- Use MatlabOutput in Graft and Copy methods.

	- Ignore grafting or copying for outputs that are not required.

	* matlab/MatlabImageHeader.h: (0.1.1)

	- Change the type of size vectors.

	* matlab/MatlabExportFilter.h: (0.4.0)
	* matlab/MatlabExportFilter.hxx: (0.4.0)

	- Substantial rewrite.

	- Create MatlabOutput type. It's a struct with a description of a
	Matlab output (namely, mxArray* pointer to the output, a string
	with the output name, and several flags about whether the output
	has been requested by the user, etc.).

	- Add method RegisterOutput so that we can register MatlabOutput
	objects with the export interface.

	- Rename RegisterArrayOfOutputArgumentsToMatlab() as
	ConnectToMatlabFunctionOutput(), which makes more sense. We should
	do the same renaming in MatlabImportFilter.

	- Some methods that used an index to create e.g. a matrix in
	plhs[index] (the Copy methods) now use a MatlabOutput instead,
	which gives more flexibility and better ability to e.g. check
	whether the data actually needs to be copied from C++ to the
	Matlab output, or can that step can be ignored. But we haven't
	made this change to the Graft methods yet.

	- Add methods AllocateColumnVectorInMatlab,
	AllocateRowVectorInMatlab, AllocateMatrixInMatlab,
	AllocateNDArrayInMatlab to allocate memory for a Matlab output and
	return a pointer to the output buffer. With this we can remove
	quite a lot of duplicated code in many functions. It also makes it
	easier to debug, run checks on the results, etc.

	- Add methods AllocateColumnVectorInCellInMatlab,
	AllocateRowVectorInCellInMatlab, AllocateMatrixInCellInMatlab,
	AllocateNDArrayInCellInMatlab. As above, but to create outputs
	inside of cells.

	- Add method CopyEmptyArrayToMatlab(), to avoid code duplication,
	as many functions need to return empty matrices in some cases.

	- Use new convertCppDataTypeToMatlabCassId() function to remove
	a lot of duplicated code.

	- Number of arguments have changed from "unsigned int" to "int" to
	agree with the nlhs parameter provided by Matlab.

	- Rename the member variables args, nargs as nlhs, plhs, which are
	the same names used by the Matlab documentation. This should make
	things clearer to users.

	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.2.0)
	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.2.0)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.2.0)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.2.0)
	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (0.3.0)
	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.2.0)

	- Use our new enum InputIndexType, enum OutputIndexType to keep
	track of inputs and outputs more clearly.

	- Use the new MatlabExportFilter methods to register outputs, get
	pointers to Matlab output buffers, etc.

	* matlab/ItkToolbox/ItkICPRegistration.cpp: (0.0.3)

	- Still in alpha state. Debug messages, and execution interrupted
	after registration of outputs. We are commiting here only because
	we have adapted it to the new MatlabExportFilter interface, and it
	compiles.

	* matlab/ItkToolbox/ItkPSTransform.cpp: (0.4.0)

	- Substantial rewrite. This function was very outdated with
	respect to the state of the art in Gerardus.

	- Replace nArgIn, argIn, argOut by matlabImport, matlabExport.

	- Use our new enum InputIndexType, enum OutputIndexType to keep
	track of inputs and outputs more clearly.

	* matlab/ItkToolbox/ItkImFilter.cpp: (1.5.0)
	* matlab/ItkToolbox/itk_imfilter.m: (0.7.4)

	- Substantial update.

	- Use our new enum InputIndexType, enum OutputIndexType to keep
	track of inputs and outputs more clearly. This also has fixed a
	couple of related bugs.

	- Use the new MatlabExportFilter methods to register outputs, copy
	ITK results to Matlab.

	- itk::BinaryDilateImageFilter and itk::BinaryErodeImageFilter:
	Change the default foreground to 1, as this is a lot more useful.

	* matlab/test/test_itk_imfilter.m: (0.4.2)

	- Give names to two input variables to make them clearer.

	* matlab/GerardusCommon.h: (0.10.1)

	- Minor, add a note to help header of sub2ind.

2013-08-15  Ramon Casero  <rcasero@gmail.com>

 	* matlab/test/test_cgal_closest_trifacet.m: (0.2.3)

	- Add plot to tetrahedron example.

2013-08-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabExportFilter.h: (0.4.0)

	- Rename RegisterArrayOfOutputArgumentsToMatlab() as
	ConnectToMatlabFunctionOutput(), as this is more descriptive, and
	we are now going to use register only for specific outputs.

	* matlab/MatlabImportFilter.hxx: (0.6.4)

	- Remove two warnings due to signed/unsigned comparison.

	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.1.5)
	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (0.2.4)
	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.1.4)
	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.1.2)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.1.5)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.6)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.4.3)
	* matlab/ItkToolbox/ItkICPRegistration.cpp: (0.0.2)

	- Renaming of methods according to the changes in
	MatlabImportFilter and MatlabExportFilter.

	* matlab/MatlabImportFilter.h: (0.6.3)
	* matlab/MatlabImportFilter.hxx: (0.6.3)

	- Move method definitions from the .h file to the .hxx file.

	- Replace SetMatlabArgumentsPointer() and
	SetAdditionalMatlabArgumentPointer() by
	RegisterArrayOfInputArgumentsFromMatlab() and
	RegisterInputArgumentFromMatlab(), and add
	RegisterInputFieldArgumentFromMatlab().

	- This is not where we want to be with the code, but we need this
	intermediate commit that builds to avoid getting a mess that
	doesn't compile.

	* matlab/MatlabExportFilter.hxx: (0.3.3)
	* matlab/MatlabExportFilter.h: (0.3.1)

	- Renaming of methods SetMatlabArgumentsPointer() as
	RegisterArrayOfOutputArgumentsToMatlab() and
	GetNumberOfArguments() as GetNumberOfRegisteredArguments().

	* matlab/ItkToolbox/CMakeLists.txt: (0.6.5)

	- Add itk_icp_registration.

	- Group the include directories.

2013-08-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabImportFilter.h: (0.6.2)
	* matlab/MatlabImportFilter.hxx: (0.6.2)
	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (0.2.3)
	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.1.4)
	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.1.1)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.1.4)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.5)
	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.1.3)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.4.2)

	- Rename the methods in MatlabImportFilter, as they were very confusing.

	* Add matlab/ItkToolbox/ItkICPRegistration.cpp: (0.0.1)
	* Add matlab/test/test_itk_icp_registration.m: (0.0.1)

	- Preliminary code for ITK_ICP_REGISTRATION Iterative Closest
	Point registration.

	Not a full working function, but this code compiles and runs the
	small examples in the test script. Comit before I start working on
	reading user choices for transform, optimizer, etc. as well as the
	parameters for each of them.

2013-08-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabExportFilter.hxx: (0.3.2)

	- Fix bug. CopyVectorOfScalarsToMatlab() was missing the bit that
	actually copies the vector content to the Matlab buffer.

	* matlab/VectorWrapper.h: (0.5.4)
	* matlab/VectorWrapper.hxx: (0.4.1)

	- Add partial specialization for itk::Point.

	* matlab/GerardusCommon.h: (0.10.0)
	* matlab/MatlabExportFilter.hxx: (0.3.1)

	- Avoid code duplication with new function
	convertCppDataTypeToMatlabCassId().

	* matlab/MatlabExportFilter.hxx: (0.3.0)
	* matlab/MatlabExportFilter.h: (0.3.0)

	- Add CopyVectorOfScalarsToMatlab and CopyVectorOfVectorsToMatlab.

2013-08-08  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/CGAL-4.2/cmake/modules/CGAL_SetupDependencies.cmake:

	- Undo last change, leave find_package(GMP/MPFR) where it was.

	* CMakeLists.txt: (0.5.8)

	- Fix bug. I think that the External Projects called GMP and MPFR
	confuse things, so rename as GMP_GERARDUS and MPFR_GERARDUS.

	- Remove the file size checking of the boost tarball. I hadn't
	realized that it requires an external module that overwrites
	CMake's file(). This could be a pain to maintain in the future.

	* cpp/src/third-party/CGAL-4.2/CMakeLists.txt:

	- Add explicit dependencies from the core CGAL library to gmp and
	mpfr libraries, to make sure that the latter are build before.

	* CMakeLists.txt: (0.5.7)

	- Fix bug. Wrong variable name for C++ compiler.

	* CMakeLists.txt: (0.5.6)

	- Modifications for Linux/Mac so that Gerardus' CMake system can
	configure the project on an Oxford Supercomputing Centre cluster
	(in particular, SAL). By extension, this should make the project
	work on more machines.

	- The compilers can be given as environmental variables as
	gcc/g++, instead of e.g. gcc-4.4. If that's the case, now we check
	what version the compilers are, and whether they are compatible
	with the Matlab version (currently, only Matlab R2012a tested).

	- Older versions of cmake require that ExternalProject_Add have an
	empty DOWNLOAD_COMMAND even if source code is already in a known
	directory.

	- With the Boost libraries, it is possible that the download of
	the boost tarball seems correct, but the tarball is an empty
	file. We need to detect these cases, and exit the build with an
	error. In those cases, the user should just download the tarball,
	e.g. with wget from Linux, copy it to the expected
	${BOOST_TARBALL_FILENAME}, and re-run cmake

	- Tidy up Boost detection for Linux/Mac. In Linux/Mac, Matlab
	distributes the Boost libraries with names like
	e.g. libboost_system.so.1.44.0. But FindBoost looks for libraries
	with a suffic .so, so it cannot find them. Thus, we are going to
	temporarily make .so.1.44.0 a valid suffix, just for the Boost
	libraries.

	* cpp/src/third-party/CGAL-4.2/cmake/modules/CGAL_SetupDependencies.cmake:

	- Only look for GMP and MPFR if they are not provided with
	Gerardus. This problem appeared when trying to build Gerardus in
	the OSC cluster SAL.

2013-08-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.4)
	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.1.3)

	- Give an error if X has NaNs or Infs. Otherwise, Matlab will
	throw a segfault.

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.3.6)

	- Replace bunch of code to convert mesh to segmentation mask by
	function scimat_closed_surf_to_bw().

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (0.3.5)

	- Fix syntax. The input argument we use is the radius of the alpha
	shape, not the alpha value. In fact, alpha=radius^2.

	- Add commented out code to compute the alpha shape with
	cgal_fixed_alpha_shape3() instead of alphavol(). The CGAL code is
	slower (because of the Delaunay triangulation), and we won't use
	it.

	* CMakeLists.txt: (0.5.5)

	- Fix bug. Make previous change work in Windows too. For Windows,
	the directory for Boost libraries is gerardus/lib, as that's where
	they get built and installed (in Windows, we cannot use the Boost
	libraries released with Matlab).

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.12)

	- Fix bug. Make previous change work in Windows too. In Windows,
	adding Boost_THREAD_LIBRARY to the list of libraries linked to by
	cgal_check_self_intersect erroneously duplicates symbols.

	* CMakeLists.txt: (0.5.4)

	- Fix bug. In Linux and Mac, the binaries had broken links to the
	Boost libraries. For example, linked to libbost_system.so.1.44.0
	but in the gerardus/lib directory, that only contained the
	softlink libbost_system.so. Hence, the binary could not find the
	library.

	To fix it, we no longer soft link to the Boost libraries from
	gerardus/lib. Instead, in Linux and Mac we look for the actual
	boost libraries in the Matlab directory, and link directly to
	them.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.11)

	- Fix bug. cgal_check_self_intersect needs to be explicitly linked
	to the Boost_THREAD_LIBRARY.

	* matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.1.2)

	- Add debug messages for time profiling.

	* Add matlab/CgalToolbox/CgalFixedAlphaShape3.cpp: (0.1.0)
	* Add matlab/CgalToolbox/cgal_fixed_alpha_shape3.m: (0.1.0)
	* Add matlab/test/test_cgal_fixed_alpha_shape3.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.10)

	- CGAL_FIXED_ALPHA_SHAPE3 Individual alpha-shapes of a 3D set of
	points.

	* matlab/CgalToolbox/cgal_alpha_shape3.m: (0.1.1)
	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.3)

	- Add info to help header.

2013-08-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_cgal_alpha_shape3.m: (0.1.1)

	- Fix bug. Bad syntax of trisurf.

	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.2)

	- Fix bug. Remove useless code at the end of the file.

	* matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.1)
	* cpp/src/third-party/CGAL-4.2/include/CGAL/Triangulation_hierarchy_3.h:

	- To accelerate the Delaunay triangulation, add
	CGAL::Fast_location flag to the type definition. This triggers a
	bug in Triangulation_hierarchy_3.h. Sebastien Loriot sent a
	patched file in this email thread

	http://cgal-discuss.949826.n4.nabble.com/Extracting-triangulation-from-alpha-shape-td4657870.html#a4657881

	- Fix bug. Comment out debug message.

	* Add matlab/CgalToolbox/CgalAlphaShape3.cpp: (0.1.0)
	* Add matlab/CgalToolbox/cgal_alpha_shape3.m: (0.1.0)
	* Add matlab/test/test_cgal_alpha_shape3.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.9)

	- CGAL_ALPHA_SHAPE3  Alpha-shape of a 3D set of points.

	* matlab/VectorWrapper.h: (0.5.3)

	- Fix bug, the VectorValueType for the partial specialization of
	K=CGAL::Exact_predicates_exact_constructions_kernel should have
	been K, not double.

	- Add partial specialization for
	CGAL::Exact_predicates_inexact_constructions_kernel.

	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.1.2)

	- Fix bug, the VectorValueType for the partial specialization of
	K=CGAL::Exact_predicates_exact_constructions_kernel should have
	been K, not double.

2013-07-30  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_ventricles_phantom.m: (0.1.1)

	- Add section "create a mesh from the myocardium binary mask",
	that makes use of the third-party iso2mesh toolbox.

	* Delete matlab/test/test_check_sphtrisurf_vertices.m:

	- I had forgotten to delete the test script of function
	check_sphtrisurf_vertices() that was deleted yesterday.

2013-07-30  Christopher Kelly  <christopher.kelly28@gmail.com>

	* Add common.svnprops

	- SVN properties file which can be imported in the SVN properties window
	when adding MATLAB files to repository. This contains the Rev, Date and
	native properties, and will save us from the pain in the neck that would
	be having to add them by hand for every new file.

2013-07-30  Christopher Kelly  <christopher.kelly28@gmail.com>

	* Add matlab/CardiacToolbox/ventricles_phantom.m: (0.1.0)
	* Add matlab/test/test_ventricles_phantom.m: (0.1.0)

	- VENTRICLES_PHANTOM Create phantom image of simplified heart ventricles.

2013-07-30  Ramon Casero  <rcasero@gmail.com>

	* release 0.11.0

	- Fixed some issues with MEX functions failing on Windows because
	the DLLs they linked to (CGAL, GMP, MPFR) where not visible. That
	has been fixed by adding code to add_gerardus_paths.m, so that the
	DLL directories are added from Matlab to the system path in
	Windows. This realease has been tested to work on Windows.

	* CMakeLists.txt: (0.5.3)

	- Fix bug. In Windows, gmp and mpfr are provided as .lib/.dll
	pairs. They have to be added to the project as shared and not
	static libraries. Also, we have to set up some variables as we do
	in linux/mac.

2013-07-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/add_gerardus_paths.m: (0.2.1)

	- Clear up after running.

	* matlab/add_gerardus_paths.m: (0.2.0)

	- Automate adding system paths to DLLs for Windows.

2013-07-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/add_gerardus_paths.m: (0.1.7)

	- I had forgotten to add CgalToolbox.

	* matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.1.1)

	- Fix bug. I had commented out the "else" line in two "if" blocks,
	so legitimate intersections were being counted as
	self-intersections.

	* Add matlab/CgalToolbox/CgalCheckSelfIntersect.cpp: (0.1.0)
	* Add matlab/CgalToolbox/cgal_check_self_intersect.m: (0.1.0)
	* Add matlab/test/test_cgal_check_self_intersect.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.7)

	- CGAL_CHECK_SELF_INTERSECT Check for self-intersections in a
	triangular mesh.

	* matlab/VectorWrapper.h: (0.5.2)
	* matlab/ItkToolbox/CMakeLists.txt: (0.6.4)

	- Add partial specialization for
	CGAL::Point_3<CGAL::Exact_predicates_exact_constructions_kernel >.

	- This makes targets downstream, e.g. itk_imfilter(), need to
	compile against gmp.h and mpfr.h. This problem originates in that
	we didn't create an inheritance tree to have a basic
	MatlabImportFilter that only includes basic types, which then we
	can use to create children classes like MatlabImportCgalFilter or
	MatlabImportItkFilter. Anyway, this is not a big problem that we
	need to fix now.

	* CMakeLists.txt: (0.5.2)

	- Fix bug. For linux and MacOS X builds, libraries gmp and mpfr
	are added as targets by hand, as they are built as an external
	project. However, instead of giving the location of the library,
	we were giving the location of their directories. This made the
	linker fail when it tried to link against them.

	- Fix bug. In linux and MacOS X builds, libraries gmp and mpfr
	should be shared libraries rather than static libraries, otherwise
	we cannot link MEX files to them.

	* Delete matlab/ManifoldToolbox/check_sphtrisurf_vertices.m:

	- The math supporting this function is wrong. It's possible to
	create a vertex that created overlaps and has sum of adjacent
	angles = 2*pi. The reason is that when a vertex is moved outside
	the convex hull of its neighbours, it's angle sum will be < 2*pi,
	but some of its neighbours will have > 2*pi. If we then move one
	of these neihgbours outside its corresponding convex hull, it
	should have <2*pi. Thus, there's some intermediate position where
	the angle sum = 2*pi.

	- This function is replaced by
	matlab/CgalToolbox/cgal_check_self_intersect.m.

2013-07-22  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/smdscale.m: (0.5.2)

	- Fix bug. If input was sparse distance matrix, output distance
	matrix was given as a vector, instead of as a sparse matrix.

	* test/test_smdscale.m: (0.3.0)

	- Delete the tests with a Isomap-like graph. Add simple tests with
	points on a sphere. Add test with a triangular mesh from a left
	ventricle segmentation, with and without PCA normalization.

	* Add test/test_lmdscale.m: (0.1.0)
	* Add matlab/ManifoldToolbox/lmdscale.m: (0.1.0)

	- LMDSCALE Local neighbourhood Multidimensional scaling on a
	plane.

	* matlab/ManifoldToolbox/smdscale.m: (0.5.1)

	- Deal with input D matrix in a better way. Now D can be sparse or
	full, but in both cases local neighbourhoods are dealt with. The
	only difference is in efficiency. The algorithm is more efficient
	when D is full for lots of connections, and sparse for few
	connections (as in a mesh).

2013-07-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/ThirdPartyToolbox/FastMarchingToolbox/mex/anisotropic-fm-feth/fm2dAniso.h:

	- Fix bug. Windows cmath or math.h libraries don't include a
	round() function, so we have to code one by hand for Windows.

2013-07-18  Ramon Casero  <rcasero@gmail.com>

	* matlab/add_gerardus_paths.m: (0.1.6)

	- Add paths for FastMarchingToolbox Matlab and MEX files.

	* matlab/ThirdPartyToolbox/FastMarchingToolbox/mex/perform_front_propagation_3d_mex.cpp:

	- Fix bug. Compilation errors in linux due to using general types
	(int) when a MEX type was needed (mwSize).

	* matlab/ThirdPartyToolbox/FastMarchingToolbox/CMakeLists.txt: (0.1.1)

	- Remove build of anisotropic propagation from toolbox, as it
	fails due to missing files. The reasons is that: Gabriel Peyre
	(21 Dec 2010): The code for the anisotropic propagation is not
	included anymore in the toolbox, so do not try to compile
	it. Contact me if you *really* need anisotropic propagation.

	* Add matlab/ThirdPartyToolbox/FastMarchingToolbox/CMakeLists.txt:
	(0.1.0)
	* matlab/ThirdPartyToolbox/CMakeLists.txt: (0.1.1)

	- Add the fast marching toolbox to the gerardus build system.

	* matlab/ThirdPartyToolbox/FastMarchingToolbox:

	- Change end-of-line to linux format. Set svn property for native
	end-of-line.

	* matlab/ThirdPartyToolbox/FastMarchingToolbox/mex/anisotropic-fm-feth/fm2dAniso.h:

	- Remove compilation warning in linux. Unused variables.

	* matlab/ThirdPartyToolbox/FastMarchingToolbox/mex/anisotropic-fm-feth/fm2dAniso.cpp:

	- Fix bug. Compilation errors in linux due to using general types
	(int) when a MEX type was needed (mwSize).

	* Add matlab/ThirdPartyToolbox/FastMarchingToolbox:

	- Toolbox Fast Marching by Gabriel Peyre

	24 Oct 2004 (Updated 27 Jun 2009). A toolbox for the computation
	of the Fast Marching algorithm in 2D and 3D.

	Downloaded from
	http://www.mathworks.com/matlabcentral/fileexchange/6110

2013-07-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/smdscale.m: (0.5.0)
	* matlab/test/test_smdscale.m: (0.2.4)

	- Substantial rewrite of smdscale.

	- The previous version did not have a correct implementation of
	Agarwal's method. An iteration to adjust the mean position of each
	point with respect to its neighbours was missing.

	- I have replace Matlab functions distance, azimuth, meanm and
	reckon by the corresponding formulas, so that the function runs
	faster.

	- Now we convert to angular distances, and then internally all
	operations are with angular distances in radians.

	- Output arguments stopCondition and err have swapped places.

	- err is no longer a vector with the Frobenius norm. Now it's a
	struct with several error metrics: err.rawstress, err.stress1,
	err.maxalpha, err.medalpha.

2013-07-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/trihemisphere.m: (0.1.0)

	- TRIHEMISPHERE Triangular mesh on hemisphere with roughly
	uniformly distributed points.

2013-07-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/dmatrix_con.m: (0.1.1)

	- Fix bug. If the input connectivity matrix was boolean, then
	distances got casted to boolean too. To fix this, we cast the
	connectivity matrix to double.

	* Add matlab/ManifoldToolbox/dmatrix_con.m: (0.1.0)

	- DMATRIX_CON Sparse distance and shortest-path distance matrices
	between the nodes of a mesh from a connectivity matrix.

	* Add matlab/ManifoldToolbox/congrow.m: (0.1.0)
	* Add matlab/test/test_congrow.m: (0.1.0)

	- CONGROW Grow the local neighbourhoods in a connectivity matrix.

	* matlab/ManifoldToolbox/dmatrix_sphmesh.m: (0.2.0)
	* matlab/ManifoldToolbox/dmatrix_mesh.m: (0.2.0)
	* matlab/test/test_dmatrix_sphmesh.m: (0.1.1)
	* matlab/test/test_surface_tridomain: (0.1.1)

	- Swap the order of the input arguments to (tri, x). This allows
	that we pass only the edge description of the mesh, tri, without
	having to also give vertex coordinates. In addition, this also
	agrees with the format of the rest of mesh-related function in
	gerardus.

2013-07-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/quadsurf.m: (0.1.0)

	- QUADSURF Quadrangular mesh surface plot.

2013-07-03  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/tri_squeeze.m: (0.1.0)

	- TRI_SQUEEZE Remove disconnected vertices from triangular mesh.

2013-07-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/update_README.sh: (0.2.1)

	- Add entry for ManifoldToolbox in the summary.

	* Add matlab/ThirdPartyToolbox/SphereUniformSamplingToolbox:
	* matlab/add_gerardus_paths.m: (0.1.5)

	- Uniform Sampling of a Sphere by Anton Semechko. 05 Jun 2012
	(Updated 23 May 2013). Downloaded from

	http://www.mathworks.co.uk/matlabcentral/fileexchange/37004-uniform-sampling-of-a-sphere

	- "The main function is titled 'ParticleSampleSphere' and allows
	you to create an approximately uniform triangular tessellation of
	the unit sphere by minimizing the generalized electrostatic
	potential energy (aka Reisz s-energy) of the system of charged
	particles. Effectively, this function produces a locally optimal
	solution to the problem of finding a minimum Reisz s-energy
	configuration of N equal charges (s=1 corresponds to the original
	Thomson problem)."

	* matlab/ManifoldToolbox/surface_tridomain.m: (0.2.0)

	- Add syntax [TRI, UV] = surface_tridomain('rect', ULIN, VLIN).

2013-07-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/surface_tridomain.m: (0.1.1)

	- Fix bug. Remove repeated points at lon=-180 and lon=180.

2013-06-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/dmatrix_sphmesh.m: (0.1.0)
	* matlab/test/test_dmatrix_sphmesh.m: (0.1.0)

	- DMATRIX_SPHMESH Sparse great-circle distance and shortest-path
	distance matrices between the nodes of a spherical mesh.

	* matlab/ManifoldToolbox/dmatrix_mesh.m: (0.1.1)

	- Fix bug. In each mesh facet, one edge was being forgotten, the
	one that links the last vertex in tri(i, :) to the first one.

2013-06-26  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/surface_tridomain.m: (0.1.0)
	* Add matlab/test/test_surface_tridomain.m: (0.1.0)

	- SURFACE_TRIDOMAIN Triangular mesh to cover a planar or spherical
	domain.

	* matlab/PointsToolbox/surface_param.m: (0.3.0)
	* matlab/test/test_surface_param.m: (0.3.0)

	- Add 'sphproj' parametrization: Direct projection on unit sphere
	centered on point set centroid. This cannibalises function
	proj_on_sphere(), that will shortly be deleted.

2013-06-25 Chris Kelly <christopher.kelly28@googlemail.com>

	* CMakeLists.txt: (0.5.1)

	- Windows finds the source code directory of ITK rather than the
	installed ITK, so we have to tell it where to find the correct
	directory.

2013-06-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/check_sphtrisurf_vertices.m: (0.1.0)
	* Add matlab/test/test_check_sphtrisurf_vertices.m: (0.1.0)

	- CHECK_SPHTRISURF_VERTICES Check integrity of the vertices of a
	spherical triangular mesh, to make sure facets do not overlap.

2013-06-24  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/SphericalTrigToolbox:
	* Add matlab/add_gerardus_paths.m: (0.1.4)

	- Oblique Spherical Triangle toolbox by Rody Oldenhuis, 23 Feb
	2009 (Updated 30 Nov 2012). Downloaded from

	http://www.mathworks.co.uk/matlabcentral/fileexchange/23075-oblique-spherical-triangle-toolbox

	This toolbox can solve any of the 6 possible subproblems
	associated with an oblique spherical triangle, when only 3 of the
	6 angles are known.

	The toolbox basically is an implementation of the set of tools
	developed in [Wertz, 2001], which aimed to fully automize the
	procedure and do away with the need of user intervention.

	EXAMPLE:

	[b1, c1, C1, b2, c2, C2] = aas(A, B, a)

	gives both solutions for the sides b and c and the angle C, when
	given angles A, B and side a. This particular problem can be
	called the Angle-Angle-Side problem, hence the name.

	Both degrees and radians are implemented, the difference is
	indicating by appending a 'd' to the function name. The above
	example expects and returns radians, whereas

	[b1, c1, C1, b2, c2, C2] = aasd(A, B, a)

	expects and returns degrees.

	[Wertz, 2001] James R. Wertz, Mission Geometry: Orbit and
	Constellation Design and Management, 2001. Published by Microcosm
	and Kluwer Academic Publishers.

2013-06-24  Chris Kelly <christopher.kelly28@googlemail.com>

	* matlab/FindMatlab.cmake: (0.2.8)

        - Matlab2012b is version 8.0. Add this to the list of recognisable
	versions so that configuration doesn't fail.

2013-06-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CgalTriFacetArea.cpp: (0.1.0)
	* matlab/CgalToolbox/cgal_trifacet_area.m: (0.1.0)
	* matlab/test/test_cgal_trifacet_area.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.6)

	- Add CGAL_TRIFACET_AREA Area of the facets in a triangular mesh.

2013-06-23  Ramon Casero  <rcasero@gmail.com>

	* release 0.10.0:

	- Substantial changes to the build, particularly regarding the
	Boost libraries. Now in Linux we link to the Boost libraries (.so)
	provided by Matlab. In Windows, we download the source code and
	build+install the Boost libraries.

	* matlab/test/test_surface_param.m: (0.2.2)

	- Fix bug. Wrong variable name.

	* Delete cpp/src/third-party/boost_1_53_0:

	- No longer necessary. The Linux build uses the boost libraries
	provided by Matlab, and the Windows build downloads the source
	corde of the same version as the boost libraries provided by
	Matlab.

	* CMakeLists.txt: (0.5.0)

	- Make the build work in Windows. In Windows, we cannot link to
	the Boost libraries provided by Matlab, as we do in Linux. The
	reason is that Windows Matlab only provides the .dlls, and not the
	.lib files necessary to link even dynamically. Thus, in the end we
	are going to leave things as they were in Linux (link to Matlab
	provided Boost libraries), and in Windows we have to build the
	Boost libraries ourselves, and link to them.

	- However, it's worth noting that we are not using
	ExternalProject_Add(), because this means that the Boost libraries
	are not available at configuration time, which means that
	FindBoost cannot find them, so they are not available to
	targets. Instead, we just download, build and install Boost by
	hand, at configuration time.

	* matlab/ItkToolbox/CMakeLists.txt: (0.6.3)

	- Fix bug. Windows requires that we explicitely ask to link
	itk_imfilter to CGAL.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.5)

	- Minor, relocate code a bit further up, and avoid using the same
	include_directories() twice, as it's redundant.

2013-06-21  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.4.0)

	- Big change again. In Linux, having both the Boost libraries
	externally compiled and the ones provided by Matlab created
	problems. For example, MEX functions link to the Matlab boost
	libraries via the mex libraries. If we also link them to CGAL,
	then they get linked to the external Boost libraries too.

	Now, instead of that, we figure out which version of Boost is
	provided by Matlab. Then, we download the source code of that
	version, and copy the header files to the include directory. In
	the case of Boost 1.44.0 (the one required by Matlab 2012a), we
	also need to patch one of the files due to a bug.

	In Linux, we don't build the Boost libraries, though. We just
	create symlinks to the Matlab provided libraries.

	This new approach requires only one cmake and one make to build
	Gerardus, instead of the convoluted build before.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.4)

	- Remove the linking to the Boost libraries, as it's no longer
	necessary.

2013-06-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/surface_param.m: (0.2.1)
	- 'sphisomap': Update estimation of sphere radius. The mean of
	point radii did not work very well. Now we estimate the sphere
	radius from the half-circumference.

	* matlab/test/test_surface_param.m: (0.2.1)

	- Apply PCA normalization to the mesh before computing spherical
	Isomap parametrization. This makes the mesh a lot more similar to
	a sphere.

	- Add comparisons between CALD and spherical Isomap
	parametrizations.

	* matlab/ManifoldToolbox/smdscale.m: (0.4.0)
	* matlab/test/test_smdscale.m: (0.2.3)

	- Add internal estimation of the sphere's radius if it's not
	provided. We do it by computing the full distance matrix, if
	necessary, then from it the longest distances from each point, and
	the median of it all. This should give a reasonable estimate of
	the sphere's half circumference. From it, it's easy to compute the
	radius.

	* matlab/ThirdPartyToolbox/dijkstra.cpp: (0.3.2)
	* matlab/test/test_dijkstra.m: (0.3.1)

	- Fix bug: the original algorithm returns a distance
	SMALL=2.22045e-16 between each node and itself, because of the way
	the algorithm is initialized. This distance should be zero.

	* Add matlab/PointsToolbox/pca_normalize.m: (0.1.0)
	* Add matlab/test/test_pca_normalize.m: (0.1.0)

	- Normalize a set of points so that its centroid is zero,the
	Principal Components correspond to the Cartesian axes, and the
	variance (eigenvalue) along each Principal Component is one.

	* matlab/PointsToolbox/pts_cn.m: (0.1.1)

	- Update argument checking syntax.

	- Add "See also" to new function pca_normalize.

2013-06-17  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/test/test_surface_param.m: (0.2.0)
	* Add matlab/PointsToolbox/surface_param.m: (0.2.0)

	- Add Control Area and Length Distortions (CALD) by Li Shen.

	* Add matlab/test/test_surface_param.m: (0.1.0)
	* Add matlab/PointsToolbox/surface_param.m: (0.1.0)

	- This function extracts the parametrization part of
	surface_interpolation(), that is going to be deprecated. I have
	changed the way you pass arguments to sphisomap to make it
	comparable to isomap. Now all optimization is done in the full
	disjkstra distance matrix. I have also simplified the code,
	merging the part about default and the part with the actual
	parametrization.

	* matlab/ThirdPartyToolbox/dijkstra.m: (0.3.1)
	* matlab/ThirdPartyToolbox/dijkstra.cpp: (0.3.1)

	- Small clarification in the help header.

2013-06-15  Ramon Casero  <rcasero@gmail.com>

	* matlab/update_README.sh: (0.2.0)

	- Put the case loop outside, and then the loop for each file
	inside the particular cases. This allows us to use different find
	commands to list the files in each toolbox, suiting the different
	conventions of third party toolboxes.

	* matlab/add_gerardus_paths.m: (0.1.3)

	- Correct the paths to the Spharm toolbox.

	* matlab/add_gerardus_paths.m: (0.1.2)

	- Add paths to iso2mesh and Spharm toolboxes.

	* matlab/update_README.sh: (0.1.4)

	- Add special rule for third-party Spharm Toolbox.

	* Add matlab/ThirdPartyToolbox/SpharmToolbox: (1.0.0)

	- Fix bugs. Mostly the syntax for fileparts() with 4 output
	arguments is not valid, at least on Matlab 2012a for linux.

	- From the Li Shen Laboratory, Indiana University. Downloaded from
	http://imaging.indyrad.iupui.edu/projects/SPHARM/SPHARM-pack/SPHARM-MAT-v1-0-0.tar.gz

2013-06-14  Ramon Casero  <rcasero@gmail.com>

	* matlab/update_README.sh: (0.1.3)

	- The iso2mesh Toolbox has a different convention for the help
	headers. It's easier to add a special case to this script than
	modifiying all the help headers in iso2mesh.

	* Add matlab/ThirdPartyToolbox/iso2meshToolbox:

	- Version 2013 beta. By Qianqian Fang and David Boas. Website
	http://iso2mesh.sourceforge.net/cgi-bin/index.cgi?Home.

	- Downloaded from
	http://sourceforge.net/projects/iso2mesh/?source=dlp

	* Add test_scimat_dmatrix_imgeodesic.m: (0.1.0)

	- With "Toy example, ellipsoidal shape in 2D", "3D example, rat
	left ventricle"

	* Add matlab/add_gerardus_paths.m: (0.1.1)

	- Fix bug. Argument checking in a script produces error.

	* Add matlab/add_gerardus_paths.m: (0.1.0)

	- Add all Gerardus toolboxes to the Matlab path.

	* Rename matlab/ThirdPartyToolbox/nifti as
	matlab/ThirdPartyToolbox/niftiToolbox:

	- So that it follows the same convention as the others.

	* matlab/ItkToolbox/CMakeLists.txt: (0.6.2)

	- Fix bug. No need to link itk_imfilter to CGAL. This also creates
	a link to Boost libraries both the ones in Matlab and the ones
	provided by Gerardus, which throws a runtime error.

2013-06-12  Ramon Casero  <rcasero@gmail.com>

	* release 0.9.0:

	- Gerardus now builds on Linux and Windows, 64 bit.

	* CMakeLists.txt: (0.3.4)

	- Fix bug, broken linux compilation. We use Boost static libraries
	for the Windows build, but for the linux build we need Boost
	shared objects.

	* CMakeLists.txt: (0.3.3)
	* cpp/src/CMakeLists.txt: (0.3.2)
	* cpp/src/third-party/CGAL-4.2/CMakeLists.txt: (0.1.1)
	* matlab/ItkToolbox/CMakeLists.txt: (0.6.1)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.3)

	- Final changes to make Gerardus build on Windows 64 bit, with
	Visual Studio 10.

	* CMakeLists.txt: (0.3.2)
	* cpp/src/CMakeLists.txt: (0.3.1)

	- Some more Windows-specific changes to build the Boost libraries.
	Use ${Boost_LIBRARIES} instead of the names of individual
	libraries.  This way, it'll work for both Windows and Unix-like
	builds, as find_package(Boost) will take care of finding the
	library names.

	* CMakeLists.txt: (0.3.1)

	- Add Windows-specific syntax to build the Boost libraries.

2013-06-11  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (0.3.0)
	* matlab/CMakeLists.txt: (0.3.0)
	* matlab/ItkToolbox/CMakeLists.txt: (0.6.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.2)
	* cpp/src/CMakeLists.txt: (0.3.0)
	* cpp/src/third-party/mba/CMakeLists.txt: (0.1.3)
	* Delete include/boost:

	- Quite big change in the CMake build system. Now Boost libraries
	are built as an external project. Attempts to integrate the build
	and install more closely with the Gerardus CMake build system have
	proven unsuccessful, in part because without using
	FindBoost.cmake, the linker gets confused between the local Boost
	and any system-wide installed Boost, and FindBoost.cmake runs in
	the configuration phase, before ExternalProject_Add() has the
	chance to build Boost.

	- The CMake configuration of some third party libraries, like the
	GMP and MPFR dependencies of CGAL, as well as the Matlab
	configuration have been moved to the root CMakeLists.txt.

	- Compilation and linking options have been grouped and arranged
	accordingly.

	* Delete cpp/src/third-party/boost-1.50.0:
	* Replace cpp/src/third-party/boost_1_50_0 by
	cpp/src/third-party/boost_1_53_0:

	- Now we are not limited to the older version by rpply, so we may
	as well get the latest one.

	* Add cpp/src/third-party/boost_1_50_0:

	- The rpply version of Boost 1.50.0 is just not going to work with
	Windows without substantial effort. I'm adding the original source
	files, after deleting the doc, test and example directories, to
	try to build boost as an external project.

2013-06-06  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/CMakeLists.txt: (0.2.7)

	- I commited the change without this comment or increasing the
	version number. The include_directories and link_directories for
	the boost libraries have to go before the add_subdirectory. This
	is because the the boost header files are already in
	gerardus/include, and we use these instead of the ones within the
	boost directory tree for compilation (otherwise the cmake system
	cannot find the header files).

	* cpp/src/third-party/boost-1.50.0/boost/thread/CMakeLists.txt:
	* cpp/src/third-party/boost-1.50.0/boost/chrono/CMakeLists.txt:
	* cpp/src/third-party/boost-1.50.0/boost/system/CMakeLists.txt:
	* cpp/src/third-party/boost-1.50.0/boost/date_time/CMakeLists.txt:
	* cpp/src/third-party/boost-1.50.0/boost/filesystem/CMakeLists.txt:

	- Primarly, we need to generate DLLs for the boost libraries so
	that they can be linked into MEX files. However, CMake for Windows
	doesn't seem to know how to link executables to the DLLs, which
	means that we have to generate additional static libraries too.

	* cpp/src/CMakeLists.txt: (0.2.6)
	* cpp/src/third-party/boost-1.50.0/CMakeLists.txt:

	- BUILD_SHARED_LIBS is a variable specific to the boost
	libraries. It's better to put it inside the boost CMakeLists.txt,
	to avoid it affecting other subprojects unintentionally.

2013-06-06    <Ramon Casero@BORON>

	* matlab/FiltersToolbox/im2dmatrix.cpp: (0.2.4)

	- Small adjustments to remove some compilation errors under
	VisualStudio 10 in Windows.

2013-06-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_cgal_closest_trifacet.m: (0.2.2)

	- Fix bug. The point coordinates in the right ventricle example
	where incorrectly scaled.

	- Fix bug. In the right ventricle example we were calling
	closest_trifacet() instead of cgal_closest_trifacet().

	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.1.3)
	* matlab/CgalToolbox/cgal_closest_trifacet.m: (0.1.1)
	* matlab/ManifoldToolbox/closest_trifacet.m: (0.2.2)

	- Add note to help header comparing speeds.

	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.1.2)

	- Compute the distance directly from the closest point result
	instead of running tree.squared_distance(), which is redundant.

	- I had forgotten to comment out some debug code.

	* matlab/test/test_closest_trifacet.m: (0.3.1)

	- Fix bug. I had the wrong function name in the Right Ventricle
	example, calling cgal_closest_trifacet() instead of
	closest_trifacet().

	* matlab/MatlabImageHeader.cxx: (0.1.1)
	* matlab/GerardusCommon.h: (9.0.2)
	* matlab/MatlabExportFilter.hxx: (0.2.1)

	- Small adjustments to remove some compilation errors under
	VisualStudio 10 in Windows.

	* Delete cpp/src/third-party/CGAL-4.2/examples:
	* Delete cpp/src/third-party/CGAL-4.2/demo:
	* Delete cpp/src/third-party/CGAL-4.2/doc_html:

	- Unnecessary to build the project, just make checking out the
	project slower.

2013-06-05  Ramon Casero  <rcasero@gmail.com>

	* Delete cpp/src/third-party/CGAL-4.0.2:
	* Delete cpp/src/third-party/gmp-5.0.5:
	* Delete cpp/src/third-party/mpfr-3.1.1:

	- We have upgraded to new versions of these libraries.

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.1)

	- Update path to CGAL, as we are now using a new version (4.2)
	with a different directory name.

	* matlab/ItkToolbox/CMakeLists.txt: (0.5.8)

	- Add dependency to compiler_config.h, a header file generated by
	CGAL and only available once CGAL has installed.

	* cpp/src/CMakeLists.txt: (0.2.5)

	- after CGAL builds, we need to copy the header file
	compiler_config.h it generates to the CGAL include directory, so
	that it's available for the other sub-projects that use CGAL
	(e.g. itk_imfilter).

	* matlab/ItkToolbox/CMakeLists.txt: (0.5.7)

	- Update path to CGAL, as we are now using a new version (4.2)
	with a different directory name.

	* cpp/src/third-party/CGAL-4.2/cmake/modules/CGAL_SetupBoost.cmake: (0.1.0)

	- We distribute the boost libraries with gerardus, so we don't
	need to look for them as an external package. In fact, if we don't
	comment out the find_package() below, we get a recursive loop with
	CGAL that throws a configuration warning.

	* cpp/src/third-party/CGAL-4.2/CMakeLists.txt: (0.1.0)

	- Modifications to make CGAL build as a subproject in Gerardus.

	* cpp/src/CMakeLists.txt: (0.2.4)

	- Now instead of giving an error for the Windows build, we are
	going to use the pre-compiled GMP and MPFR libraries distributed
	with the Windows installer for CGAL. For Unix-like builds, we
	build GMP and MPFR from the source code, as we were doing
	before. This hasn't been tested with Windows yet, though.

	- We need to make sure that the boost libraries are going to be
	built as dynamic libraries. Without the following directive, they
	get built as static, and then CGAL gives an error when it tries to
	build a dynamic library with them.

	* matlab/test/test_cgal_closest_trifacet.m: (0.2.1)

	- Fix bug. We were calling the Matlab implementation in the Right
	Ventricle test, instead of the MEX implementation.

	* cpp/src/third-party/boost-1.50.0/CMakeLists.txt:

	- Fix bug. The variable saying this is the first or second pass
	must be set before we throw the error. Also, we must throw a fatal
	error right after that, to avoid CMake continues doing
	configuration of subprojects. This also makes it more obvious to
	the user that the error in the first pass is intentional, and that
	now a second cmake .. is needed.

	* Rename cpp/src/third-party/boost as cpp/src/third-party/boost-1.50.0:

	- Make more clear the library version, like we do with the rest of
	third party libraries.

	* Add cpp/src/third-party/gmp-5.0.5:

	- Downloaded from ftp://ftp.gmplib.org/pub/gmp-5.1.2/gmp-5.1.2.tar.lz.

	* Add cpp/src/third-party/mpfr-3.1.2:

	- Downloaded from http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.xz.

	* Add cpp/src/third-party/CGAL-4.2/auxiliary/*:

	- GMP and MPFR headers for Windows 64 bit. I got this by
	installing CGAL 4.2 for Windows 64 bit, and then copying over the
	auxiliary directory.

	* Add cpp/src/third-party/CGAL-4.2:

	- Code downloaded from
	https://gforge.inria.fr/frs/?group_id=52&release_id=8001#cgal-_4.2-title-content.

	* release-0.8.2

	- Tag a version of the current project before making
	substantial changes by updating CGAL to v4.2.

	- Not all the project is working, as there seems to be a bug in
	CGAL 2.0.4 in tree.closest_point_and_primitive() that returns the
	wrong facet.

	* matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.1.1)

	- There seems to be a bug in CGAL that gets the wrong closest
	facet in an AABB tree. I have added some debug code, but before
	further checking, I'm tagging the current code in Gerardus, and
	trying to upgrade to CGAL 2.4.

	* matlab/ManifoldToolbox/proj_on_sphere.m: (0.1.1)

	- Replace the mean of the spherical radii by the median, that is
	more robust.

	* matlab/test/test_closest_trifacet.m: (0.3.0)
	* matlab/test/test_cgal_closest_trifacet.m: (0.2.0)

	- Add test "Right ventricle mesh". This test fails for
	cgal_closest_trifacet(). The returned closest facets are not
	correct, but this seems to be a bug in CGAL v4.0.2.

2013-06-04  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/closest_trifacet.m: (0.2.1)

	- Update help header now that we have a C++ MEX implementation.

	* Add matlab/CgalToolbox/CgalClosestTriFacet.cpp: (0.1.0)
	* Add matlab/CgalToolbox/cgal_closest_trifacet.m: (0.1.0)
	* Add matlab/test/test_cgal_closest_trifacet.m: (0.1.0)
	* matlab/CgalToolbox/CMakeLists.txt: (0.2.0)

	- CGAL_CLOSEST_TRIFACET Closest triangular facet of a mesh to a
	point in 3D.

	* matlab/test/test_closest_trifacet.m: (0.2.1)

	- Add a new test point, closest to face 4.

2013-06-01  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/test_addpoint2tri.m: (0.1.0)
	* Add matlab/test/test_test_addpoint2tri.m: (0.1.0)

	- ADDPOINT2TRI Add one or more nodes to a triangular mesh.

	* matlab/ManifoldToolbox/closest_trifacet.m: (0.2.0)
	* matlab/test/test_closest_trifacet.m: (0.2.0)

	- Add output argument. Now distance from point to mesh is also
	provided.

	* matlab/ThirdPartyToolbox/pointTriangleDistance.m: (0.1.0)

	- Minor reformatting of the help header and add some Gerardus
	properties and headers.

	* Add matlab/ThirdPartyToolbox/pointTriangleDistance.m:
	* Add matlab/ThirdPartyToolbox/pointTriangleDistance-license.txt:

	- Calculate distance between a point and a triangle in 3D. By
	Gwendolyn Fischer. Downloaded from

	http://www.mathworks.co.uk/matlabcentral/fileexchange/22857-distance-between-a-point-and-a-triangle-in-3d

	* Add matlab/ManifoldToolbox/closest_trifacet.m: (0.1.0)
	* Add matlab/test/test_closest_trifacet.m: (0.1.0)

	- CLOSEST_TRIFACET Closest triangular facet of a mesh to a point
	in 3D.

2013-05-31  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CMakeLists.txt: (0.2.0)

	- Add target to build cgal_closestfacet().

	* Add matlab/ManifoldToolbox/dmatrix_mesh.m: (0.1.0)

	- DMATRIX_MESH Sparse distance and shortest-path distance matrices
	between the nodes of a mesh.

	* Delete matlab/PointsToolbox/dmatrix_complete.m:

	- One liner function that simply adds an unnecessary layer to dijkstra().

	* matlab/PointsToolbox/dmatrix.m: (0.3.1)

	- Update deprecated syntax to check input and output arguments.

2013-05-30  Ramon Casero  <rcasero@gmail.com>

	* matlab/VectorWrapper.h: (0.5.1)

	- Fix bug. Make the ValueType template element of the partial
	specialisation for itk::Size less specific. Otherwise, the
	BoxFilterType::RadiusValueType from the Median filter in
	ItkImFilter.cpp is not recognised by the partial specialisation.

	* matlab/ItkToolbox/ItkImFilter.cpp: (1.4.1)

	- Fix bug. Wrong variable name for default maximum error in Canny edge detector.

	- Fix bug. I had forgotten to uncomment the rest of the filters.

	* matlab/ItkToolbox/ItkImFilter.cpp: (1.4.0)
	* matlab/ItkToolbox/itk_imfilter.m: (0.7.3)
	* matlab/test/test_itk_imfilter.m: (0.4.1)

	- Add CannyEdgeDetectionImageFilter.

	* Add some image data files for tests:

	test/data/008-mri-downsampled-4.mha
	test/data/008-lvseg-thickslice-z.mha
	test/data/008-lvhull-points.mha
	test/data/008-lvhull-downsampled-4.mha
	test/data/008-rvhull-points.mha
	test/data/008-rvhull-downsampled-4.mha

	* matlab/MatlabImportFilter.hxx: (0.6.1)
	* matlab/MatlabImportFilter.h: (0.6.1)

	- Fix bug. The VectorSize template has to be an "unsigned int",
	because that's the type of the Dimension variable in ITK vectors,
	e.g. itk::Size. Otherwise, when we were passing VectorSize as an
	"unsigned int", but the template definition was mwSize = "long
	unsigned int", it was not recognised as the same template element,
	and partial specialisation failed.

	* matlab/VectorWrapper.h: (0.5.0)
	* matlab/VectorWrapper.hxx: (0.4.0)

	- Taking a bit of a partial step back from the last commit, we do
	need auxiliary functions to run ReadItkRowVector(). We cannot use
	ReadItkRowVector with a partial specialisation for e.g. itk::Size,
	because then for itk::FixedArray we would need to repeat the code
	in the partial specialisation again.

	- Fix bug. The VectorSize template has to be an "unsigned int",
	because that's the type of the Dimension variable in ITK vectors,
	e.g. itk::Size. Otherwise, when we were passing VectorSize as an
	"unsigned int", but the template definition was mwSize = "long
	unsigned int", it was not recognised as the same template element,
	and partial specialisation failed.

	* matlab/test/test_itk_imfilter.m: (0.4.1)

	- "itk::VotingBinaryIterativeHoleFillingImageFilter": Fix typo. By
	default, foreground voxels = 1, not 255.

	* matlab/MatlabImportFilter.h: (0.6.0)
	* matlab/MatlabImportFilter.hxx: (0.6.0)
	* matlab/VectorWrapper.hxx: (0.3.0)
	* matlab/VectorWrapper.h: (0.4.0)
	* matlab/ItkToolbox/ItkImFilter.cpp: (1.4.0)

	- Refactor the code so that VectorWrapper has a new template
	element, VectorSize. This is useful in the case of vectors that
	define their lengths at compilation time with a template,
	e.g. itk::Size<VectorSize>, because then methods like
	ReadRowVector() can be templated without having to instantiate
	them manually for VectorSize 2, 3 and 4.

	- This also allowed us to remove the auxiliary functions
	ItkSizeCommonReadRowVector, ItkSizeCommonReadSize and
	ItkSizeCommonReadHalfSize, because now we can just use partial
	specialisation and just overload ReadRowVector() directly.

	- A bit of rewriting of CgalCommonReadStaticRowVector, but mostly
	a renaming as ReadCgalRowVector. In this case we do need an
	auxiliary function, because CGAL::Point_3 and CGAL::Direction_3
	are different types, so the trick of templating
	itk::Size<VectorSize> doesn't apply.

2013-05-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkImFilter.cpp: (1.3.1)

	- Fix bug. Maurer distance filter doesn't create the output in the
	filter output, so we have to copy the result to the Matlab buffer
	after the filter has run.

	* matlab/ItkToolbox/ItkImFilter.cpp: (1.3.0)
	* matlab/ItkToolbox/itk_imfilter.m: (0.7.2)
	* matlab/test/test_itk_imfilter.m: (0.4.0)

	- Add filter VotingBinaryIterativeHoleFillingImageFilter, as
	requested by Peter Thalmann.

	* matlab/MatlabExportFilter.h: (0.2.0)
	* matlab/MatlabExportFilter.hxx: (0.2.0)

	- Add CopyItkImageToMatlab(): function to allocate memory in
	Matlab and copy an ITK filter output to this buffer. In principle,
	it's better to use GraftItkImageOntoMatlab() than
	CopyItkImageToMatlab(), because then ITK and Matlab share the same
	memory buffer, but the former approach does not work with some
	filters.

2013-05-27  Ramon Casero  <rcasero@gmail.com>

	* Rename matlab/PointsToolbox/scimat_dmatrix_livewire.m as
	matlab/PointsToolbox/scimat_dmatrix_imgeodesic.m:
	* Add matlab/test/test_scimat_dmatrix_imgeodesic.m: (0.1.0)

	- It's not really a livewire, and image-geodesic expresses better
	what it does.

	* Add matlab/PointsToolbox/scimat_dmatrix_livewire.m: (0.1.0)

	- SCIMAT_DMATRIX_LIVEWIRE Compute a distance/adjacency matrix for
	a set of scattered points using the image intensity to approximate
	the geodesics

	* matlab/FiltersToolbox/im2dmatrix.cpp: (0.2.3)

	- Fix bug. Neighbours were inconsistently taken into account, but
	not recorded in jc if their intensity value is 0. Now all
	neighbours are taken into account, and if their distance*mean
	intensity==0, it's still considered a connection. Apparently,
	sparse matrices in Matlab consider missing elements as an implicit
	0, but an explicit 0 in a sparse matrix is not a nonzero element.

2013-03-14  Ramon Casero  <rcasero@gmail.com>

	* matlab/ThirdPartyToolbox/dijkstra.m: (0.3.0)
	* matlab/ThirdPartyToolbox/dijkstra.cpp: (0.3.0)
	* matlab/test/test_dijkstra.m: (0.3.0)

	- Add piggyback extension. The motivation is being able to find
	shortest-paths according to the intensities in a greyscale image,
	but also compute the actual length of those paths without having
	to backtrack the list of predecessors with graphpred2path(). In
	that case, G contains intensity-weighted distances, and is the
	graph used for finding shortest-paths. G2 contains actual
	Euclidean distances.

	* Add matlab/test/Dijkstra_Animation_wikipedia.gif:

	- Image to illustrate the graph used in matlab/test/test_dijkstra.m.

	* matlab/GerardusCommon.h: (0.9.1)

	- Fix bug. Missing include header.

2013-03-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/im2dmatrix.cpp: (0.2.2)

	- Make it interruptible by Ctrl+C in Matlab.

2013-03-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/im2dmatrix.cpp: (v0.2.1)

	- Make MEX function interruptible with CTRL+C.

2013-03-08  Ramon Casero  <rcasero@gmail.com>

	* Add subversion properties to
	matlab/FiltersToolbox/bw_sb_interp.m and
	matlab/ThirdPartyToolbox/nifti.

2013-03-08  Valentina Carapella <vcarapella@gmail.com>

	* Add matlab/ThirdPartyToolbox/nifti:

	- Toolbox by Jimmy Shen to load, save, make, reslice, view (and
	edit) both NIfTI and ANALYZE data on any platform, downloaded
	today from

	http://www.mathworks.co.uk/matlabcentral/fileexchange/8797

	* Add matlab/FiltersToolbox/bw_sb_interp.m: (0.1.0)

	- Add copyright notice, minimum and maximum input/output arguments
	and default values.

	* Add matlab/FiltersToolbox/bw_sb_interp.m: (0.0.0)

	- My original code for shape-based interpolation of a binary
	segmentation as it was on my hard.

2013-03-07  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/test/test_im2dmatrix.m: (0.1.0)

	* Rename im2imat.cpp as im2dmatrix.cpp.
	* Rename im2imat.m as im2dmatrix.m.
	* matlab/FiltersToolbox/CMakeLists.txt: (0.2.4)

	- Rename im2imat() to im2dmatrix().

	* matlab/FiltersToolbox/im2imat.cpp: (0.2.0)

	- Add input argument with the voxel size in R, C, S. This makes
	more sense, because now what we return is the distance between
	voxels, weighted by the mean intensity of each pair of voxels.

	- Remove minimum size limitation of (3,3,3). Now the image can be
	as small as empty.

	* matlab/FiltersToolbox/im2imat.m: (0.1.2)

	- Update help header. The RES input argument added to the MEX
	implementation has not been added here.

	* matlab/FiltersToolbox/CMakeLists.txt: (0.2.3)

	- Fix bug. Code to install im2imat was missing.

2013-03-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/CMakeLists.txt: (0.2.2)

	- Add build of MEX function im2imat(). It had been forgotten and
	had to be built manually with mex.

	* matlab/ThirdPartyToolbox/dijkstra.cpp: (0.2.0)
	* Add matlab/test/test_dijkstra.m:
	* matlab/ThirdPartyToolbox/dijkstra.m: (0.2.0)

	- Now the user can provide a list of targets. Once the algorithm
	has found the shortest distances to all targets, it stops. This is
	useful for large sparse matrices, where we are interested e.g. in
	the path between two nodes.

2013-03-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/scimat_dmatrix_thickslice.m: (v0.1.2)

	- Fix bug. Method failed when the slice had fewer voxels than the
	number K of nearest neighbours we wanted.

	* matlab/PointsToolbox/surface_interpolation.m: (v0.5.2)

	- Add PARAM.init so that we can choose the type of initialisation
	for spherical MDS. Before, we only had the project on sphere along
	radii option. Now, we can choose random initialisation, that
	overcomes local minimum problems.

2013-03-01  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/scimat_closed_surf_to_bw.m: (v0.1.0)

	- SCIMAT_CLOSED_SURF_TO_BW Segment the inside of the triangulation
	of a closed surface.

2013-02-28  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ManifoldToolbox/delaunay_sphere.m: (0.1.0)

	- DELAUNAY_SPHERE Triangulation of a sphere or a surface
	topologically equivalent to a sphere so that it can be used as a
	mesh.

	* Add matlab/PointsToolbox/thickslice_collate_sax_la.m: (0.1.0)

	- THICKSLICE_COLLATE_SAX_LA Build a distance/adjacency matrix
	collating points from a Long Axis plane to a set of Short Axis
	planes.

	* matlab/PointsToolbox/surface_interpolation.m: (v0.5.1)

	- Accept a tension interpolation parameter for spherical
	splines. Tension works as a regulariser, smoothing the spline.

2013-02-27  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/scimat_simlandmarks_thickslice.m: (0.1.0)

	- SCIMAT_SIMLANDMARKS_THICKSLICE Simulate a human placing
	landmarks on the boundary of a "thick slice" segmentation.

	* matlab/PointsToolbox/scinrrd_surface_interpolation.m: (0.7.0)
	* matlab/test/test_scinrrd_surface_interpolation.m: (0.1.1)

	- Change of interface to match the change of interface in
	surface_interpolation().

	* Move data files from matlab/test to matlab/test/data.

	* matlab/test/test_surface_interpolation.m: (v0.2.0)

	- Interface of surface_interpolation() has changed.

	- Add "PCA parameterisation for all interpolation methods on a
	plane".

	- Add "Isomap parameterisation for all interpolation methods on a
	plane".

	- Add "We have a scattered set of points and we want to compute an
	interpolation surface topologically equivalent to a sphere"

	* matlab/PointsToolbox/surface_interpolation.m: (0.5.0)

	- Full change to the interface. Big rewrite of the function.

	- Add parameterisation method 'sphisomap': Our extension to the
	Isomap method so that points are parameterised on a sphere rather
	than on a plane.

	- Add interpolation method 'sphspline': Sphere spline
	interpolation by Wessel et al.

	- All points are passed as (:,3) and (:,2) matrices.

	- Interpolated surface is returned as a (:,:,3) volume, where each
	slice corresponds to the x, y and z-coordinates of each
	interpolated point. Having the surface points on a grid allows to
	then easily plot the surface using surf().

	- res, KLIM, nlev are no longer input arguments. They are passed
	inside the interp struct, given that different methods need
	different parameters.

	- interp is now a struct input argument. This way, we can tailor
	input arguments to each different interpolation method.

	- Rename input and output arguments so that they are easier to
	understand.

	* matlab/test/test_smdscale.m: (0.2.2)

	- Minor, data file has changed its name.

	* matlab/ManifoldToolbox/smdscale.m: (v0.3.2)

	- Fix bug, 'fronorm' is no longer the default stopping criterion.

2013-02-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/smdscale.m: (v0.3.1)

	- Make opt.maxiter the default stopping criterion.

	* matlab/test/test_smdscale.m: (v0.2.1)

	- Minor, changes to figure titles.

	* Add matlab/ThirdPartyToolbox/sphsplineToolbox:

	- SPHSPLINE Toolbox by Paul Wessel.

	Wessel, P., and J. M. Becker, 2008, Gridding of spherical data
	using a Green's function for splines in tension, Geophys. J. Int.,
	174, 21-28, doi:10.1111/j.1365-246X.2008.03829.x.

	http://www.soest.hawaii.edu/wessel/sphspline/

2013-02-25  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_smdscale.m: (v0.2.0)
	* Add matlab/test/test_smdscale_mesh.mat

	- Complete rewrite. Delete previous tests and add "We have a
	sparse distance matrix that defines a local neighbourhood on a
	scattered set of points. We want to project it onto the sphere"

	- Add also example of when we have no initial guess, "In this case
	we have no good initial guess, so we use a random one". We use a
	random point configuration to start with, and the post-Disjkstra
	distance matrix. Using the full matrix seems to work well to go
	from a random configuration to a decently embedding. We then use
	that as the initialisation for another run of MDS, this time using
	the sparse distance matrix. This way, we reduce the error even
	further, as the result gets fine tuned.

	* matlab/ManifoldToolbox/smdscale.m: (v0.3.0)

	- Another big rewrite.

	- We no longer pass a point configuration as input. Now, if we
	want to initialise, we have to pass latitude and longitude, apart
	from the sphere radius. This makes sense given that the algorithm
	works with lat and lon. The previous approach was an ugly hack.

	- Dijkstra is no longer applied on the input distance matrix. It's
	the user's responsibility to perform any kind of processing on the
	distance matrix before passing it to this function.

	- The function is simplified then, because now we only need to
	take into account the neighbours when optimising a point (a full
	matrix after applying Dijkstra will just be a particular case of
	this where each point has as neighbours all the others).

	- Thus, now there's only one err vector returned. This makes more
	sense, as some testing suggests that it makes no sense using all
	points in the configuration when the distance matrix is sparse.

	* matlab/ManifoldToolbox/proj_on_sphere.m: (v0.1.0)

	- Project a point configuration onto a sphere.

2013-02-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/ManifoldToolbox/smdscale.m: (v0.2.0)

	- Full reimplementation, almost from scratch.

	- This function implements the MDS optimisation idea proposed by
	Agarwal et al. (2010), but avoids using chords or approximating
	the mean on the sphere by the Euclidean mean followed by
	projection on the sphere (code not available, but explained in
	personal communication). Many thanks to A. Agarwal for his
	comments about his paper.

	- A. Agarwal et al. (2010) "Universal Multi-Dimensional Scaling",
	Proceedings of the 16th ACM SIGKDD International Conference on
	Knowledge Discovery and Data Mining, 53:1149-1158.

	* Delete matlab/ManifoldToolbox/gdmatrix.m.

	- Incorporated as a local function in smdscale.

2013-02-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/ThirdPartyToolbox/dijkstra.cpp: (v0.1.1)
	* matlab/ThirdPartyToolbox/dijkstra.m: (v0.1.1)

	- Minor, part of the help header was incomplete.

2013-02-22  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/test/thick-slice-points.mat:

	- SCIMAT volume with 15 slices, and a few points on the contours
	of a local convex hull of a left ventricle, to illustrate the use
	of scimat_dmatrix_thickslice().

	* matlab/PointsToolbox/scimat_dmatrix_thickslice.m: (v0.1.1)

	- Add missing documentation in the help header.

	* matlab/PointsToolbox/surface_interpolation.m: (v0.4.1)

	- Now the distance matrix can be passed to isomap parameterisation
	explicitely. This allows the design of your own neighbourhoods.

2013-02-21  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/scimat_dmatrix_thickslice.m: (v0.1.0)

	- SCIMAT_DMATRIX_THICKSLICE Compute a distance/adjacency matrix
	for a segmentation that consists of scattered points in slices
	wide apart.

2013-02-20  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/gplot3d.m:

	- Plot graph, as in "graph theory". This is a modification of
	MATLAB's GPLOT function for vertices in 3D.

	Downloaded from

	http://www.csse.uwa.edu.au/~pk/research/matlabfns/Shapes/gplot3d.m

2013-02-19  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/Resize3DImage.cxx: (v0.2.1)

	- Fix bug. Output voxel type should be the same as the input voxel
	type, which is assumed to be float.

	* cpp/README:

	- Add entries for resize3DImage and vesselness3DImage, that I had forgotten.

2013-02-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_itk_pstransform.m: (v0.1.2)

	- Add Test 3: Compare ITK thin-plate spline implementation to our
	own.

	* matlab/PointsToolbox/pts_tps_map.m: (v0.7.1)
	* matlab/PointsToolbox/pts_tps_weights.m: (v0.5.1)

	- Note that these functions use the same kernel as
	itk_pstransform() with the
	itk::ThinPlateR2LogRSplineKernelTransform.

	* matlab/ItkToolbox/ItkPSTransform.cpp: (v0.3.3)
	* matlab/ItkToolbox/itk_pstransform.m: (v0.1.1)

	- Note that this function with
	itk::ThinPlateR2LogRSplineKernelTransform is the same as our
	pts_tps_map().

2013-02-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/pts_tps_map.m: (v0.7.0)
	* matlab/PointsToolbox/pts_tps_weights.m: (v0.5.0)

	- Update deprecated syntax for nargchk, nargoutchk. Remove
	whitespaces before and after brackets.

	- Fix big bug. Julia Schnabel noticed that the TPS coefficients
	did not agree with those computed by Bookstein. The problem was
	that we were using U(r)=r^2 log10(r) instead of the correct
	U(r)=r^2 ln(r^2).

	- In pts_tps_map(), remove the option to enter X as a struct with
	endocardium, epicardium fields, which is a relic from my thesis
	and doesn't make sense in a general function.

2013-02-02  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/bwsplitwithsurf.m: (v0.1.0)

	- BWSPLITWITHSURF Split a volume into connected components
	separated by a surface.

2013-02-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/bwbox.m: (v0.2.0)

	- Reimplement using regionprops(, 'BoundingBox'), which is much
	faster.

	* Add matlab/FiltersToolbox/bwbox.m: (v0.1.0)

	- BWBOX Find tight box around segmentation (and possibly add a margin).

2013-01-31  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/surface_interpolation.m: (v0.4.0)
	* matlab/PointsToolbox/scinrrd_surface_interpolation.m: (v0.6.0)

	- Provide point coordinates X2 at the output. While the user
	provides them at the input, with method mbae, this set is extended
	with more points extrapolated from the domain boundary.

	- In scinrrd_surface_interpolation(), provide also the
	parameterisation EM of the points.

	* matlab/PointsToolbox/bwmesh.m: (v0.1.5)

	- Upgrade deprecated syntax for narginchk, nargoutchk.

	* matlab/ThirdPartyToolbox/IsomapII.m: (v0.1.1)

	- In mode 3, instead of passing the distance function as a string
	that will be run with feval, we now pass a function handle, that
	will be faster and is more elegant. It also allows to pass local
	functions that are not in the global path.

2013-01-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkImFilter.cpp: (v1.2.0)
	* matlab/ItkToolbox/itk_imfilter.m: (v0.6.2)

	- Add filters ApproximateSignedDistanceMapImageFilter and
	SignedDanielssonDistanceMapImageFilter.

2013-01-28  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/Vesselness3DImage.cxx: (v0.1.1)
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.h: (v0.2.1)
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkHessianSmoothed3DToVesselnessMeasureImageFilter.h: (v0.1.0)
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementFunction.h: (v0.1.0)
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.h: (v0.3.1)

	- Edits to make compatible with ITK 4.3, as some classes that had
	been deprecated have now been removed from ITK.

	* release-0.8.1

	- Last version that was compiled with ITK v4.2.

2013-01-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkImFilter.cpp: (v1.1.1)
	* matlab/ItkToolbox/itk_imfilter.m: (v0.6.1)

	- Fix bug. Output of itk::SignedMaurerDistanceMapImageFilter
	should be float, even if the input image is binary or int, because
	the distances are Euclidean in real world coordinates.

2013-01-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/scinrrd_surface_interpolation.m: (v0.5.0)
	* matlab/PointsToolbox/surface_interpolation.m: (v0.3.0)

	- Input arguments PARAM is now a struct instead of a string, so
	that we can pass parameters with it.

	* matlab/PointsToolbox/surface_interpolation.m: (v0.2.1)

	- Update syntax of argument checking code.

2012-11-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v0.3.3)

	- Big speed up. We don't need to check the voxels that were
	already in the segmentation, because those will be in the local
	convex hull too. We now generate a list of background points that
	we check. This is much faster than using the cgal_insurftri
	"block"-mode, so maybe there's something we are doing wrong in
	terms of memory allocation or iteration in the mex function.

2012-10-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/mm_opening.m: (v0.1.1)
	* matlab/FiltersToolbox/gmthr_seg.m: (v0.5.2)
	* matlab/FiltersToolbox/bwrmsmallcomp.m: (v0.1.1)

	- Fix bug. All components except the first one were being ignored.

	* matlab/CardiacToolbox/tissue2lvrv.m: (v0.1.2)

	- Fix bug. All background components except the largest one were
	being ignored.

2012-10-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/CardiacToolbox/tissue2lvrv.m: (v0.1.1)

	- Instead of using only one voxel to find the bottom background
	component, and one voxel for the top background component, we now
	consider as background any connected component that touches any of
	the sides of the image.

2012-10-11  Ramon Casero  <rcasero@gmail.com>

	* release 0.8.0

	- Quite a bit of code added since the last release. This release
	works in a fresh linux install. This version intentionally doesn't
	let the user build in Windows, because we don't have a way to
	build GMP and MPFR for Windows yet.

2012-10-10  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/boost/CMakeLists.txt:
	* cpp/src/third-party/boost/ryppl/cmake/Modules/RypplExport.cmake:
	* cpp/src/third-party/boost/boost/thread/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/date_time/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/filesystem/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/core/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/system/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/config/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/chrono/CMakeLists.txt:

	- Fix bug spotted by Tasos Papastylianou. The linux install was
	broken.

	- The problem was that by using our own install(TARGET...) macros
	in e.g. boost/chrono/CMakeLists.txt and commenting out the
	ryppl_export() macros, the BoostChronoConfig.cmake file was not
	being generated, and cmake gave an error when it couldn't find the
	file. I hadn't noticed because I already had the
	Boost*Config.cmake files in my gerardus tree.

	- Now, instead, we use the ryppl_export(), but changing the
	install directories to gerardus/lib and gerardus/include.

	- We have commented out those dependencies that are not essential
	for gerardus, to avoid having to compile a lot of code in boost.

	- Note that we don't need to install the header files (we aleady
	provide them in gerardus/include/boost) or .cmake files.

2012-10-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/FindMatlab.cmake: (v0.2.7)

	- Fix bug found by Tasos. In linux, if matlab was not a link, the
	Matlab directory could not be found.

	* matlab/FiltersToolbox/gmthr_seg.m: (v0.5.1)

	- minor. Add comment about why we have a copy of the code in
	bwrmsmallcomp() here instead of using bwrmsmallcomp().

	* Add matlab/FiltersToolbox/bwrmsmallcomp.m: (v0.1.0)

	- BWRMSMALLCOMP Remove small connected components from a
	segmentation.

2012-10-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkImFilter.cpp: (v1.1.0)
	* matlab/ItkToolbox/itk_imfilter.m: (v0.6.0)
	* matlab/test/test_itk_imfilter.m: (v0.3.0)

	- Add Markov Random Field filter. This has been a challenging
	filter, because it can take as an input an array of weights, which
	have to be passed to the ITK filter as a vector (linearised
	array), and another vector with the size of the array. This
	prompted significant changes in MatlabImport and the creation of
	VectorWrapper to present a common interface for different
	vector-like classes.

	- Remove references to processing 5D images, some of the filters
	break if we try to instantiate them with that dimension.

	* matlab/FiltersToolbox/gmthr_seg.m: (v0.5.0)

	- Add new output argument obj, with the result of the Gaussian
	mixture model.

	- Fix bug. Had the wrong maximum number of output arguments.

	* matlab/VectorWrapper.h: (v0.3.0)
	* matlab/VectorWrapper.hxx: (v0.2.0)

	- Add functions ItkSizeCommonReadSize() and
	ItkSizeCommonReadHalfSize().

	* matlab/MatlabImportFilter.h: (v0.5.0)
	* matlab/MatlabImportFilter.hxx: (v0.5.0)

	- Add functions GetArraySize() and GetArrayHalfSize(). They
	simplify having to run mxGetNumberOfDimensions() and
	mxGetDimensions(), and then casting the result into e.g. itk::Size
	to pass it to ITK.

	- Add function GetArrayArgumentAsVector(). This is the equivalent
	to the linearising operator A(:) in Matlab.

	* matlab/VectorWrapper.h: (v0.2.1)
	* Add matlab/VectorWrapper.hxx: (v0.1.0)

	- Separate declaration from definition of the functions and
	methods, to make the code more readable.

	* matlab/GerardusCommon.h: (v0.9.0)

	- Add printSeq(), function to print the content of any sequence
	that supports input iterators, e.g. std::vector.

2012-10-06  Ramon Casero  <rcasero@gmail.com>

	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (v0.2.2)

	- VectorWrapper has changed completely, use the new syntax.

	- MatlabImport has changed the methods to read a row vector, use
	the new syntax.

	* matlab/VectorWrapper.h: (v0.2.0)

	- Full rewrite of the VectorWrapper, as it was not quite right. We
	need 3 templates: VectorValueType for the type of each element in
	the output vector, VectorType for the output vector itself, and
	MatlabValueType for the type the data has in Matlab. This is
	because the element type in the vector may be different from the
	data type the user is passing from Matlab.

	- Add auxiliary functions where we put the code to actually read
	the Matlab data into a vector. The partial specialisation of
	VectorWrapper calls this auxiliary function with the correct
	templates. This means that we only need to write the reading code
	once per type of vector, and then we only need to add a small
	snippet for each new instance. For example, CGAL vectors are
	different from ITK vectors. We have one auxiliary function for
	each of them. Then we have a small snippet for CGAL::Point_3 and
	another for CGAL::Direction_3, and both use the same auxiliary
	function.

	- Now we can deal with
	CGAL::Point_3<CGAL::Simple_cartesian<double> > and
	CGAL::Direction_3<CGAL::Simple_cartesian<double> > too.

	* matlab/MatlabImportFilter.h: (v0.4.0)
	* matlab/MatlabImportFilter.hxx: (v0.4.0)

	- Consolidate GetRowVectorArgument(). We need two templates:
	VectorValueType for the type of each element in the output vector,
	VectorType for the output vector itself. We have swapped their
	order from respect how we had them before.

	- VectorWrapper has changed completely, use new syntax.

	- Remove GetStaticVector3Argument(), because now we can use
	GetRowVectorArgument() for vectors that are populated with their
	constructor too (e.g. CGAL::Direction_3).

	- Add GetMatrixAsVectorOfRowVectorsArgument(), which reads a
	Matlab matrix as a std::vector of "vectors". Here "vectors" means
	conceptual vectors, e.g. std::vector, itk::Size,
	CGAL::Direction_3, etc.

	- Remove GetVectorOfStaticVector3Argument(), because it would be a
	particular case of GetMatrixAsVectorOfRowVectorsArgument().

2012-10-04  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/VectorWrapper.h: (v0.1.0)
	* matlab/GerardusCommon.h: (v0.8.0)

	- Move VectorWrapper from matlab/GerardusCommon.h to a new file
	matlab/VectorWrapper.h. GerardusCommon was not a good place,
	because VectorWrapper is going to be including many libraries (for
	the moment, CGAL and ITK) so that it can provide a common
	interface for different vectors in them. This was causing that
	virtually every Matlab MEX function had to depende and link to
	CGAL and ITK. Putting the code in VectorWrapper.h, everything is
	more modular.

	* matlab/MatlabImportFilter.h: (v0.3.2)
	* matlab/MatlabImportFilter.hxx: (v0.3.2)

	- Rename GetVectorArgument() as GetRowVectorArgument(), to make
	clear that this method extracts a row vector from a 2D matrix (or
	from a single row vector as a special case).

2012-10-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/GerardusCommon.h: (v0.7.0)

	- Add class VectorWrapper. There are classes in ITK, e.g.  that
	are conceptually vectors, but don't have the same methods as
	e.g. std::vector. For example, itk::Size<Dimension> has the static
	method itk::Size<Dimension>::GetDimensionSize, while std::vector
	has the method v.size().

	This means that a function in Gerardus would need to be coded
	twice, in both cases with the same code except for the
	::GetDimensionSize (know at compilation time) or .size() (known at
	run time).

	To overcome this problem, this wrapper provides a common interface
	to different vector classes, so that we can interact with all
	these vector-like classes the same way. By default, we assume that
	we have a std::vector. For other types, we specialise the
	VectorWrapper class.

	* matlab/MatlabImportFilter.h: (v0.3.1)
	* matlab/MatlabImportFilter.hxx: (0.3.1)

	- Now GetVectorArgument() can read an arbitrary row from a
	matrix. Apart from returning std::vector, it can now also return
	any vector-like type (e.g. itk::Size) that has a specialisation in
	class VectorWrapper in GerardusCommon.h.


2012-10-01  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkImFilter.cpp:

	- Remove the TPixelOut template. We don't need to have a TPixelOut
	template in the FilterWrappers. It makes the code less readable,
	because we are defining the pixel output type in the parser,
	instead of inside the filter wrapper. Also, some filters will not
	give an image of pixels, but an image of e.g. vectors at the
	output, so this creates an unnecessary constraint.

2012-09-30  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/mm_opening.m: (v0.1.0)

	- Mathematical Morphology operator: Opening (erosion+dilation)
	with removal of small components.

	* matlab/FiltersToolbox/gmthr_seg.m: (v0.4.0)

	- Add output argument Q: Q is a quality measure of the
	threshold. Q takes values in [0, 1]. Values close to 0 mean that
	both Gaussians have a lot of overlap, so the threshold between
	object and background cannot be trusted very much. Values close to
	1 mean that both Gaussians are well separated, and the threshold
	value can be trusted to provide a good segmentation.

	* Add matlab/CardiacToolbox/trimatria.m: (v0.1.0)

	- Remove the atria from a whole cardiac tissue segmentation.

	* matlab/FiltersToolbox/gmthr_seg.m: (v0.3.0)

	- Make THR be the first output argument. The user may want the
	threshold value, but not need the segmentation itself. In that
	case, we don't waste time and memory computing the segmentation.

	* matlab/FiltersToolbox/gmthr_seg.m: (v0.2.0)

	- Add ouptut argument THR with estimated threshold value.

	* matlab/MatlabExportFilter.hxx: (v0.1.1)

	- Check for actual size of signed long type, which may be
	architecture dependent, instead of assuming worst case scenario of
	8 bytes.

	- Add the string "MatlabExportFilter: " to most of the error
	messages, so that they are easier to track down.

2012-09-29  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/CardiacToolbox/tissue2lvrv.m: (v0.1.0)

	- Extract LV and RV cavities from tissue and atrioventricular
	surface segmentations.

	* matlab/GerardusCommon.h: (v0.6.2)
	* matlab/GerardusCommon.hxx: (v0.5.2)
	* matlab/CMakeLists.txt: (v0.2.1)
	* matlab/CgalToolbox/CMakeLists.txt: (v0.1.3)
	* matlab/MatlabExportFilter.h: (v0.1.1)
	* matlab/FiltersToolbox/CMakeLists.txt: (v0.2.1)
	* matlab/ItkToolbox/ItkPSTransform.cpp: (v0.3.2)
	* matlab/FiltersToolbox/bwregiongrow.cpp: (v0.2.6)
	* Rename matlab/GerardusCommon.hpp as matlab/GerardusCommon.h
	* Rename matlab/GerardusCommon.cpp as matlab/GerardusCommon.hxx

	- Now instead of building a library that MEX functions will link
	to, we will directly include GerardusCommon.h. The reason is that
	functions in GerardusCommon tend to be quite basic frequently
	used, and it makes a substantial difference to speed if we don't
	need to make calls to a separate library.

	- Reimplement ctrlcCheckPoint() as a C++ macro to check for the
	CTRL+C flag, and a call to function ctrlcErrMsgTxt() inside, to
	throw the error. The reason is that if ctrlcCheckPoint() were a
	function instead of a macro, this would introduce a function call
	at every iteration of the loop, which is very expensive. But then
	we don't want to put the whole error message part inside a macro,
	it's bug-prone and bad programming practice. And once the CTRL+C
	has been detected, whether the error message is generated a bit
	faster or not is not important.

	- Make some of the GerardusCommon functions inline. This improves
	speed very little, between 2% or %4.

2012-09-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/CMakeLists.txt: (v0.2.0)

	- bwregiongrow doesn't need to link to the ITK libraries.

	- bwregiongrow now links to gerardusCommon.

	* matlab/FiltersToolbox/bwregiongrow.cpp: (v0.2.5)

	- Move functions sub2ind() and ind2sub() to GerardusCommon. They
	shouldn't have been here, as they clearly belong in the common
	header file.

	- Add CTRL+C checkpoints so that the function can be interrupted.

	* matlab/GerardusCommon.hpp: (v0.6.1)
	* matlab/GerardusCommon.cpp: (0.5.1)

	- Move functions sub2ind() and ind2sub() from
	bwregiongrow.cpp. They shouldn't have been in a particular file,
	as they clearly belong in the common header file.

	* Add matlab/FiltersToolbox/gmthr_seg.m:

	- Segment an image estimating threshold as intersection of two
	Gaussians from Gaussian mixture model.

2012-09-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v)

	- Fix bug. When the the voxels in the segmentation are collinear,
	alphavol() will exit with an error because the delaunay()
	triangulation throws an error too. What we do is put alphavol() in
	a try, and if the error is collinearity, we can just leave the
	segmentation untouched.

	- Fix bug. Very small segmentations can produce degenerated
	surfaces. In that case, there's nothing to smooth and we can just
	exit without modifying the input segmentation.

	* Add matlab/PointsToolbox/intersect_gaussians.m: (v0.1.0)
	* Add matlab/PointsToolbox/intersect_gaussians.png:
	* Add matlab/test/test_intersect_gaussians.m:

	- Intersection of two Gaussians (analytic solution).

2012-09-25  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v0.3.2)

	- Fix bug. If there are not at least 4 voxels in the input
	segmentation, then delaunay() will give an error. We should just
	return, so the output image is the same as the input.

	* matlab/FiltersToolbox/scimat_blockproc3.m: (v0.3.1)

	- Fix bug. Variable was not being set in one of the cases in an if
	block.

2012-09-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/FindMatlab.cmake: (v0.2.6)

	- In Windows, figure out whether the architecture is 32 or 64 bit
	without having to resort to CMAKE_SIZEOF_VOID_P. This variable
	will only be set if project() has been run before, and at least in
	Gerardus, FindMatlab.cmake runs _after_ project(GERARDUS).

	- Add more version numbers for the Windows version. TODO: find a
	way to automate this. Having these versions hardcoded here is not
	very elegant.

	* CMakeLists.txt: (v0.2.2)

	- Hack to avoid CMake error messages when running FindMatlab.cmake
	in Windows because CMAKE_FIND_LIBRARY_PREFIXES,
	CMAKE_FIND_LIBRARY_SUFFIXES are not set.

	- When the compiler version has to be forced, use environment
	variables instead of the CMake compiler variables, that should be
	set by project().

2012-09-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v0.3.1)

	- If the image has all voxels == 1, then the smoothed local convex
	hull is the image itself and we don't need to waste time doing
	other computations. Likewise, if the image has all voxels == 0,
	there's nothing to smooth

	* matlab/FiltersToolbox/blockproc3.m: (v0.4.0)
	* matlab/FiltersToolbox/scimat_blockproc3.m: (v0.3.0)

	- Replace input argument PARALLEL by NUMWORKERS. This way, instead
	of simply saying whether we want to use parallel processing or
	not, we can specify the maximum number of workers we allow the
	function to use at the same time. This is very useful to avoid the
	memory filling up too much in some cases, and also to spare a
	couple of processors to continue working normally while heavy
	computations are run.

	- Add cleanup functions so that queued and running jobs are
	cancelled if the user presses CTRL+C, and to make sure that we
	reset the number of workers available in the cluster when we exit
	the function.

2012-09-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_blockproc3.m: (v0.2.1)
	* matlab/FiltersToolbox/blockproc3.m: (v0.3.1)

	- Fix bug. We forgot to compute the I,J,K indices, so all results
	were being saved to the same output block.

	* Delete matlab/FiltersToolbox/Deconvolve.cpp:
	* Delete matlab/FiltersToolbox/deconvolve.m:
	* Delete cpp/src/third-party/cquammen-Clarity:
	* cpp/src/CMakeLists.txt: (v0.2.3)

	- Remove the third party clarity library and the MEX interface we
	build to run deconvolutions. We found it to be slightly buggy, and
	Matlab's own deconvolution functions work very well and are fast.

	* matlab/FiltersToolbox/scimat_blockproc3.m: (v0.2.0)
	* matlab/FiltersToolbox/blockproc3.m: (v0.3.0)

	- Replace parfor by jobs/createTask. This way, we don't need to
	create a cell array with all the image blocks, consuming a lot of
	extra memory. Instead, we can just create all the jobs, put the
	function in a task, and submit the jobs. Memory gets used only
	when jobs leave the queue and are actually running.

	- This approach also enables to interrupt execution of C++ MEX
	functions in parallel mode without having to wrap them in
	ccwrap().

	* matlab/FiltersToolbox/ccwrap.m: (v0.1.1)

	- Correct help header. This function doesn't create memory leaks
	even if you allocate memory using non-Matlab functions. Thanks to
	Friedrich Hempel (MathWorks) for the explanation.

2012-09-18  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_blockproc3.m: (v0.1.1)
	* matlab/FiltersToolbox/blockproc3.m: (v0.2.2)

	- Update syntax to check number of input and output arguments.

	* Add matlab/FiltersToolbox/ccwrap.m: (v0.1.0)

	- Wrapper that enables CTRL+C interruption of MEX files.

	* CMakeLists.txt: (v0.2.1)
	* cpp/src/third-party/boost/boost/chrono/CMakeLists.txt:
	* cpp/src/third-party/boost/boost/date_time/CMakeLists.txt:

	- Add some boost libraries that were dependencies of the ones we
	were using, but were not bing built and linked to.

2012-09-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/GerardusCommon.hpp: (v0.6.0)

	- Add function ctrlcCheckPoint(). This function can be put
	e.g. inside a slow loop in your C++ file, and will exit execution
	with an error if the user presses Ctrl+C.

	Ctrl+C works in Matlab code, but there's no documented way of
	reproducing the same behavious in MEX C++ code. Thanks to Wotao
	Yin, who explains an undocumented function in the Matlab ut
	library that captures the Ctrl+C signal, I could write this
	ctrlcCheckPoint() function.

	http://www.caam.rice.edu/~wy1/links/mex_ctrl_c_trick/

	* matlab/FindMatlab.cmake: (v0.2.5)

	- Find and create variable for the "ut" library. This undocumented
	library contains function utIsInterruptPending(), that returns
	true if the user has pressed Ctrl+C.

	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (v0.2.1)

	- Add Ctrl+C checkpoints so that the user can stop execution.

	* matlab/CMakeLists.txt: (v0.2.0)
	* matlab/CgalToolbox/CMakeLists.txt: (v0.1.2)
	* matlab/ItkToolbox/CMakeLists.txt: (v0.5.6)

	- GerardusCommon.cpp is now compiled into a dynamic library, and
	Gerardus MEX functions link to it.

2012-09-11  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v0.3.0)

	- Replace third-party VOXELISE(), that has been deleted from
	Gerardus, by our own cgal_insurftri().

	- We can save a lot of time by not testing voxels that are outside
	of the tight box that contains the surface.

	* matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (v0.2.0)
	* matlab/CgalToolbox/cgal_insurftri.m: (v0.2.0)
	* matlab/test/test_cgal_insurftri.m: (v0.2.0)
	* matlab/CgalToolbox/CMakeLists.txt: (v0.1.1)

	- If we want to test all voxels in an image, it's very slow and
	memory intensive to generate coordinates for each voxel. Now we
	provide a new syntax in cgal_insurftri(), so that it's possible to
	provide 3 row vectors to describe a rectangular grid, instead of
	having to provide coordinates for each voxel.

	- Add warning in the help header that the number of ray queries
	must be odd for the voting system to make sense.

	* matlab/MatlabImportFilter.h: (v0.3.0)
	* matlab/MatlabImportFilter.hxx: (v0.3.0)

	- Now we keep the list of input arguments as a std::vector<const
	mxArray*>, instead of const mxArray**. This is much better,
	because we can easily add or delete arguments. Also, we don't need
	to keep track of the number of arguments in a separate variable,
	because an std::vector always knows its size.

	- Add method SetAdditionalMatlabArgumentPointer() to register
	additional arrays that are not at the top level of the input
	argument list. For example, if we pass the argument {[1 2], [0
	-3]}, the corresponding top level element in the input argument
	list is a cell array, but we have no way to access the vectors [1
	2] and [0 -3]. With this function, we can register these vectors
	in the MatlabImport interface, and then access them as if they
	were normal top level input arguments.

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v0.2.0)

	- Replace third-party VOXELISE() by our own cgal_insurftri()
	function.

	* matlab/GerardusCommon.hpp: (v0.5.0)
	* matlab/GerardusCommon.cpp: (v0.5.0)

	- Overload sub2ind() so that we can provide the indices as
	separate scalars and don't need to instantiate an itk::Offset
	object.

	- Add some help notes to make it more clear which arguments are
	size and which are indices in sub2ind() and ind2sub().

	* matlab/CMakeLists.txt: (v0.1.2)

	- Fix bug, directory CgalToolbox was being ignored.

2012-09-10  Ramon Casero  <rcasero@gmail.com>

	* Delete matlab/ThirdPartyToolbox/MeshVoxelisation:

	- We found VOXELISE to be buggy and misclassify voxels with our
	cardiac cavity surfaces.

	* Add matlab/CgalToolbox/CgalInSurfaceTriangulation.cpp: (v0.1.0)
	* Add matlab/CgalToolbox/cgal_insurftri.m: (v0.1.0)
	* Add matlab/CgalToolbox/CMakeLists.txt: (v0.1.0)
	* Add matlab/test/test_cgal_insurftri.m: (v0.1.0)

	- CGAL_INSURFACETRIANGULATION Find whether a point is inside or
	outside a closed surface.

	- This Matlab MEX function replaces the third party Matlab
	function VOXELISE, that was found to be buggy (a lot of voxels are
	misclassified in our tests).

	* matlab/MatlabImportFilter.h: (v0.2.0)
	* matlab/MatlabImportFilter.hxx: (v0.2.0)

	- Overload method GetScalarArgument() so that we can read a scalar
	from any position in a matrix. Before, we assumed that scalar
	arguments had only 1 element.

	- Add method GetVectorOfStaticVector3Argument(). Each row of a
	3-column matrix becomes an element of a vector.

	* matlab/ItkToolbox/CMakeLists.txt: (v0.5.3)

	- Now MatlabImport links to CGal, which links to
	Boost. ItkImFilter uses MatlabImport, so add those directories to
	include.

2012-09-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabImportFilter.h: (v0.1.1)
	* matlab/MatlabImportFilter.hxx: (v0.1.2)

	- Add method GetStaticVector3Argument to read a static 3-vector
	from a Matlab matrix row.

2012-09-06  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_SetupGMP.cmake:

	- Don't use find_package() for GMP and MPFR. Now they are part of
	gerardus, and we use ExternalProject_Add() to build them.

	* cpp/src/CMakeLists.txt: (v0.2.2)

	- Fix bug. Imported libraries cannot be of type unknown.

	- Add several variables that provide the path to the GMP and MPFR
	libraries. <package>_LIBRARIES_DIR is not a standard variable
	name, but it's used by CGAL.

	* cpp/src/CMakeLists.txt: (v0.2.1)

	- Create targets for the GMP and MPFR libraries, so that we can
	use them as dependencies, link to them, etc...

	* cpp/src/CMakeLists.txt: (v0.2.0)
	* Delete cpp/src/third-party/gmp-5.0.5/CMakeLists.txt
	* Delete cpp/src/third-party/mpfr-3.1.1/CMakeLists.txt

	- From cmake 2.8.8 onwards, external projects that don't use CMake
	can be built using module ExternalProject_Add(). This is what we
	use now to build the GMP and MPFR libraries.

2012-09-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/CMakeLists.txt: (v0.5.2)

	- Fix bug. ItkRegistration.cpp is experimental code that hasn't
	been added to the repository yet, so comment out creating a
	target for it.

	* CMakeLists.txt: (v0.2.0)

	- Boost library is now distributed with Gerardus, so it's no
	longer an external dependency that can be configured with
	find_package(). Instead, we set up the required variables here.

	- Tidy up the messages displayed.

	* cpp/src/CMakeLists.txt: (v0.1.4)

	- Because boost is now part of Gerardus, we link to its libraries
	as targets, not as library files.

	* cpp/src/third-party/boost/boost/thread/CMakeLists.txt
	* cpp/src/third-party/boost/boost/system/CMakeLists.txt
	* cpp/src/third-party/boost/boost/filesystem/CMakeLists.txt

	- Don't limit building the boost library to static libraries. By
	not specifying RUNTIME, ARCHIVE or LIBRARY, the right type of
	library will be selected.

	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_SetupBoost.cmake

	- We distribute the boost libraries with gerardus, so we don't
	need to look for them as an external package.

	- Remove some of the messages. The CGAL library produces a lot of
	output at configuration time, and that makes it harder to see
	what's going on with Gerardus' configuration as a whole.

	* cpp/src/third-party/CGAL-4.0.2/CMakeLists.txt: (v0.1.2)
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_SetupGMP.cmake
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_SetupFlags.cmake
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_Macros.cmake
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_Common.cmake
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_FindPackageHandleStandardArgs.cmake
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_CheckCXXFileRuns.cmake
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/CGAL_GeneratorSpecificSettings.cmake
	* cpp/src/third-party/CGAL-4.0.2/src/CMakeLists.txt
	* cpp/src/third-party/gmp-5.0.5/CMakeLists.txt
	* cpp/src/third-party/mpfr-3.1.1/CMakeLists.txt

	- Remove some of the messages. The CGAL library produces a lot of
	output at configuration time, and that makes it harder to see
	what's going on with Gerardus' configuration as a whole.

2012-09-04  Ramon Casero  <rcasero@gmail.com>

	* Add include directory to contain header files.

	* cpp/src/third-party/boost/boost/*/CMakeLists.txt:

	- Comment out all the `ryppl_xport()` blocks in the
	`CMakeLists.txt` to prevent `make install` from filling
	`gerardus/lib` with lots of boost files.

	* cpp/src/third-party/CGAL-4.0.2/cmake/modules:

	- Delete FindBLAS.cmake FindBoost.cmake FindLAPACK.cmake
	FindOpenGL.cmake FindPackageMessage.cmake, as these modules are
	available with CMake.

	* cpp/src/third-party/boost/boost/thread/src/pthread/thread.cpp:

	- Fix bug. Wrong path in #include.

	* cpp/src/third-party/boost/CMakeLists.txt:

	- Comment out boost modules that are not required by Gerardus.

	* cpp/src/third-party/boost/*/CMakeLists.txt:

	- Ignore all doc and test directories for the build.

	* Add cpp/src/third-party/boost:

	- CMake-fied Boost C++ libraries downloaded from

	https://github.com/ryppl/boost-zero

	See details in

	http://code.google.com/p/gerardus/wiki/BuildInstructions#Integrating_the_Boost_C++_libraries_in_gerardus

	* cpp/src/third-party/CGAL-4.0.2/CMakeLists.txt:

	- Install CGAL libraries to gerardus/lib, instead of
	gerardus/lib/CGAL. This way, we don't need to add more paths to
	where the MEX files can look for libraries.

2012-09-03  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/scimat_lconvhull_smoothing.m: (v0.1.1)

	- Fix bug. We need to pass the whole segmentation to alphavol(),
	otherwise the computed surface mesh has holes and other problems.

2012-08-22  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: (v0.1.5)

	- We need to find Matlab at the beginning, so that we can decide
	which version of gcc we need to compile gerardus with. We need to
	compile ITK and Gerardus with the same gcc version Matlab was
	compiled with.

	* matlab/FindMatlab.cmake: (v0.2.4)

	- In Linux and Mac OSX systems, find which Matlab version we have,
	and assign it to variable MATLAB_VERSION.

2012-08-22  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/itk_imfilter.m: (v0.5.1)

	- Allow variable number of input arguments.

2012-08-17  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/CGAL-4.0.2/CMakeLists.txt: (v0.1.1)

	- Comment out installation of documentation, includes, etc that we
	don't need to install in the system for gerardus.

	- CGAL libraries were being installed to gerardus/lib/lib. Change
	this to gerardus/lib/Gerardus.

	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/FindMPFR.cmake: (v0.1.1)

	- Remove two debug MESSAGE() that I had left by mistake.

2012-08-10  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/PadSegmentationMaskWithVoxels.cxx: (v0.2.0)
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.txx: (0.3.1)

	- Fix bug. ITK v2.4 and over no longer support .Begin() method in
	itk::ImageRegionIterator.

2012-08-07  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/PointsToolbox/findpeaksn.m: (v0.1.0)

	- Find local peaks (local maxima) in n-dimensional data.

2012-08-06  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_ndgrid.m: (v0.2.0)

	- Add ri, ci, si variables so that the user can enter the indices
	of the image block the grid should be generated for.

	* Add matlab/FiltersToolbox/scimat_local_convhull.m: (v0.1.0)

	- SCIMAT_LOCAL_CONVHULL  Smoothing of a binary image using a local
	convex hull.

	* Add ThirdPartyToolbox/alphavol.m:
	* Add ThirdPartyToolbox/license-alphavol.txt:

	- Add alpha-shapes function by Jonas Lundgren, last updat 08 Mar 2012,

	http://www.mathworks.nl/matlabcentral/fileexchange/28851-alpha-shapes

2012-08-05  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ThirdPartyToolbox/MeshVoxelisation:

	- Function to voxelise a closed (ie. watertight)
	triangular-polygon mesh. By Adam H. Aitkenhead. Downloaded from
	here

	http://www.mathworks.com/matlabcentral/fileexchange/27390-mesh-voxelisation

	This function was recommended by Valentina Carapella.

	* matlab/FileFormatToolbox/scinrrd_index2world.m: (v0.2.1)
	* matlab/FileFormatToolbox/scinrrd_world2index.m: (v0.2.2)

	- Fix bug. Give coordinates of centre of voxels, instead of left
	edge.

	* matlab/FiltersToolbox/scinrrd_ndgrid.m: (v0.1.1)

	- Fix bug. Give coordinates of centre of voxels, instead of left
	edge.

2012-08-04  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/CMakeLists.txt: (v0.1.3)

	- Add build of GMP, MPFR and CGAL libraries.

	* Add cpp/src/third-party/mpfr-3.1.1/CMakeLists.txt: (v0.1.0)

	- The MPFR library is released with an autotool build
	system. Here, instead of rewriting everything in CMake, we are
	just going to use CMake as a wrapper of MPFR's own build system.

	* cpp/src/third-party/gmp-5.0.5/CMakeLists.txt: (v0.2.0)

	- Replace add_custom_command() by execute_process() to wrap the
	autotools build system of GMP. Effectively, this means that we
	will compile and install the library at configuration (cmake)
	rather than compilation (make )time. The reason is that CGAL's
	configuration needs GMP and MPFR to have been compiled and
	installed before it can be configured.

	* cpp/src/third-party/CGAL-4.0.2/src/CGALCore/CMakeLists.txt:
	(v0.1.0)

	- Add dependency to libraries GMP and MPFR.

	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/FindGMP.cmake:
	(v0.1.0)
	* cpp/src/third-party/CGAL-4.0.2/cmake/modules/FindMPFR.cmake:
	(v0.1.0)

	- Fix bug. Variable names had not been enclosed in ${}, and where
	being ignored.

	* cpp/src/third-party/CGAL-4.0.2/CMakeLists.txt: (v0.1.0)

	- Variables have been renamed so that CGAL can be a subproject of
	Gerardus, e.g. CMAKE_SOURCE_DIR to CGAL_SOURCE_DIR.

	- We skip building some CGAL libraries that we don't need for
	Gerardus.

	- We constrain the file name when listing the files in directory
	scripts, to avoid getting an error from the .svn directory.

2012-08-03  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/gmp-5.0.5/CMakeLists.txt: (v0.1.0)

	- The GMP library is released with an autotool build system. Here,
	instead of rewriting everything in CMake, we are just going to use
	CMake as a wrapper of GMP's own build system.

	* Add cpp/src/third-party/mpfr-3.1.1:

	- The MPFR GNU library is required by CGAL so that CGAL Core can
	be compiled.

	Downloaded from

	http://www.mpfr.org/mpfr-current/#download

	* Add cpp/src/third-party/gmp-5.0.5:

	- The GNU Multiple Precision Arithmetic Library is required by
	CGAL so that CGAL Core can be compiled.

	Downloaded from

	http://gmplib.org/

2012-08-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/MatlabImportFilter.hxx: (v0.1.1)

	- Fix bug. Missing include of header file.

	* matlab/ItkToolbox/GerardusCommon.hpp
	* matlab/ItkToolbox/GerardusCommon.cpp
	* matlab/ItkToolbox/MatlabImageHeader.h
	* matlab/ItkToolbox/MatlabImageHeader.cxx
	* matlab/ItkToolbox/MatlabImportFilter.h
	* matlab/ItkToolbox/MatlabImportFilter.hxx
	* matlab/ItkToolbox/MatlabExportFilter.h
	* matlab/ItkToolbox/MatlabExportFilter.hxx

	- Move to matlab/, instead of having them in ItkToolbox, as they
	can be reused.

	* matlab/ItkToolbox/CMakeLists.txt: (v0.5.1)

	- Move GerardusCommon and Matlab import/export classes to matlab/,
	instead of having them in ItkToolbox, as they can be reused.

	* Add matlab/FiltersToolbox/scimat_blockproc3.m: (v0.1.0)

	- Block processing for a 3D SCI MAT volume.

	* matlab/FiltersToolbox/blockproc3.m: (v0.2.1)

	- Minor changes to help header.

	* Delete matlab/engopts.sh:

	- It's a relic, we no longer use Matlab's mex function to compile
	our mex files.

	* Add cpp/src/third-party/CGAL-4.0.2:

	- Third party library. CGAL is the Computational Geometry
	Algorithms Library. It provides meshing and triangulation
	capabilities, although at this point we just want to use it to
	query whether points are inside or outside a polyhedron.

	Downloaded from

	http://www.cgal.org/download.html

2012-07-12  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/CMakeLists.txt: (v0.5.0)
	* matlab/ItkToolbox/ItkImFilter.cpp: (v1.0.0)

	- Full rewrite of the architecture.

	- Now we admit input images with dimensions from 2 to 5.

	- Many layers of the architecture have been removed, to simplify
	the program. Now we have the parsers to connect Matlab runtime
	variables followed by a FilterWrapper. The FilterWrapper is a
	class so that we can use template partial specialisation and write
	an implementation for each filter. Also, if a filter doesn't
	accept a certain dimension or input type, we can deal with it this
	way.

	- We now use the new MatlabImportFilter and MatlabExportFilter
	interfaces to deal with the lists of input and output arguments.

	- We no longer have the Nrrd class. Instead, we have a
	MatlabImageHeader class that parses the metainformation of input
	images.

	- Now we can have vectors as input arguments.

	- We can also deal with output vector images, as with the last
	version, but now in a simple single method.

	* matlab/ItkToolbox/MatlabImageHeader.h: (v0.1.0)
	* matlab/ItkToolbox/MatlabImageHeader.cxx: (v0.1.0)

	- Class to provide an interface to read the metadata from a an
	input image. This allows to create a header class that can be used
	to deal with the image more easily.

	* Add matlab/ItkToolbox/MatlabExportFilter.h: (v0.1.0)
	* Add matlab/ItkToolbox/MatlabExportFilter.hxx: (v0.1.0)

	- Class to provide an interface to graft ITK images onto Matlab
	outputs.

	* Add matlab/ItkToolbox/MatlabImportFilter.h: (v0.1.0)
	* Add matlab/ItkToolbox/MatlabImportFilter.hxx: (v0.1.0)

	- Class to provide an interface to import data from Matlab
	mxArrays into ITK.

	* matlab/ItkToolbox/itk_imfilter.m: (v0.5.0)

	- Interface of a couple of filters has changed a bit, so change
	the help accordingly.

	* matlab/ItkToolbox/GerardusCommon.hpp: (v0.4.0)
	* matlab/ItkToolbox/GerardusCommon.cpp: (v0.4.0)

	- Remove the Dimension constant, as we want to be able to deal
	with different dimensions, not only 3D.

	- Remove the sub2ind() and ind2sub() methods that use
	std::vector<mwIndex>. As they use R, C and S, we know the vector
	must have length 3.

	* matlab/test/test_itk_imfilter.m: (v0.2.1)

	- Add tests for all the filters. There seems to be a problem with
	the itk::SignedMaurerDistanceMapImageFilter, distances are not
	computed.

	* Delete matlab/ItkToolbox/MexBaseFilter.hpp:
	* Delete matlab/ItkToolbox/MexBaseFilter.cpp:

	- No longer used. We have removed this base filter layer of the
	architecture. Instead, we have simply the FilterWrapper class to
	implement each filter separatedly in its constructor.

	* Delete matlab/ItkToolbox/MexFilter:

	- This directory contains all the Mex...ImageFilter derived
	filters that are no longer used. Instead of having so many files,
	now we only have the FilterWrapper class.

	* Delete matlab/ItkToolbox/NrrdImage.hpp:
	* Delete matlab/ItkToolbox/NrrdImage.cpp:

	- No longer used. Now we use class MatlabImageHeader instead to
	access the image's metadata.

2012-06-26  Tom Doel  <tom.doel@cs.ox.ac.uk>

	* Changelog:

	- Update changelog for my previous two commits

2012-06-25  Tom Doel  <tom.doel@cs.ox.ac.uk>

	Changes to make gerardus compile under Mac OSX.  Tested on OSX
	10.7.4 (Lion). Should also work for other versions of OSX (not
	tested).

	* CMakeLists.txt

	- For compiling on a Mac, we need to specify the system
	architecture (e.g. Intel 64-bit, Intel 32-bit, Power PC) using the
	CMAKE_OSX_ARCHITECTURES flag. If not specified we assume 64-bit
	intel, which is the desired option for Macs running Snow Leopard
	or later.

	* matlab/MatlabMakeMacros.cmake

	- Changed the Mac check IF(APPLE) to IF(${CMAKE_SYSTEM_NAME}
	MATCHES "Darwin"), which is the preferred way of testing for an
	OSX system

	- Added a new target for 64-bit OSX (i.e. Snow Leopard and later),
	for which Matlab uses the mex suffix mexmaci64

	* matlab/FindMatlab.cmake

	- Change Matlab library extension to .dylib for Mac OSX.

	- Add an additional heuristic for setting MATLAB_ROOT for OSX. If
	MATLAB_ROOT has not been set and cannot be found using the UNIX
	heuristics (e.g. which) then we search for Matlab in
	/Applications/MATLAB_xxxx.app, where xxxx is the version name
	(R2012a, R2011b etc) and choose the most recent.

	 - Added a linking directory for Matlab library files
	${MATLAB_ROOT}/bin/maci

2012-06-25  Tom Doel  <tom.doel@cs.ox.ac.uk>

	* matlab/ItkToolbox/MexBaseFilter.hpp: (v0.7.6)

	- Fixed a problem with MallocMatlabOutputBuffer which was
	preventing compilation on my system.

	The setting of a default parameter argument vectorSize=1 was being
	done in the function implementation when (if I understand
	correctly) default parameters should be set in the function
	declaration. I have moved this into the function declaration and
	it now compiles fine.

2012-06-18  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/MexBaseFilter.hpp: (v0.7.5)

	- Add warning message if grafting output onto Matlab produces a
	memory leak.

2012-06-17  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/MexBaseFilter.hpp: (v0.7.4)
	* matlab/ItkToolbox/MexBaseFilter.cpp: (v0.5.4)

	- Remove deprecated method MummifyFilterOutput().

	* matlab/ItkToolbox/ItkImFilter.cpp: (v0.7.0)
	* matlab/ItkToolbox/itk_imfilter.m: (v0.4.9)

	- Now we can give vector image outputs from the filters as outputs
	in Matlab. Implemented in the DanielssonDistanceMapImageFilter.

	- This means that now we can graft all filter outputs onto Matlab
	before running the filter with ExportOtherFilterOutputsToMatlab(),
	instead of after. This set ups the scene to completely rewrite the
	interface provided by MexBaseFilter.

	* matlab/ItkToolbox/MexBaseFilter.hpp: (v0.7.3)
	* matlab/ItkToolbox/MexBaseFilter.cpp: (v0.5.3)

	- Modify MallocMatlabOutputBuffer() and
	GraftMatlabOutputBufferIntoItkFilterOutput() so that now we can
	also graft vector image outputs onto Matlab, and not only scalar
	ones.

	* matlab/ItkToolbox/MexFilter/MexDanielssonDistanceMapImageFilter.cpp:
	(v0.6.0)
	* matlab/ItkToolbox/MexFilter/MexDanielssonDistanceMapImageFilter.hpp:
	(v0.6.0)

	- Now the 2nd output is the Voronoi partition, and the 3rd output
	are the vectors to the closest foreground voxels. Thanks to the
	new functionality in MexBaseFilter, we can work with vector
	outputs as well as scalar outputs. So we can graft all outputs
	before running the filter, and we no longer need to convert and
	copy them to Matlab space afterwards with
	CopyFilterNearestOutputToMatlab().

2012-06-13  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/GerardusCommon.hpp (v0.3.2):

	- Add more TypeIs... templated functions.

	* matlab/ItkToolbox/MexBaseFilter.hpp (v0.7.2):

	- Rename MexBaseFilterType as ImageToImageFilterType to make it
	clearer what it represents.

	- Add a Dimension template to MallocMatlabOutputBuffer() so that
	we can allocate memory for vector images.

	- Note: I have left some commented out test code that I'm going to
	need for the next changes.

	- Add more types that images are allowed to have.

	* matlab/ItkToolbox/MexFilter/MexDanielssonDistanceMapImageFilter.cpp
	(v0.5.1):

	- Note: I have left some commented out test code that I'm going to
	need for the next changes.

	* matlab/ItkToolbox/MexFilter/MexBinaryThinningImageFilter3D.cpp (v0.2.1):
	* matlab/ItkToolbox/MexFilter/MexTemplateFilter.cpp (v0.3.3):
	* matlab/ItkToolbox/MexFilter/MexDanielssonDistanceMapImageFilter.cpp
	(v0.5.1):
	* matlab/ItkToolbox/MexFilter/MexMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.cpp
	(v0.1.1):
	* matlab/ItkToolbox/MexFilter/MexBinaryDilateImageFilter.cpp (v0.2.1):
	* matlab/ItkToolbox/MexFilter/MexBinaryErodeImageFilter.cpp (V0.2.1):
	* matlab/ItkToolbox/MexFilter/MexSignedMaurerDistanceMapImageFilter.cpp
	(v0.3.1):
	* matlab/ItkToolbox/MexFilter/MexMedianImageFilter.cpp (v0.1.1):
	* matlab/ItkToolbox/MexFilter/MexAnisotropicDiffusionVesselEnhancementImageFilter.cpp
	(v0.2.1):

	- Rename FilterType as DerivedImageToImageFilterType to make it
	clearer what it refers to.

	- Get pointer to the derived filter in the constructor, so that
	it's available to other methods.

	* matlab/ItkToolbox/MexFilter/MexBinaryErodeImageFilter.hpp (v0.2.1):
	* matlab/ItkToolbox/MexFilter/MexSignedMaurerDistanceMapImageFilter.hpp
	(v0.3.1):
	* matlab/ItkToolbox/MexFilter/MexMedianImageFilter.hpp (v0.1.1):
	* matlab/ItkToolbox/MexFilter/MexAnisotropicDiffusionVesselEnhancementImageFilter.hpp
	(v0.1.3):
	* matlab/ItkToolbox/MexFilter/MexBinaryThinningImageFilter3D.hpp (v0.3.1):
	* matlab/ItkToolbox/MexFilter/MexTemplateFilter.hpp (v0.3.1):
	* matlab/ItkToolbox/MexFilter/MexDanielssonDistanceMapImageFilter.hpp
	(v0.5.1):
	* matlab/ItkToolbox/MexFilter/MexMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.hpp
	(v0.1.1):
	* matlab/ItkToolbox/MexFilter/MexBinaryDilateImageFilter.hpp
	(v0.2.1):

	- Add pointer to the derived filter as a member variable, so that
	then we can use it from any method.

2012-06-02  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/mba_surface_interpolation.m (v0.2.0):
	* matlab/PointsToolbox/scinrrd_surface_interpolation.m (v0.4.0):
	* matlab/PointsToolbox/mba_surface_interpolation.cpp (v0.2.0):
	* matlab/PointsToolbox/surface_interpolation.m (v0.2.0):

	- Some minor edits to warn when the new input argument is ignored,
	and in terms of style and help header.

	- Patch submitted by Tom Doel, to add a new input argument to set
	the number of levels in the MBA and MBAE interpolants.

	* matlab/test/test_scinrrd_surface_interpolation.m (v0.1.0):

	- Add test script for scinrrd_surface_interpolation().

	* cpp/src/third-party/mba/CMakeLists.txt (v0.1.2):

	- Fix bug. Install MBA library to the Gerardus lib directory
	instead of in the third-party library, so that it can be found by
	the mex files in matlab.

2012-05-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/MexBaseFilter.hpp (v0.7.1):

	- Fix memory leak. We were allocating memory for the output image
	twice, once using Matlab's mxCreateNumericArray, and then again in
	GraftMatlabOutputBufferIntoItkFilterOutput() using
	this->filter->GetOutput()->Allocate();

	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.8):

	- We don't need to mummify the first output of the filter with
	MummifyFilterOutput(), because we are already mummifying it with
	option filterWillDeleteTheBuffer=false when we graft the Matlab
	buffer into the filter output.

2012-05-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/add_filter_template.sh (v0.1.3):
	* matlab/ItkToolbox/CMakeLists.txt (v0.4.6):

	- Move Mex*Filter.cpp and Mex*Filter.hpp files to new directory
	MexFilter, so that ItkToolbox is not so cluttered.

	* Add directory matlab/ItkToolbox/MexFilter.

2012-05-01  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/Resize3DImage.cxx (v0.2.0):

	- Add "compress" input argument.

2012-04-11  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/ItkToolbox/MexMedianImageFilter.hpp (v0.1.0):
	* Add matlab/ItkToolbox/MexMedianImageFilter.cpp (v0.1.0):
	* matlab/ItkToolbox/itk_imfilter.m (v0.4.8):
	* matlab/test/test_itk_imfilter.m (v0.2.0):
	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.7):
	* matlab/ItkToolbox/CMakeLists.txt (v0.4.5):

	- Add itk::MedianImageFilter, with half-size of filter's box as
	input arguments.

2012-04-10  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/blockproc3.m (v0.2.0):

	- Enable parallel computation using Matlab's parfor loop from the
	Parallel Computing Toolbox.

	- Remove processing of nrrd.data structs, it's really meaningless
	here.

2012-04-07  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.8):

	- Fix bug. Reading of .mha files with LOCAL binary data was
	starting at the wrong place (at the beginning of the LOCAL line,
	rather than after it).

	* matlab/FileFormatToolbox/writemetaimagefile.m (v0.1.4):

	- Enable writing of 2D images.

2012-03-30  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/CMakeLists.txt (v0.4.4):
	* Add
	matlab/ItkToolbox/MexMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.hpp (v0.1.0):
	* Add
	matlab/ItkToolbox/MexMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.cpp (v0.1.0):
	* matlab/itk_imfilter.m (v0.4.7):
	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.6):

	- Add filter
	itk::MultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.

	* matlab/ItkToolbox/add_filter_template.sh (v0.1.2):

	- Fix bug. Rev and Date seach patterns in sed expression were too
	specific.

2012-03-29  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.5):
	* matlab/itk_imfilter.m (v0.4.6):
	* matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.cpp
	(v0.2.0):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.h
	(v0.3.0):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.txx
	(v0.3.0):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.h
	(v0.2.0):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.txx
	(v0.2.0):

	- Add linear scales besides logarithmic scales. It seems that for
	small ranges of sigma values, a linear scale covers the range
	better than a logarithmic scale.

2012-03-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.cpp
	(v0.1.3):

	- I had forgotten to remove some debug messages.

2012-03-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/ItkPSTransform.cpp (v0.3.1):

	- Enable bspline warp also for ITK v4.x. With help from Nicholas
	Tustison in this thread of the insight-users' mailing list

	http://www.itk.org/pipermail/insight-users/2012-March/044238.html

	* CMakeLists.txt (v0.1.3):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.h
	(v0.2.1):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.txx
	(v0.2.1):

	- Suggestion by Bradley Lowekamp to replace my new preprocessor
	macro ITK3 by the standard ITK_VERSION_MAJOR.

	* CMakeLists.txt (v0.1.2):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.h
	(v0.2.0):
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.txx
	(v0.2.0):
	* matlab/ItkToolbox/ItkPSTransform.cpp (v0.3.0):

	- Enable compilation with ITK v4.x.

2012-03-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/test/test_itk_imfilter.m (v0.1.0):

	- Add Script to test the filters provided by itk_imfilter (code
	for the moment only for "advess" filter).

	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkMultiScaleHessianSmoothed3DToVesselnessMeasureImageFilter.txx:
	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.txx:

	- Comment out standard output messages. In Matlab, these are not
	seen until the algorithm finishes, so they don't help to know how
	the algorithm progresses.

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.7):

	- Accept .mhd extension for MetaImage format.

	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementImageFilter.txx:

	- Fix bug. Wrong #define label for debug function.

	* matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.hpp
	(v0.1.2):
	* matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.cpp
	(v0.1.2):

	- Add missing user-provided input parameters: NUMITERATIONS,
	WSTRENGTH, SENSITIVITY, TIMESTEP, EPSILON.

	* matlab/ItkToolbox/itk_imfilter (v0.4.5):
	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.4):

	- Add syntax of filter advess to help header.

2012-03-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/MexTemplateFilter.cpp (v0.3.2):
	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.3):

	- Reorder methods. Minor edits.

	* matlab/ItkToolbox/itk_imfilter.m (v0.4.4):
	* matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.hpp
	(v0.1.1):
	* matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.cpp
	(v0.1.1):

	- Enable user-provided input arguments: sigmaMin, sigmaMax, numSigmaSteps.

	* Add matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.hpp
	(v0.1.0):
	* Add matlab/ItkToolbox/MexAnisotropicDiffusionVesselEnhancementImageFilter.cpp
	(v0.1.0):
	* matlab/ItkToolbox/itk_imfilter.m (v0.4.3):
	* matlab/ItkToolbox/CMakeLists.txt (v0.4.3):
	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.2):

	- Add AnisotropicDiffusionVesselEnhancementImageFilter using
	automatic script add_filter_template.sh. It compiles, but of
	course we cannot pass user-provided parameters yet.

	* matlab/ItkToolbox/add_filter_template.sh (v0.1.1):

	- Automate adding MexFilter.cpp file to list of source files to
	build itk_imfilter.

	- Automate adding include path for new filter if it's a function
	not in ITK.

	* cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1/itkAnisotropicDiffusionVesselEnhancementFunction.txx
	(v0.1.1):

	- Comment out unused variable declaration to avoid compilation
	warnings.

	* matlab/ItkToolbox/MexTemplateFilter.cpp (v0.3.1):

	- Comment out the filter instantiations that are not
	OutputTye==InputType, as this is the default.

	* Add matlab/ItkToolbox/add_filter_template.sh (v0.1.0):

	- Script that partly automates adding a new filter to
	itk_imfilter().

	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.1):

	- Prepare file to allow for script add_filter_template.sh to
	insert code for new filters automatically.

	- Add SELECTFILTER macro to tidy up code.

2012-03-22  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/CMakeLists.txt (v0.4.2):

	- Include IJ-Vessel_Enhancement_Diffusion.1 in the build of itk_imfilter().

	* matlab/ItkToolbox/MexSignedMaurerDistanceMapImageFilter.hpp (v0.3.0):
	* matlab/ItkToolbox/MexSignedMaurerDistanceMapImageFilter.cpp (v0.3.0):
	* matlab/ItkToolbox/MexBinaryThinningImageFilter3D.hpp (v0.3.0):
	* matlab/ItkToolbox/MexBinaryThinningImageFilter3D.cpp (v0.2.0):
	* matlab/ItkToolbox/MexDanielssonDistanceMapImageFilter.hpp (v0.5.0):
	* matlab/ItkToolbox/MexDanielssonDistanceMapImageFilter.cpp (v0.5.0):
	* matlab/ItkToolbox/MexTemplateFilter.hpp (v0.3.0):
	* matlab/ItkToolbox/MexTemplateFilter.cpp (v0.3.0):
	* matlab/ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.2.0):
	* matlab/ItkToolbox/MexBinaryDilateImageFilter.cpp (v0.2.0):
	* matlab/ItkToolbox/MexBinaryErodeImageFilter.hpp (v0.2.0):
	* matlab/ItkToolbox/MexBinaryErodeImageFilter.cpp (v0.2.0):

	- Important changes to the code:

	- Unify without-parameters and with-parameters constructors as
	with-parameters constructor. Put the declaration in the .hpp
	file. Put the definition in the .cpp file. This simplifies and
	unclutters the code.

	- Now the constructor in charge of checking number of extra input
	parameters, and reading them, instead of
	FilterAdvancedSetup(). Store them to protected member
	variables. Pass then input parameters to filter using
	FilterAdvancedSetup().

	* matlab/ItkToolbox/ItkImFilter.cpp (v0.6.0):

	- Important changes to the code.

	- Without-parameters and with-parameters constructors have been
	unified.

	- Code that decides the output voxel type from the filter and
	input voxel type has been simplified. Now we have special code
	only for filters that don't return the same type as input
	image. The rest are all grouped together.

	* matlab/ItkToolbox/MexBaseFilter.hpp (0.7.0):
	* matlab/ItkToolbox/MexBaseFilter.cpp (0.2.0):

	- Now the constructor checks that there are at least 2 input
	arguments (filter type and input image).

	- Remove the constructor without user-provided parameters. To
	simplify the code, we are going to use only a general constructor
	always with input parameters (that can be empty for filters that
	don't require them).

	- Add missing types of output voxel: int8, int16, int32.

	* matlab/ItkToolbox/GerardusCommon.hpp (v0.3.1):

	- Add tests for missing types of output voxel: int8, int16, int32.

2012-03-21  Ramon Casero  <rcasero@gmail.com>

	* Add cpp/src/third-party/IJ-Vessel_Enhancement_Diffusion.1:

	- C++ ITK classes that implement the paper

	Enquobahrie A., Ibanez L., Bullitt E., Aylward S., "Vessel
	Enhancing Diffusion Filter", Insight Journal - 2007 MICCAI Open
	Science Workshop.

	http://hdl.handle.net/1926/558

2012-03-20  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.6):

	- Stop reading after ElementDataFile, as we assume this is the end
	of the header.

	* release 0.7.0.

	- CMake build system now builds and installs all the command-line
	programs and MEX files in the project. Some had been forgotten,
	after I compiled them by hand from Matlab. But now, everything can
	be compiled from the root CMakeLists.txt.

	- Compilation and build tested for

		Linux 64 bit, gcc 4.6.1, CMake 2.8, ITK 3.20.1,
		Matlab R2011b, Boost 1.46

		Windows 32 bit, Visual Studio 9 (2008), CMake 2.8,
		ITK 3.20.1, Matlab R2008a, Boost 1.47

	* matlab/ThirdPartyToolbox/dijkstra.cpp:

	- Resolve some warnings removing unused variables.

	* matlab/PointsToolbox/CMakeLists.txt (v0.1.1):

	- Fix bug. In Windows, we need to specify where the Boost include
	directory is.

	* cpp/src/third-party/mba/CMakeLists.txt (v0.1.1):

	- Fix bug. In Windows, build fails if INSTALL specifies
	LIBRARY. Removing the word LIBRARY solved the problem.

	- Fix bug. In Windows, we need to specify where the Boost include
	directory is.

	- Fix bug. In Windows, we need to build the static as well as the
	dynamic MBA library. Otherwise, mba_surface_interpolation() cannot
	link to it.

	* CMakeLists.txt (v0.1.1):
	* cpp/src/CMakeLists.txt (v0.1.2):

	- Hide some warnings given by MSVC compiler.

	- Move search for ITK and Boost to the root directory, so that
	they are available for the cpp and matlab projects.

	* cpp/src/CMakeLists.txt (v0.1.1):

	- Add subdirectory third-party/mba to the build system.

	* matlab/CMakeLists.txt (v0.1.1):

	- Add subdirectories ThirdPartyToolbox and PointsToolbox to the
	build system.

	* Add cpp/src/third-party/mba/CMakeLists.txt (v0.1.0):

	- Hide some warnings given by MSVC compiler.

	- This directory was not part of the cmake build system. Now the
	MBA library is built and installed in
	cpp/src/third-party/mba/lib. This library is linked to by the MEX
	function mba_surface_interpolation().

	* Add matlab/PointsToolbox/CMakeLists.txt (v0.1.0):
	* Add matlab/ThirdPartyToolbox/CMakeLists.txt (v0.1.0):

	- This directory was not part of the cmake build system. I had
	compiled the MEX files

	sparse_breakdown()
	mba_surface_interpolation()
	dijkstra()

	by hand, so I hadn't noticed they were no being compiled until
	now.

	* matlab/PointsToolbox/sparse_breakdown.cpp (v0.1.1):

	- Fix bug. Missing #include.

	* Add programs directory, where compiled command line programs
	will be installed.

	* cpp/src/CMakeLists.txt:

	- Add code to install all compiled command line programs into new
	gerardus/programs directory.

	- Fix project name. No good reason why this was called
	GerardusItkToolsProject. Now called GERARDUS_CPP.

	- Instead of relying on having TCLAP installed externally, now we
	distribute it with Gerardus as a third-party library.

	* Add cpp/src/third-party/tclap-1.2.1:

	- TCLAP is the Templatized C++ Command Line Parser Library

	http://tclap.sourceforge.net/

	We use it in C++ programmes to set the syntax of the command and
	read input arguments from the command line.  It's trivial to
	install in Linux, but Windows users have to download, unzip and
	copy it to a local folder.  Then, writing a FindTCLAP.cmake would
	be a bit complicated. As the library doesn't need to be compiled
	(it works as a collection of templated C++ header files), it's
	going to be much simpler to just redistribute the library in
	Gerardus.

2012-03-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/ItkToolbox/CMakeLists.txt:

	- Bug spotted by Pablo Lamata: ITK v4.x requires to use
	${ITK_LIBRARIES} instead of e.g. ITKCommon ITKIO when defining
	targets. I have made the change now in advance of moving to ITK
	4.x.

	http://groups.google.com/group/gerardus-users/browse_thread/thread/62aa9fcb67045ae8

	* matlab/FiltersToolbox/CMakeLists.txt:

	- Bug spotted by Pablo Lamata: ITK v4.x requires to use
	${ITK_LIBRARIES} instead of e.g. ITKCommon ITKIO when defining
	targets. I have made the change now in advance of moving to ITK
	4.x.

	http://groups.google.com/group/gerardus-users/browse_thread/thread/62aa9fcb67045ae8

	- No longer build the MEX function deconvolve(). It depends on the
	Clarity library, that depends on the FFTW library. Matlab has its
	own FFTW library, and I haven't found the way yet of preventing
	them to clash with the ones installed outside Matlab.

	* matlab/CMakeLists.txt:

	- Remove SET(CMAKE_BUILD_TYPE RELEASE). That's set in the root
	CMakeLists.txt, not here.

	* cpp/src/CMakeLists.txt:

	- No longer build the Clarity library, that depends on the FFTW
	library.  Matlab has its own FFTW library, and I haven't found the
	way yet of preventing them to clash with the ones installed
	outside Matlab.

	- We had forgotten to check for two required libraries: Boost and
	TCLAP.  Now we are finding Boost correctly. I have made a temporal
	fix for TCLAP on my computer, by harcoding the path to my TCLAP
	installation, but that path will need to be detected
	automatically.

	- In Windows, we have to link to ${Boost_SYSTEM_LIBRARY}
	${Boost_FILESYSTEM_LIBRARY} instead of boost_system
	boost_filesystem, or else the linker cannot find the libraries.

	- Bug spotted by Pablo Lamata: ITK v4.x requires to use
	${ITK_LIBRARIES} instead of e.g. ITKCommon ITKIO when defining
	targets. I have made the change now in advance of moving to ITK
	4.x.

	http://groups.google.com/group/gerardus-users/browse_thread/thread/62aa9fcb67045ae8

	* CMakeLists.txt:

	- Multi-configuration systems (e.g. Visual Studio in Windows) are
	different from single configuration systems (e.g. gcc in Linux).
	In the former, we use CMAKE_CONFIGURATION_TYPES to tell which
	configurations can be built (Debug; Release for Gerardus), and
	then the configuration is chosen in Visual Studio from a pull-down
	menu.  In the latter, we use CMAKE_BUILD_TYPE to set the build as
	Release by default.

2012-03-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_save.m (v0.4.0):

	- Seg3D2 does not expect the scirunnrrd struct to have the 4th
	dummy dimension in .mat files, so we no longer create
	it. Currently, it's not possible to run Seg3D 1.x on my linux
	computer, so I couldn't test whether these new .mat format also
	loads in Seg3D 1.x.

2012-03-14  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/test/test_smdscale.m (v0.1.0):

	- To test matlab/ManifoldToolbox/smdscale.m.

	* Add matlab/ManifoldToolbox/smdscale.m (v0.1.0):

	- MDSCALE Multidimensional scaling on the surface of a sphere.

	* Add matlab/ManifoldToolbox/gdmatrix.m (v0.1.0):

	- GDMATRIX  Matrix of geodesic distances between points on a
	sphere, in degrees of arc.

	* Add directory for new toolbox, matlab/ManifoldToolbox, for
	functions that operate on Riemannian manifolds, instead of
	Euclidean space.

2012-03-08  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/bwmesh.m (v0.1.4):

	- Fix documentation again. The node index is not the linear index
	of the voxel in the image, but the index of the node in the list
	of nodes.

2012-03-05  Ramon Casero  <rcasero@gmail.com>

	* matlab/PointsToolbox/bwmesh.m (v0.1.3):

	- Fix documentation. Vicente Grau noted that the help header was
	wrong (it corresponded to the old method, that used TriDelaunay
	instead of delaunay).

2012-02-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_save.m (v0.3.2):

	- Fix bug. When writing to .mha file, function
	writemetaimagefile() expects all input arguments in the order x,
	y, z, so not only the image but also the size, spacing and offset
	vectors had to be permuted accordingly.

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.5):

	- Fix bug. Size vector shouldn't have permuted the x and y
	components when reading from an .mha file. For consistency, it's
	better to just read the size, spacing and offset values as they
	are in the .mha file (x, y, z), and then permute the whole
	nrrd.axis so that we have rows->y and cols->x.

	* matlab/FileFormatToolbox/writemetaimagefile.m (v0.1.3):

	- Fix bug. The expected input should be having all input arguments
	(image data, spacing, offset, size) in the order x, y, z. And this
	is the order that they have to be written to the .mha file too.

	- Add "logical" (boolean) as input data type.

2012-02-26  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/blockproc3.m:

	- BLOCKPROC3 Block processing for a 3D image.

2012-02-24  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.4):

	- Fix bug. Similarly to yesterday's fixed bug, nrrd.axis.min was
	not being read correctly from .mha files. We had forgotten to
	remove half the voxel size from the offset value.

2012-02-23  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_save.m (v0.3.1):

	- Fix bug. nrrd.axis.min points to the _corner_ of the first
	voxel, whereas MetaImage's format Offset label referes to the
	_centre_ of the first voxel. Now we are passing the correct offset
	value by adding half the voxel size to nrrd.axis.min.

	* matlab/FileFormatToolbox/writemetaimagefile.m (v0.1.2):

	- Fix bug. Spacing and offset values were saved as a fixed-length
	float with 6 decimal places. But microscopy images often have
	spacing or offsets that can be smaller than that precision, so
	they were being truncated to 0.000000. Now we use an exponential
	format with 12 decimal places (e.g. -2.197265685380e-07), which
	solves that problem.

2012-02-16  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/typicalpsf.m (v0.2.0):

	- Change input argument thr, so that now they represent quantile
	values. This works better in terms of masking out the background
	of the image.

	- Add input argument minsz, a scalar with the minimum size of a
	bead connected component in voxels. Smaller components will be
	considered noise.

	* matlab/FileFormatToolbox/scinrrd_tiff2nrrd.m (v0.2.4):

	- Don't scale intensity values. This was a very bad idea. A load
	function should not invisibly change intensity values.

2012-02-09  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/skeleton_label.m (v0.15.3):

	- If we have no skeleton voxels, don't waste time processing.

	* matlab/FiltersToolbox/scinrrd_skeleton_prune.m (v0.4.1):

	- If we have no voxels to prune, don't waste time processing.

	* matlab/FileFormatToolbox/scinrrd_tiff2nrrd.m (v0.2.3):

	- If data was read by microscope as 12-bit, scale intensities so
	that they cover the whole 16-bit range.

2012-01-28  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_seg3d2matlab.m (v0.1.1):

	- Fix bug. The function crashed if the scinrrd struct didn't
	contain an "axis" field. Now it gives a warning.

	* matlab/FileFormatToolbox/scinrrd_load.m (0.2.3):

	- Add many more data types to read from .mha files, to have a
	comprehensive list of MetaImage->Matlab conversion list.

	* matlab/FileFormatToolbox/writemetaimagefile.m (v0.1.1):

	- Add many more data types, to have a comprehensive list of
	Matlab->MetaImage conversion list.

2012-01-27  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.2):

	- Fix bug. All intensity values where converted to single. Now
	nrrd.data has the same type as the data in the file.

2012-01-26  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.1):

	- Fix bug. When raw data follows header in .mha file, the file
	pointer was not being returned to the right position before
	reading the raw data.

2012-01-21  Ramon Casero  <rcasero@gmail.com>

	* matlab/FiltersToolbox/typicalpsf.m (v0.1.1):

	- Omit bead images that have saturated intensity values when
	estimating the PSF.

	* matlab/FileFormatToolbox/scinrrd_load.m (v0.2.0):

	- Add loading of .lsm files.

2012-01-19  Ramon Casero  <rcasero@gmail.com>

	* matlab/FileFormatToolbox/dcm2metaimage.m (v0.1.1):
	* matlab/FileFormatToolbox/im2metaimage.m (v0.1.1):

	- Use new writemetaimagefile() function to write a single .mha
	function instead of splitting header and image into .mha and .raw
	files.

	* Add matlab/FileFormatToolbox/writemetaimagefile.m (v0.1.0):

	- WRITEMETAIMAGEFILE Write a MetaImage file (.mha) with both
	header and data.

	* matlab/FileFormatToolbox/scinrrd_save.m (v0.3.0):

	- Now nrrd volumes can be saved to MetaImage format as well as
	Matlab format. The reson to do this is that Seg3D at this point
	cannot read the spacing and offset values from an image saved in
	.mat format.

	* matlab/FileFormatToolbox/WriteMhaFile.m (v0.1.1):

	- Tidy up function. Remove unncessary input arguments. Images with
	input type 'char' are not considered valid anymore.

	* matlab/FileFormatToolbox/WriteRawFile.m (v0.2.0):

	- Remove most of the code, that was redundant. What was happening
	is that a header was being written, and then overwritten by the
	raw data. Now only the raw data is written. Also, unnecessary
	input arguments have been removed.

2012-01-13  Ramon Casero  <rcasero@gmail.com>

	* release 0.6.1

	- Added CUDA support with Matlab.

	* matlab/FiltersToolbox/Deconvolve.cpp:
	* matlab/FiltersToolbox/deconvolve.m:

	- Edit help header to note that the CUDA implementation is now
	available.

	* CMakeLists.txt:

	- Select gcc v4.4 automatically if we want to compile Clarity with
	its CUDA implementation. The CUDA implementation doesn't seem to
	make a big difference, though. This is a test on a volume with
	size RxCx19 and a PSF of size 9x9x7. Time in seconds.

	 R,C | no CUDA  |  CUDA   |
	---------------------------
	 128 |   14.55  |  15.38  |
	 256 |    9.13  |   9.85  |
	 512 |  103.44  |  93.79  |
	1024 |  162.80  | 156.00  |
	---------------------------

	- Fix bug. We need to tell cmake from here to look in
	cpp/src/third-party/cquammen-Clarity/CMake, so that it can use
	FindFTTW.cmake.

	* cpp/src/third-party/cquammen-Clarity/CMakeLists.txt:

	- If CMAKE_MODULE_PATH has been set from the root CMakeLists.txt
	of Gerardus, do not overwrite it.

	- CUDA v4.0 RC2 is incompatible with gcc >= 4.5. Gcc 4.4. is
	selected in the root gerardus CMakeLists.txt, but this flag needs
	to be set by hand, because otherwise nvcc will read the version of
	the default gcc in the system, that is v4.5.

	* Replace cpp/src/third-party/cquammen-Clarity by the latest
	version:

	- Cory Quammen has fixed the bugs in Clarity that prevented it
	from compiling with CUDA enabled at least in Ubuntu 11.10. Version
	downloaded today from

	https://github.com/cquammen/Clarity/downloads

	as cquammen-Clarity-c73c97d.

2011-12-11  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/RigidRegistration2D.cxx (v0.3.0):

	- Use MattesMutualInformation instead of MeanSquares as the metric.

2011-12-10  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/RigidRegistration2D.cxx (v0.2.0):

	- Remove backgroundGray argument. Instead, have an "invert"
	switch. If the object is white and the background black, we use
	the normal registration. If viceversa, the user selects
	"--invert", and this inverts the luminance values before
	registration. Also, default background values are automatically
	set depending on "invert" (black, if not selected; white, if
	selected).

2011-12-09  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/RigidRegistration2D.cxx (v0.1.1):

	- Add input argument to select gray level of background pixels.

	* Add cpp/src/RigidRegistration2D.cxx (v0.1.0):
	* cpp/src/CMakeLists.txt:
	* cpp/README

	- Program to align one 2D image to another using a rigid
	transformation (rotation and translation).

2011-11-25  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/Deconvolve.cpp (v0.1.0):

	- MEX interface to the Clarity deconvolution library. C++
	implementation.

	* Add matlab/FiltersToolbox/deconvolve.m (v0.1.0):

	- MEX interface to the Clarity deconvolution library. Matlab
	helper file.

	* matlab/FiltersToolbox/CMakeLists.txt:

	- Now third-party libraries are installed in gerardus/lib. In
	particular, Clarity is no longer compiled into its source
	directory.

	- Make Clarity a dependency of deconvolve.

	* matlab/CMakeLists.txt, CMakeLists.txt:

	- Move the manual selection of older compilers from
	matlab/CMakeLists.txt to the root CMakeLists.txt. Also note that
	CMAKE_CC_COMPILER is incorrect, the variable is called
	CMAKE_C_COMPILER.

	* Add lib directory to install third-party libraries.

2011-11-24  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/cquammen-Clarity/CMakeLists.txt:

	- We don't need to build the apps and tests of Clarity, comment
	out.

	- Now Clarity will be built in the build tree, instead of the src
	directory, and installed with `make install` to gerardus/lib.

	* CMakeLists.txt:

	- Set CMake install path to gerardus/lib, so that we have
	everything in one place (except for the MEX files, that stay in
	their respective subdirectories).

	- Move the rpath block to this file from matlab/CMakeLists.txt, as
	we need it also to link MEX files to Clarity, and probably for
	future libraries.

	* matlab/CMakeLists.txt:

	- Move the rpath block to CMakeLists.txt, as we need it also to
	link MEX files to Clarity, and probably for future libraries.

	- Upgrade CMake requirement to v2.8.

	- Change CMAKE_SOURCE_DIR to CMAKE_CURRENT_SOURCE_DIR so that it
	can be used by the master CMakeLists.txt.

2011-11-23  Ramon Casero  <rcasero@gmail.com>

	* Add matlab/FiltersToolbox/typicalpsf.m (v0.1.0):

	- TYPICALPSF Estimate point spread function from microbeads image.

	* matlab/CMakeLists.txt:

	- Update requirement to cmake VERSION 2.8.

	- As it used CMAKE_SOURCE_DIR instead of CMAKE_CURRENT_SOURCE_DIR,
	the MatlabMakeMacros.cmake module could not be found when called
	as a subdirectory of the gerardus root.

	* matlab/FiltersToolbox/imblend.m (v0.2.0):

	- Instead of using only the slope to math intensities in one image
	to another, use the slope and intercept of the linear
	regression. Provide now also the intercept as an output argument.

	* Add CMakeLists.txt:

	- File at the root of gerardus to build everything that can be
	built.

	* cpp/src/CMakeLists.txt:

	- Build third-party/cquammen-Clarity as a subproject.

	- Current Matlab (R2011b) no longer requires an older version of
	g++ than what is available in Ubuntu.

	- Several targets now need to be linked explicitely with
	boost_filesystem.

	- Add Rev, Date, native subversion properties.

	* cpp/src/ExtractVoxelCoordinatesFromSegmentationMask.cxx:
	* cpp/src/Skeletonize3DSegmentation.cxx:
	* cpp/src/Vesselness3DImage.cxx:
	* cpp/src/Rotate3DImage.cxx:
	* cpp/src/PadSegmentationMaskWithVoxels.cxx:
	* cpp/src/Resize3DImage.cxx:

	- Add Rev, Date, native subversion properties.

	- Fix bug. Rename deprecated boost library method.

	* cpp/src/third-party/cquammen-Clarity/apps/DeconvolveRawImages/DeconvolveRawImages.cxx:
	* cpp/src/third-party/cquammen-Clarity/include/internal/Stopwatch.h:
	* cpp/src/third-party/cquammen-Clarity/src/FFT.cxx:
	* cpp/src/third-party/cquammen-Clarity/src/MaximumLikelihoodDeconvolve.cxx:
	* cpp/src/third-party/cquammen-Clarity/src/Memory.cxx:
	* cpp/src/third-party/cquammen-Clarity/src/IDivergenceDeconvolve.cxx:

	- Fix warnings when compiling under linux.

	* cpp/src/third-party/cquammen-Clarity/CMakeLists.txt:

	- We want to have a CMakeLists.txt at the gerardus root, that
	calls every other CMakeLists.txt. Clarity's CMakeLists.txt was
	using policy CMP0003 OLD, which created conflicts between the
	fftw3 libraries in /usr/lib and the one provided by Matlab.

	Also, as it used CMAKE_SOURCE_DIR instead of
	CMAKE_CURRENT_SOURCE_DIR, the FindFFTW.cmake module could not be
	found when called as a subdirectory of the gerardus root.

	* Merge all log files (ChangeLog matlab/ChangeLog java/ChangeLog
	cpp/src/ChangeLog shell-script/ChangeLog) into gerardus/ChangeLog.

2011-11-22  Ramon Casero  <rcasero@gmail.com>

	* Rename cquammen-Clarity-v1.0.0-5-c9d0889 to
	cquammen-Clarity. The name was too long.

	* third-party/cquammen-Clarity-v1.0.0-5-c9d0889/WienerDeconvolve.cxx,
	third-party/cquammen-Clarity-v1.0.0-5-c9d0889/src/Clarity.cxx:

	- Fix bug. Missing includes broke the linux build.

	* Add third-party/cquammen-Clarity-v1.0.0-5-c9d0889:

	- Downloaded from https://github.com/cquammen/Clarity.

	"Clarity is an open-source C/C++ library implementing many of the
	common deconvolution algorithms used in fluorescence
	microscopy. It is designed specifically for processing 3D images
	generated from optical sectioning. Clarity uses multithreaded
	algorithms to make full use of all the cores on modern multi-core
	computer systems. For even greater performance, the deconvolution
	algorithms can optionally run on commodity graphics processing
	units that feature hundreds of computing cores. Support for
	acceleration on graphics processing units is currently available
	on NVIDIA graphics cards."

2011-11-01  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/gram2dsq.m (v0.1.1):

	- Replace multiplication by vector of 1s by repmat(), that is
	faster. Add citation to Dattorro 2005.

2011-10-31  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/polardecomp.m (v0.2.0):

	- Swap output arguments so that they follow the natural order of
	the equation.

2011-10-30  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/dmatrix2coords.m (v0.1.1):

	- Fix bug. Because the resulting vectors from the distance matrix
	can be a rigid transformation of the vectors that created the
	distance matrix in the first place, we can obtain something like
	this from 4 vectors in R^2

	    0.0000   -0.0000    0.4356   -0.1337
            0.0000   -0.0000   -0.1971   -0.4033
            0.0000   -0.0000   -0.0415    0.5437
           -0.0000   -0.0000   -0.1970   -0.0067

	If we now truncate to leave only the two first columns, we are
	throwing away most of the information in the result, and leaving
	only numerical errors. Now, we first sort the columns from largest
	norm to smallest norm, i.e.

           -0.1337    0.4356   -0.0000    0.0000
           -0.4033   -0.1971   -0.0000    0.0000
            0.5437   -0.0415   -0.0000    0.0000
           -0.0067   -0.1970   -0.0000   -0.0000

	before truncating.

	* Add PointsToolbox/gram2dsq.m (v0.1.0):

	- GRAM2DSQ Convert Gram matrix to squared distance matrix.

	* FiltersToolbox/skeleton_label.m (v0.15.1):

	- Fix bug. Take into account that some branches may not have
	voxels associated to them.

	* Add PointsToolbox/polardecomp.m (v0.1.0):

	- POLARDECOMP Polar decomposition of a square complex matrix.

2011-10-16  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m (v0.15.1):

	- Fix bug. We cannot assume that there are no short leaf
	branches. This function can be called by the pruning
	function. Instead, we now compute the connection matrix, and use
	it to find which branches are leaf-branches. Then, we can convert
	short branches that are also *not* leaves into bifurcation clumps.

	- Convert intermdiate branches with up to 4 voxels to bifurcation
	clumps (before, it was only up to 2).

	- Add commented out code to compute statistic for all
	branches. This will be used to add another constrain to branches
	that are merging.

2011-10-13  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m (v0.15.0):

	- Add section "convert very short intermediate branches to
	bifurcation clusters". Very short intermediate branches create
	trouble with merging, because they can get in between two branches
	that should actually be neighbours. They also are a pain when
	labelling with region grow the whole segmentation, because they
	will not look like real branches, and they will steal voxels from
	nearby branches. By turning them into bifurcation clumps, we
	overcome these problems.

	- Replace code to create the part of NRRD struct by new function
	scinrrd_im2nrrd(). We actually need a NRRD struct for parts of the
	new code.

	- Add a list of flags to tag bifurcation voxels that should be
	prevented from merging. This will be used when we add the code
	that separates vessels from trabeculations.

	- Add commented out code for "split the skeleton in branches that
	contain both a vessel and a bit of trabeculation". We are saving
	this for the next upgrade of the function.

	- Fix bug. Convert main diagonal of adjacency matrix madj to
	zeros, as it doesn't make sense that a branch is adjacent to
	itself over an arbitrary bifurcation voxel of the many it can have.

2011-10-04  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m (v0.8.6):

	- Fix bug. Catch exceptions when trying to triangulate with
	delaunay (e.g. when we have fewer than 4 points or they are
	coplanar). Instead of error and exit, make triboundary empty, and
	let the code keep running.

2011-09-30  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/imblend.m (v0.1.0):

	- Blend two image stacks to increase the apparent dynamic range
	and improve the signal to noise ratio.

2011-09-29  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_tiff2nrrd.m (v0.2.2):

	- Add support for RGB images in LSM files.

2011-09-23  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/pts_mesh.m (v0.2.0):

	- Instead of using DelaunayTri, that suffers from a memory leak,
	use delaunay. The function is now much faster too. I have been
	able to process a segmentation from a 574x532x1024 image,
	11,824,529 voxels, in 14 min. Thanks to Kwok Chong from Mathworks
	support, for suggesting how to avoid the memory leak.

2011-09-20  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_tiff2nrrd.m (v0.2.1):

	- Fix bug. For 3D volumes, stack is an array of structs. We have
	to assume that all frames in stack have the same resolution and
	offset (only values from frame 1 are read).

2011-09-19  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_tiff2nrrd.m (v0.2.0):

	- Add functionality to read stack obtained from LSM files (the
	struct is different, it has a field "lsm" instead of "info").

2011-09-18  Ramon Casero  <rcasero@gmail.com>

	* ThirdPartyToolbox/TiffreadToolbox/image_background.m:
	* ThirdPartyToolbox/TiffreadToolbox/image_histogram.m:
	* ThirdPartyToolbox/TiffreadToolbox/show_image.m:
	* ThirdPartyToolbox/TiffreadToolbox/show_stack.m:
	* ThirdPartyToolbox/TiffreadToolbox/tiffread.m:

	- Minor edits to the helper headers so that we get a summary in
	README when running update_README.sh.

	* update_README.sh (v0.1.2):

	- Read also toolbox directories within toolbox directory.

	- Remove "./" at the beginning of toolbox name, but don't remove
	any other "/" symbols.

	* Add ThirdPartyToolbox/TiffreadToolbox (v2.7) directory, with files

	image_background.m
	image_histogram.m
	show_image.m
	show_stack.m
	tiffread.m

	Downloaded from

	http://www.cytosim.org/other/

	Licence GPL v3.

	* FileFormatToolbox/scinrrd_im2nrrd.m (v0.1.0):

	- Correct version number.

	- Add properties svn:eol-style native, svn:keywords Rev, Date.

	* Add FileFormatToolbox/scinrrd_tiff2nrrd.m (v0.1.0):

	- Create SCI NRRD struct from TIFF stack.

2011-09-14  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/bwmesh.m (v0.1.2):

	- Invert order in which nrrdaxis is filled, to avoid reallocating
	memory at every step.

	* FiltersToolbox/scinrrd_seg2label_stats.m (v0.8.5):

	- Change output STATS.CylDivergence. Now we give the standard
	deviation of the distance between the each branch surface point,
	and the corresponding point on the surface of the estimated
	cylinder.

	- Fix bug. Make sure that the list of branch voxels is a column
	vector.

2011-09-09  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.4.0) Removing clumps of bifurcation voxels was wrong,
	because in some cases it disconnected branches. Instead, what we
	are doing now is going to each bifurcation clump, getting the
	neighbouring branches, and keeping only the bifurcation voxels
	required to connected them 2 by 2. For that we are using some code
	copied from skeleton_label().

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.8.4) Fix bug. CylDivergence was being measured for all
	voxels, and not only those on the surface.

	- Move the code to mesh the vessel to new function pts_mesh().

	* PointsToolbox/bwmesh.m (v0.1.1):
	* PointsToolbox/pts_mesh.m (v0.1.1):

	- Only compute triboundary is the user requests it.

	* Add PointsToolbox/bwmesh.m (v0.1.0):

	- Tetrahedral volumetric and triangular surface mesh of a binary
	segmentation.

	* Add PointsToolbox/pts_mesh.m (v0.1.0):

	- Tetrahedral volumetric and triangular surface mesh of a cloud of
	points. This is code that was part of scinrrd_seg2label_stats(),
	but as Mikael Wallman was interested, I thought it'd be better to
	have it as an independent function.

2011-09-08  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/MexBaseFilter.hpp (v0.6.2):
	* ItkToolbox/MexBaseFilter.cpp (v0.5.2):

	- Move the code in the constructors from the .hpp to the .cpp
	file.

	- Fix memory leak bug. Add destructor to deallocate any memory
	that the Matlab garbage collector won't free automatically. The
	destructor has to be virtual so that derived classes can add their
	own local memory deallocation steps.

	* ItkToolbox/ItkImFilter.cpp (v0.5.2):

	- Fix memory leak bug. After running all methods in the filter
	object, delete the object. This invokes the destructor, that
	deallocates the memory buffers not passed to Matlab. Without this,
	we had a memory leak in the dandist filter, and potentially in any
	other filter that provides more than 1 output.

	- Mummify output buffers before running the filter. This hasn't
	given any problems, but just in case.

	-  Correct help header of syntax 'dandist'.

	* ItkToolbox/itk_imfilter.m:

	- (v0.4.2) Correct help header of syntax 'dandist'.

2011-09-07  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/labmathmorph.m:

	- (v0.1.0) Mathematical morphology operators on a labelled
	segmentation, one label at a time.

2011-09-06  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.14.0) Add section "correct labelling of bifurcation
	regions". So far, the segmentation volume around a bifurcation
	area got split between all incident branches. However, it makes
	more sense to maintain the integrity of main branches, and make
	secondary branches start from the wall of the main branch, instead
	of from the skeleton bifurcation.

	To control the amount of correction, there's a new input argument,
	CORRECT. A value of 0.0 means no correction, a value of 1.0 means
	that the main branch expands as much as possible.

2011-09-04  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.8.3) Fix bug. If the input image had missing labels, the
	branch index was wrong.

	* FiltersToolbox/skeleton_label.m:

	- (v0.13.2) Use internally a NRRD struct for some operations, as
	this is going to be necessary for the upcoming code to correct
	labelling of bifurcation regions (mostly done, but commented out).

	- Fix bug. 1 voxel branches were considered to be leaf-branches
	always. However, they can be a link between 2 bifurcation
	clumps. Now we have moved the IsLeaf computation to after the
	merging, into its own code block.

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.8.2) Fix bug. Sometimes for small branches the points can be
	colinear, in which case it's not possible to compute a 3D
	triangulation. In that case, we skip to the next branch.

2011-09-02  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.8.1) Fix bug. Small branches can end up with no tetrahedra
	in the triangularion, and in that case, we got an error.

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.3.1) Fix bug, wrong struct field name.

	* FiltersToolbox/skeleton_label.m:

	- (v0.13.1) Fix bug. Branches of length 1 voxel are leaf-branches,
	but because their single voxel will never have degree < 2, they
	were not being considered as leaves.

2011-09-01  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.8.0) Add new output STATS.CylDivergence. This is a distance
	estimate between the surface of the actual branch and the
	estimated cylinder. All operations are performed without rounding,
	so the results are better.

	- Remove Dice's Coefficient and Jaccard's
	Index. Converting warped segmentation coordinates to an image
	produces rounding errors. In addition, pixelation (aliasing) is
	substantial for very thin cylinders. Thus, the measures can be
	quite misleading.

2011-08-30  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.7.4) Fix bug. Dilation and erosion of the segmentation
	turned image must be of only 1 voxel, which is the space available
	at the margins of the image.

2011-08-29  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_index2world.m:

	- (v0.2.0) Add input argument CHOP so that we can deactivate the
	conversion of points outside the image to NaN.

2011-08-24  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.7.3) Computing the degree of each voxel by 3D convolution
	was taking too much memory. Now instead of one 3D convolution, we
	run three 1D convolutions (thanks to linear separability), which
	is faster and doesn't require much memory.

	* FiltersToolbox/skeleton_label.m:

	- (v0.13.0) Add new input argument, SINGLEMERGE. Now, we can
	decide whether merging at each bifurcation clump will be limited
	to only the 2 branches with the best alignment, or whether any two
	branches with good alignment will be merged.

	The reason is that in the pruning function
	scinrrd_skeleton_prune(), spurious branches can be better aligned
	than the main branch. So SINGLEMERGE=false should be used for
	pruning, and SINGLEMERGE=true should be used to label the
	segmentation after pruning.

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.3.1) Remove some unused variables and fix a small bug. When
	a branch had only 1 voxel, the input to a scinrrd_index2world()
	didn't have the expected dimensions.

	- (v0.3.0) Big rewrite of the function. A new step prunes all the
	clumps of voxels. Also, the other two steps (short leaf and
	spurious leaf) are run iteratively until no more branches can be
	pruned. Branches can be merged before pruning.

	- All the code that computed the local radius of a branch for the
	spurious leaf step has been removed (estimation of skeleton
	direction, plane intersection with the volume, etc). Instead, it's
	much faster to just compute the stats for all branches with
	scinrrd_seg2label_stats(), and use the second eigenvalue to
	estimate the major radius of the branch. Instead of comparing it
	to the secondary branch's length, we compare it to the distance
	between the bifurcation and the tip of the leaf, because sometimes
	leaf artifacts are a bit bent and even though they don't protude
	much from the main branch, their length would be large enough to
	prevent pruning.

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.7.2) Fix bug. When I removed (br = find(nrrd.data==I)) to
	make the iterations faster for large images, I didn't realize that
	instead of getting all the branch voxels, we were getting only the
	skeleton. Thus, the estimate of branch dimensions was wrong.

	But we couldn't go back to the previous code, because it's just
	too slow. So the solution is that now we find the indices for each
	label before the loop. This uses more memory, but it should be
	fast enough.

	- I have observed that there's a big peak of memory
	consumption with convn(deg, degbox, 'same'). Currently, rat 024
	needs 6 Gb of free RAM to run, even though the volume is only 600M
	or so. Maybe we'll have to go back to computing the voxel degrees
	with the sparse connection matrix.

2011-08-22  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.7.1) Make cc a mandatory argument. We need it to avoid
	having to do a very expensive search (br = find(nrrd.data==I)) to
	find the voxels in each branch. This was the single most
	computationally expensive step in the function, making each
	iteration take ~1.2 sec for rat 024 (now each iteration takes 0.02
	sec).

	- Add a new input argument STRAIGHT so that the user can decide
	whether branches are straightened or not before computing PCA
	(this used to be done providing cc or not, but now cc is
	mandatory).

	- Use only 5 levels in itk_pstransform('bspline'...), instead of
	6. This makes that step almost 1 order of magnitude faster.

	- Fix some small bugs when the branch had very few voxels and/or
	we could not get 3 valid eigenvalues.

	- (v0.7.0) Instead of using the sparse matrix "d" and vector
	"dict", now we compute the degree of each voxel using a
	convolution. For rat 024 right ventricle, this is 5 times faster
	and uses 70% of the memory.

	* Add FiltersToolbox/scinrrd_crop.m (v0.0.1):

	- Crop an SCI NRRD image or segmentation volume.

2011-08-21  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.12.0) Full rewrite of the function. The function worked, but
	it was too slow to deal with a full resolution rat heart (). Even
	after removing most of the right ventricle cavity, the
	segmentation presented ~20,000 branches. Times to search for
	branch neighbours ranged in the months. Therefore, it was
	necessary a completely new approach.

	The first improvement is identifying clumps of bifurcation
	voxels. Branches are the remaining voxels, without overlap.

	Instead of using struct CC fields, now we use sparse matrices for
	connections between branches and bifurcation clumps, and amongst
	branches.

	Instead of merging branches in pairs, now we concatenate all
	voxels of all branches to be merged, and let Dijkstra's algorithm
	sort them out.

	Instead of allowing any pair of branches with good alignment
	merge, now only two branches can merge in each bifurcation
	branch. This gives more sensible results, as there should be only
	1 main branch from which secondary branches arise at each
	bifurcation. The method to select which pair is the main branch
	can be improved, maybe taking into account the diameter of the
	vessels.

	Instead of using our own function to label matrices from CC
	structs, now we use Matlab's labelmatrix() function.

	Times to process the whole rat heart are now around 4 or 5 min,
	instead of months.

2011-08-17  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/bwregiongrow.cpp (v0.2.4):

	- Fix bug. If TODO was empty, we got a segmentation fault.

2011-08-12  Ramon Casero  <rcasero@gmail.com>

	* release 0.6.0:

	- Big improvement to itk_imfilter().

2011-08-12  Ramon Casero  <rcasero@gmail.com>

	- Big improvement to itk_imfilter(). Before, we were creating an
	itk::Image for the input, and copying there the Matlab input
	buffer. Also, copying the filter outputs to Matlab output
	buffers. But now, we graft the Matlab buffers directly into the
	filter, so no copying is necessary. This saves time, and also
	memory, as no duplicates of the input and outputs are performed.

	In the case of some outputs, copying may be necessary. For
	example, if the filter gives an extra output where each voxel is a
	vector. We cannot return that directly, so we need to process that
	output and copy the result to a Matlab buffer.

	* ItkToolbox/ItkImFilter.cpp (v0.5.1):

	- Fix bug. Filter pointer was being passed by value instead of
	reference, so FilterSelector was instantiating the filter class,
	but then the memory address was not being written to the pointer,
	so runFilter() only saw a NULL pointer, that caused a segfault in
	filter->CheckNumberOfOutputs();

	* ItkToolbox/MexBaseFilter.cpp (v0.5.1):

	- Remove some debug messages that I had forgotten.

	* ItkToolbox/ItkImFilter.cpp (v0.5.0):

	- Big rewrite. Before, we instantiate all input/output voxel type
	combinations for each filter, and the specializing with
	EXCLUDEFILTER() to have empty class definitions for those
	combinations that are not supported.

	Now, we only instantiate those filter/input/output combinations
	that are supported. This is a much better approach.

	Now we use an INVALIDINPUTTYPE() macro to give an error when a
	particular filter doesn't support an input voxel type. This is
	something that was missing from the previous release.

	- Create an enum to have a list of supported filters. Then, we can
	pass those values as template parameters. This allows us to
	compile only those filter/input/output combinations that are
	supported. We only need to check the filter string name once with
	ISFILTER(), and after that, just use the enum value.

	- We no longer need an enum OutVoxelType, as an intermediate
	step. That was silly. We can decide on the output voxel type and
	directly pass it to the runFilter() function.

	* ItkToolbox/MexBaseFilter.hpp (v0.6.1):

	- Delete empty constructor, that is no longer necessary as
	EXCLUDEFILTER() has been deleted too.

	* ItkToolbox/MexTemplateFilter.hpp (v0.2.1):
	* ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.1.7):
	* ItkToolbox/MexDanielssonDistanceMapImageFilter.hpp (v0.4.1):
	* ItkToolbox/MexBinaryThinningImageFilter3D.hpp (v0.2.9):
	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.hpp (v0.2.8):
	* ItkToolbox/MexBinaryErodeImageFilter.hpp (v0.1.3):

	- Delete the EXCLUDEFILTER() macro, as it's no longer
	necessary. Now filters are only instantiated with those
	input/output voxel types that they admit.

2011-08-11  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/MexBaseFilter.hpp (v0.6.0):
	* ItkToolbox/MexBaseFilter.cpp (v0.5.0):

	- Big reimplementation of BaseFilter. Yesterday, we imported the
	Matlab image buffer directly into the filter, to avoid having to
	copy it to an itk::Image (thus duplicating the memory space and
	wasting time in copying).

	Today, we have done something similar but with the filter
	output. Instead of copying the output of the filter to a Matlab
	buffer, we graft the Matlab buffer as the filter output.

	We have renamed many methods so that they better express what they
	do, and grouped some of the code in methods to make them more
	reusable. From

		void ImportMatlabInputToItkImage();
		virtual void FilterSetup();
		virtual void RunFilter();
		virtual void CopyAllFilterOutputsToMatlab();
		void CopyFilterImageOutputToMatlab();

	we have gone to

		void MallocMatlabOutputBuffer(unsigned int idx);
		void GraftMatlabOutputBufferIntoItkFilterOutput(unsigned int idx);
		virtual void CheckNumberOfOutputs();
		void GraftMatlabInputBufferIntoItkImportFilter();
		void FilterBasicSetup();
		void RunFilter();
		void MummifyFilterOutput(unsigned int idx);
		virtual void ExportOtherFilterOutputsToMatlab();


	* ItkToolbox/MexDanielssonDistanceMapImageFilter.cpp (v0.4.0):

	- Part of the code that was used to deal with the second filter output
	now it's part of BaseFilter.

	- Add new methods according to the recoding of BaseFilter.

	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.cpp (v0.2.5):
	* ItkToolbox/MexBinaryErodeImageFilter.cpp (v0.1.2):
	* ItkToolbox/MexBinaryDilateImageFilter.cpp (v0.1.6):

	- Rename methods according to the new names in BaseFilter.

	- Filter inputs no longer set in FilterAdvancedSetup().

	* ItkToolbox/ItkImFilter.cpp (v0.4.5):
	* ItkToolbox/MexDanielssonDistanceMapImageFilter.hpp (v0.4.0):
	* ItkToolbox/MexTemplateFilter.hpp (v0.2.0):
	* ItkToolbox/MexTemplateFilter.cpp (v0.2.0):
	* ItkToolbox/MexBinaryThinningImageFilter3D.hpp (v0.2.8):
	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.hpp (v0.2.7):
	* ItkToolbox/MexBinaryErodeImageFilter.hpp (v0.1.2):

	- Rename methods according to the new names in BaseFilter.

	* ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.1.6):

	- Add missing declarations of redefined virtual
	methods. Otherwise, if they are not declared, the BaseFilter
	version of the method is run, instead of the overloaded one.

2011-06-11  Ramon Casero  <rcasero@gmail.com>

	* release 0.5.0:

	- Now itk_imfilter() supports passing parameters to filters. This
	last version hasn't been tested with Windows yet.

2011-08-10  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/MexBaseFilter.cpp (v0.4.1):

	- Add a detailed explanation of how the matrix with the image is
	transposed when passed from Matlab to ITK, and why it doesn't
	matter.

	* ItkToolbox/MexBinaryErodeImageFilter.hpp (v0.1.1):
	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.hpp (0.2.6):
	* ItkToolbox/MexBinaryThinningImageFilter3D.hpp (v0.2.7):
	* ItkToolbox/MexTemplateFilter.hpp (v0.1.2):
	* ItkToolbox/MexDanielssonDistanceMapImageFilter.hpp (v0.3.5):
	* ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.1.5):

	- Rename CopyMatlabInputToItkImage() as
	ImportMatlabInputToItkImage(), because we no longer copy
	(duplicate) the image data.

	* ItkToolbox/MexBinaryDilateImageFilter.cpp (v0.1.5):
	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.cpp (v0.2.5):
	* ItkToolbox/MexBinaryErodeImageFilter.cpp (v0.1.1):

	- Instead of having a variable "image" in BaseFilter, now we have
	"importFilter->GetOutput()".

	* ItkToolbox/ItkImFilter.cpp (v0.4.4):

	- Instead of having a variable "image" in BaseFilter, now we have
	"importFilter->GetOutput()".

	- Rename CopyMatlabInputToItkImage() as
	ImportMatlabInputToItkImage(), because we no longer copy
	(duplicate) the image data.

	* ItkToolbox/MexBaseFilter.cpp (v0.4.0):
	* ItkToolbox/MexBaseFilter.hpp (v0.5.0):

	- Instead of copying the image data from the C-type array passed
	by Matlab to an itk::Image (hence duplicating the image in
	memory), we now use itk::ImportImageFilter to directly pass the
	array pointer to the ITK filter. This way, there's no need to
	duplicate the image.

	- Instead of having a variable "image" in BaseFilter, now we have
	"importFilter->GetOutput()".

	- Rename CopyMatlabInputToItkImage() as
	ImportMatlabInputToItkImage(), because we no longer copy
	(duplicate) the image data.

	* release 0.5.0:

	- Now itk_imfilter() supports passing parameters to filters. This
	last version hasn't been tested with Windows yet.

	* ItkToolbox/itk_imfilter.m (v0.4.1):

	- Add binary erosion to help header.

2011-08-09  Ramon Casero  <rcasero@gmail.com>

	* add_itk_imfilter_template.sh (v0.2.1):

	- I had forgotten that for each new filter, an entry in
	CMakeLists.txt has to be added.

	* ItkToolbox/CMakeLists.txt (v0.4.1):
	* ItkToolbox/ItkImFilter.cpp (v0.4.3):

	- Added support for filters:

		itkBinaryErodeImageFilter.h

	* ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.1.4),
	ItkToolbox/MexBinaryDilateImageFilter.cpp (v0.1.4):

	- Some minor edits to make it more like the corresponding Erode
	files.

	* Add ItkToolbox/MexBinaryErodeImageFilter.hpp,
	ItkToolbox/MexBinaryErodeImageFilter.cpp:

	- Copied from MexTemplateFilter.* to add support for
	itkBinaryErodeImageFilter.h to itk_imfilter()

	* ItkToolbox/MexTemplateFilter.cpp (v0.1.2):

	- Comment out the definitions of the virtual functions, as by
	default their declaration is also commented out in the .hpp file.

	* add_itk_imfilter_template.sh (v0.2.0):

	- Automatically edit the template files created for the new
	filter, ChangeLog and ItkImFilter.cpp, so that the user has a good
	starting point to add support for the new filter. Some #error
	directives have been added at points where the user should look
	and make manual changes before compiling the program.

	* ItkToolbox/MexTemplateFilter.hpp (v0.1.1):
	* ItkToolbox/MexTemplateFilter.cpp (v0.1.1):

	- Add precompiler errors to force the user look there when he
	tries to compile after automatically adding a new filter with
	add_itk_imfilter_template.sh.

	* ItkToolbox/ItkImFilter.cpp (v0.4.2):

	- Add comments that can be used by script
	add_itk_imfilter_template.sh to recognise where to insert new
	code.

	* update_README.sh (v0.1.1):

	- Add copyright header and set svn properties.

	* Add add_itk_imfilter_template.sh (v0.1.0):

	- Script to automatically create templates and modify
	ItkImFilter.cpp to add a new ITK filter to itk_imfilter(). This
	script only creates the basic skeleton. Specific parameters,
	methods, etc for the filter need to be added by hand.

	- This first version only copies the templates from
	MexTemplateFilter.*, and updates the ChangeLog, but doesn't modify
	the code to tailor it to the new filter.

	* Add ItkToolbox/MexTemplateFilter.hpp,
	ItkToolbox/MexTemplateFilter.cpp:

	- Template files to help add support for new filters to
	itk_imfilter().

	* ItkToolbox/ItkImFilter.cpp (v0.4.1):

	- Use shortname and longname of every filter instead of hardcoded
	strings. Add macro ISFILTER() to make the code cleaner.

	- Method CopyMatlabInputsToItkImages() has been renamed as
	CopyMatlabInputToItkImage().

	* ItkToolbox/MexBaseFilter.hpp (v0.4.2):
	* ItkToolbox/MexBaseFilter.cpp (v0.3.8):

	- Rename method CopyMatlabInputsToItkImages() as
	CopyMatlabInputToItkImage(), as there can be only 1 image at the
	input. Also, this method should not be virtual.

	- Add shortname and longname strings. BaseFilter cannot be invoked
	by the user, but the definitions are necessary when we use
	EXCLUDEFILTER().

	* ItkToolbox/MexBinaryDilateImageFilter.cpp (v0.1.3):
	* ItkToolbox/MexDanielssonDistanceMapImageFilter.cpp (v0.3.4):
	* ItkToolbox/MexBinaryThinningImageFilter3D.cpp (v0.1.4):
	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.cpp (v0.2.4):

	- Add shortname and longname strings to every filter, so that we
	don't need to hardcode in ItkImFilter.cpp the string that a user
	can type to invoke a filter.

	* ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.1.3):
	* ItkToolbox/MexDanielssonDistanceMapImageFilter.hpp (v0.3.4):
	* ItkToolbox/MexBinaryThinningImageFilter3D.hpp (v0.2.6):
	* ItkToolbox/MexSignedMaurerDistanceMapImageFilter.hpp (v0.2.5):

	- Add shortname and longname strings to every filter, so that we
	don't need to hardcode in ItkImFilter.cpp the string that a user
	can type to invoke a filter.

	- Fix bug. In EXCLUDEFILTER(), wrong method name, and missing method.

2011-08-08  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/MexBinaryThinningImageFilter3D.cpp (v0.1.3),
	ItkToolbox/CMakeLists.txt (v0.4.0),
	ItkToolbox/MexDanielssonDistanceMapImageFilter.cpp (v0.3.3),
	ItkToolbox/MexBinaryDilateImageFilter.cpp (v0.0.2),
	ItkToolbox/MexBaseFilter.cpp (v0.3.7),
	ItkToolbox/MexSignedMaurerDistanceMapImageFilter.cpp (v0.2.3),
	ItkToolbox/MexSignedMaurerDistanceMapImageFilter.hpp (v0.2.4),
	ItkToolbox/MexBinaryThinningImageFilter3D.hpp (v0.2.5),
	ItkToolbox/MexDanielssonDistanceMapImageFilter.hpp (v0.3.3),
	ItkToolbox/MexBinaryDilateImageFilter.hpp (v0.0.2),
	ItkToolbox/MexBaseFilter.hpp (v0.4.1):

	- Rename all filters as Mex*, where * is the full ITK name,
	instead of using a short name that I made up. This way, it'll be
	easier to semi-automate the process of adding new filters.

2011-08-07  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/CMakeLists.txt:

	- Add BinaryDilateFilter.cpp to project itk_imfilter().

	* ItkToolbox/GerardusCommon.hpp:

	- (v0.3.0) Add functions to test templates from BaseFilter.hpp.

	* ItkToolbox/BaseFilter.hpp:

	- (v0.4.0) Add support for user-provided parameters for
	filters. Number of parameters and list of parameters is kept here,
	and can be accessed by any filter derived class. Also, write a new
	member function getScalarParamValue() to read scalar parameters
	from Matlab (for the moment, only scalar parameters are supported,
	and not vectors of parameters).

	- Move functions to test templates to GerardusCommon.hpp.

	* ItkToolbox/itk_imfilter.m:

	- (v0.4.0) Correct help header to make it easier to write the
	documentation for filters with user-provided parameters.

	- Add syntax for 'bwdilate'.

	* ItkToolbox/ItkImFilter.cpp (v0.4.0):

	- Add support for itk::BinaryDilateImageFilter.

	- Make 2 the minimum number of input arguments, not the exact
	number. This way, the user can provide input parameters for
	specific filters.

	- Fix bug introduced in last revision. We were reading the image
	from argIn[1], which doesn't work if the input data is a NRRD
	struct.

	- Pedantic fix. Use mxLogical instead of bool (although at least
	for linux they are the same type).

	* Add ItkToolbox/BinaryDilateFilter.cpp,
	ItkToolbox/BinaryDilateFilter.hpp:

	- (v0.1.0) Code that is specific to
	itk::BinaryDilateImageFilter. Support for radius and foreground
	value arguments. Structuring element is a ball.

	* ItkToolbox/SignedMaurerFilter.cpp (v0.2.2),
	ItkToolbox/SignedMaurerFilter.hpp (v0.2.3),
	ItkToolbox/DanielssonFilter.cpp (v0.3.2),
	ItkToolbox/DanielssonFilter.hpp (v0.3.2),
	ItkToolbox/BaseFilter.cpp (v0.3.6), ItkToolbox/ThinningFilter.hpp
	(v0.2.4):

	- Pedantic fix. Use mxLogical instead of bool (although at least
	for linux they are the same type).

2011-08-06  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/itk_imfilter.m

	- (v0.3.2) Corrected function declaration syntax, so that when the
	MEX file doesn't exit, it gives the corresponding error instead of
	"Too many output arguments".

2011-08-05  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkImFilter.cpp:

	- (v0.3.12) Now the Nrrd volume is parse in
	parseInputTypeToTemplate() instead of main(), which makes more
	sense. We no longer pass the filter name as an argument to the
	parsing functions, because now we pass all the input
	arguments. This way we have prepared the field so that we can pass
	the input arguments to the filter parser, and this was pass filter
	parameters.

	* ItkToolbox/BaseFilter.cpp:

	- (v0.3.5) Fix bug. In ITK, "SetIndex" sets the index coordinates
	of the first voxel of the region, not the real world
	coordinates. In our case, we always want the region to be the
	whole image, so we make it start at (0, 0, 0).

	Also, now we do "SetOrigin" on the image (the real world
	coordinates of the centre of the first voxel), computed from the
	"min" value of the NRRD volume (real world coordinates of the left
	edge of the first voxel).

	* ItkToolbox/NrrdImage.hpp:

	- (v0.2.3) Add comments to make more clear what every function
	returns. Specially that "min" means the left edge of the first
	voxel.

	* ItkToolbox/NrrdImage.cpp:

	- (v0.1.3) Fix bug. The NRRD format considers "min" to be the left
	edge of the first voxel, not the centre. On the other hand, ITK
	considers "origin" to be the centre of the voxel.

	* ItkToolbox/BaseFilter.hpp (v0.3.3),
	ItkToolbox/ThinningFilter.hpp (v0.2.3),
	ItkToolbox/DanielssonFilter.hpp (v0.3.1),
	ItkToolbox/SignedMaurerFilter.hpp (v0.2.2),
	ItkToolbox/NrrdImage.hpp(v0.2.2):

	- Pass NRRD image by reference in the parse functions and filters
	instead of value, so that it doesn't need to be duplicated. Also,
	protect it from changes by using "const". This, in turn, requires
	that the functions in Nrrd are declared as const, because you
	cannot use a non-const member function on a const object.

	* ItkToolbox/ItkImFilter.cpp:

	- (v0.3.11) Pass NRRD image by reference in the parse functions
	and filters instead of value, so that it doesn't need to be
	duplicated. Also, protect it from changes by using "const".

	- Rename parseFilterToTemplate() as parseFilterTypeAndRun() to
	better reflect what it does.

2011-08-03  Ramon Casero  <rcasero@gmail.com>

	 * ItkToolbox/itk_imfilter:

	- (v0.3.1) Update help header.

2011-07-31  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.6.3) Fix bug. We were converting a potentially large
	distance matrix from sparse to full, and this made it run out of
	memory and run very slow.

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.2.5) Fix bug. Error when trying to extract length from an
	empty branch parameterisation.

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.10) Plot junction point in DEBUG block. Reword paragraph
	of help header.

	- (v0.11.9) Fix bug. Old field names for angle values hadn't been
	removed for branches that are loops.

2011-07-30  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.6.2) Fix bug. When computing distance from the origin to the
	ellipse, we were solving a linear system (/) instead of dividing
	(./).

	- Make length of box include whole voxels, instead of just from
	centre of first voxel to centre of last voxel.

2011-07-29  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.6.1) Add input argument P to use a smoothing cubic spline on
	the skeleton before straightening the branch.

	- (v0.6.0) Add measures of vesselness (stats.dice and
	stats.jaccard). It's hard to tell whether a merged branch is a
	vessel or not just from the eigenvalues. For example, parts of the
	cavity can be bumpy, but long and thin. In order to evaluate
	whether a branch looks like a vessel, we compare it to a cylinder
	with the dimensions given by the eigenvalues. If the overlap is
	large, then the cylindrical model is correct and we can say that
	the branch is a vessel.

2011-07-28  Ramon Casero  <rcasero@gmail.com>

	* Add FileFormatToolbox/scinrrd_im2nrrd.m:

	(v0.0.1) Create SCI NRRD struct from Matlab data.

2011-07-24  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.5.3) Fix bug. Output stats.islandlocked is given as a double
	instead of a bool.

2011-07-22  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.8) Fix bug. If two portions of a branch got into
	different buckets, then the buckets could not be merged between
	them.

	Also, repeat the code that searches for neighbours after merging,
	because scinrrd_skeleton_prune() expects fields
	cc2.BranchNeighboursLeft and cc2.BranchNeighboursRight.

	- (v0.11.7) Major rewrite of the function. I have removed many
	unnecessary loops and steps, to make the function faster and
	tidier. The code to compute the angle between two concatenated
	branches has been moved to an individual function. Also, make the
	output consistent so that you get the same struct whether you
	merge branches or not.

2011-07-21  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.6) Fix bug. cc.BifurcationPixelIdx had inconsistent
	meanings within the function. Now there's a new
	cc.IsolatedBifurcationPixelIdx list that contains all voxels that
	are only surrounded by other bifurcation voxels. These voxels
	don't belong to any branch, but they belong to the skeleton.

	Merge some redundant loops.

2011-07-20  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.5) Fix bug reported by Pablo Lamata. Branches of length 1
	were being ignored and cc.Degree was not computed for them. Also,
	they were given cc.Length NaN instead of 0, and they were not
	considered leafs. This caused errors in scinrrd_skeleton_prune().

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.2.4) Make 2nd input argument non-mandatory.

	- (v0.2.3) skeleton_label() does no longer produce fields
	cc.BranchNeighbours and cc.BranchLength, so replace their use in
	this function.

2011-07-19  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.4) Fix bug. When merging, only neighbours on the left
	were taken into account. Now both neighbours on the left and right
	are taken into account.

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.2.5) Move CAST2MWSIZE() macro to GeradusCommon.hpp.

	* ItkToolbox/BaseFilter.cpp:

	- (v0.3.4) Move CAST2MWSIZE() macro to GeradusCommon.hpp.

	* ItkToolbox/GerardusCommon.hpp:

	- (v0.2.1) Add CAST2MWSIZE() macro. This header is common for all
	Gerardus' Matlab code, and so it's the right place for it.

	* ItkToolbox/BaseFilter.hpp:

	- (v0.3.2) Fix bug. Pablo Lamata noticed that trying to run the
	filter with 'skel' produced a segfault. I introduced this bug in
	r473, when I removed the constructors definition from
	BaseFilter.cpp, because nothing was done, and put just a {;} in
	the constructor declaration in BaseFilter.hpp. I didn't notice
	that the constructor had an initialization list. As I didn't move
	the initialization list from the definition to the declaration,
	the pointers were not initialized, and when the data was accessed,
	a segfault resulted.

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.3) Fix bug. Make sure that list of voxels is a column
	vector, to avoid dimensions error after concatenation.

2011-07-19 Yves <ivmartel@gmail.com>

	* ItkToolbox/BaseFilter.cpp (v0.3.3),
	ItkToolbox/ItkPSTransform.cpp (v0.2.4):

	- Added the CAST2MWSIZE macro to use the proper data type for
	specific machines (specifically Microsoft Windows 64bits).

2011-07-18  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.2) In the merging process, first check whether there is
	no neighbour or the alignment is larger than the angle threshold,
	and if so, skip the branch. Otherwise, the branch will be
	processed.

2011-07-17  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.1) Fix bug. Change the way the merging was performed. It
	was possible for branches to merge forming a "T" shape, depending
	on the values of alpha. For example, branch A is closest to B, so
	they merge. B is closest to C, and they merge, forming a wire. But
	now a secondary branch D is closest to B, and the angle is small
	enough, so it merges forming a "T" shape. With the new method, A
	can only merge with B if B wants to merge with A. Because each
	branch can only merge with 1 branch on each side, this guarantees
	that there are no "T" shapes.

2011-07-14  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.11.0) Major rewrite of the function, although the
	functionality is roughly the same. The function was not working
	well when it had to merge branches, and the labelling of the whole
	segmentation was not great.

	A problem was dealing with bifurcation voxels and neighbour
	branches. The correspondence between them is complicated. Now,
	each branch is terminated by a bifurcation voxel or a leaf voxel.
	Bifurcation voxels surrounded only by bifurcation voxels are not
	added to any branch, but they are used to find branch neighbours.

	Another problem was that two branches that were continuation of
	each other wouldn't necessarily be merged, depending on how
	neighbours were processed. Now,  "left" and "right" neighbours are
	considered explicitly, and then only the closest ones are merged.

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.2.3) Fix bug for Windows 64 bit. Yves Martelli noted a
	compilation error for Windows 64 bit, as mwSize translates to
	size_t, and Visual Studio translates this to "unsigned __int64", a
	non-ASCI type. When it tries to then compile
	itk::FixedArray::operator[](unsigned __int64), it cannot find a
	definition.

	Following Jonathan Cooper's advice, I have added an #ifdef _win64
	block to perform a static cast of the mwSize variables only when
	compiling for Windows 64 bit.

2011-07-13  Ramon Casero  <rcasero@gmail.com>

	* FindMatlab.cmake:

	- (v0.2.2) Extend to Windows 64 bit. Yves Martelli pointed out
	that for Windows 64 bit, Matlab files live in a win64/ instead of
	win32/ directory.

2011-07-10  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.10.1) Fix bug. Error when sk and im were uint8, but sk had
	only 1 label. The problem occured when the class of sk was decided
	based on the number of objects. But we also need to take into
	account whether we are going to need a TODO label if we have to
	label im.

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.5.1) Fix bug. Procrustes alignment was being run with
	Scaling=true, but we need the alignment to be rigid (no scaling),
	so the dimensions of the vessel don't change.

	- (v0.5.1) Replace locally rigid transform by multilevel B-splines
	transform for the non-rigid warp. The B-spline seems to be better
	in that it doesn't introduce any twisting in the vessel.

2011-07-09  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.2.2) Windows doesn't provide function round(x), so replace
	by floor(x+0.5).

2011-07-08  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_intersect_plane.m:

	- (v0.3.2) Fix bug pointed out by Pablo Lamata, swap position of x
	and y in linear interpolation.

	* PointsToolbox/pts_local_rigid.m:

	- (v0.1.3) In fact, the 3D straightening constrain seems to limit
	twisting, and no extra 2D rotation is necessary. Now we can also
	use a B-spline warp in Gerardus (itk_pstransform), so we are
	leaving the basic 3D method and we are not going to do further
	work on this function.

	* test/test_itk_pstransform.m:

	- (v0.1.1) Add Test 2, 3D bent vessel.

	* Add ItkToolbox/itk_pstransform.m:

	- Add header help for the mex function, so that it's accessible
	from Matlab.

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.2.1) Fix bug. The parameterization cannot be the x
	points. They need to be translated and scaled so that they fit
	within a [0, 1] x [0, 1] x [0, 1] bounding box.

2011-07-07  Ramon Casero  <rcasero@gmail.com>

	* Add test/ps-bent-vessel-3d-3.mat, with the coordinates of the
	voxels of a 3D bent vessel segmentation, its skeleton, and a
	parameterization of the skeleton.

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.2.0) Add warping with a B-spline, using
	itk::BSplineScatteredDataPointSetToImageFilter.

	* ItkToolbox/ItkImFilter.cpp:

	- (v0.3.10) Remove paragraph from help header about MATLAB_ROOT
	(no longer necessary to set the variables thanks to the modified
	FindMatlab.cmake).

	* ItkToolbox/DanielssonFilter.cpp:

	- (v0.3.1) mxGetPr should only be used for arrays of type double,
	so replace it by mxGetData.

	* ItkToolbox/BaseFilter.cpp:

	- (v0.3.2) mxGetPr should only be used for arrays of type double,
	so replace it by mxGetData.

2011-07-06  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.1.1) Add support for 2D points, so that not only 3D points
	are accepted.

	* Add test/nrrd-bent-vessel-3d* files with the segmentation and
	skeleton of 2 bent vessels in 3D.

2011-07-05  Ramon Casero  <rcasero@gmail.com>

	* Add test/test_itk_pstransform.m:

	- Script to test itk_pstransform().

	* Delete ItkToolbox/ItkKernelTransform.cpp:

	- Its functionality is now part of ItkPSTransform.cpp.

	* ItkToolbox/CMakeLists.txt:

	- Add compilation and installation of itk_pstransform.

	- Remove itk_kernel_transform, that is now part of
	itk_pstransform.

	* ItkToolbox/ItkPSTransform.cpp:

	- (v0.1.0) Basic code to replicate the functionality of
	ItkKernelKernelTransform.cpp, but with the infrastructure to make
	it possible to add the bpline warping method. As an improvement
	over ItkKernelKernelTransform.cpp, now it's possible to give the
	point coordinates as a double or a single in Matlab.

	* ItkToolbox/BaseFilter.hpp:

	- (v0.3.1) Rename FilterType as BaseFilterType so that it's
	clearer and doesn't clash with the derived classes.

	- Empty constructor now goes in the header.

	- Regroup protected members.

	* ItkToolbox/BaseFilter.cpp:

	- (v0.3.1) Remove constructor's code, as it's empty and can go in
	the header.

2011-07-04  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/CMakeLists.txt:

	- ItkToolbox/ArgumentParsers.cpp has been deleted.

	* Delete ItkToolbox/ArgumentParsers.cpp,
	ItkToolbox/ArgumentParsers.hpp:

	- Move all the code to ItkImFilter.cpp.

	- The parsers are not going to be general functions, but specific
	to the mexFunction() calling them. In addition, it makes the code
	more readable if we have all the pipeline from input argument
	parsing to filter running in the ItkImFilter.cpp file.

	* ItkToolbox/ArgumentParsers.cpp, ItkToolbox/ArgumentParsers.hpp:

	- (v0.3.0) Reorder input arguments in the parsers, so that they
	reflect the order in which they are processed: input image, output
	images, filter name.

	* ItkToolbox/ItkImFilter.cpp:

	- (v0.3.9) Paste all the code that used to be in
	ItkToolbox/ArgumentParsers.cpp.

	- (v0.3.8) Reorder input arguments in ArgumentParsers.hpp.

2011-06-19  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkKernelTransform.cpp:

	- (v0.1.1) Fix bug. It was not checked that data had 3 columns.

2011-06-17  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/pts_local_rigid.m:

	- (v0.1.2) Although I thought that the 3D rotation constraint
	prevented twisting, it didn't. This new method follows the 3D
	rotation by a 2D rotation around the x-axis to limit a bit the
	twisting, but the results are not great yet.

2011-06-11  Ramon Casero  <rcasero@gmail.com>

	* release 0.4.0

	- Now the MEX ITK functions itk_imfilter(),
	itk_kernel_transform(), and the filter bwregiongrow() compile and
	run under Windows XP 32-bit too. (Built with CMake 2.8 and Visual
	Studio 10).

2011-06-11  Ramon Casero  <rcasero@gmail.com>

	- Now the MEX ITK functions itk_imfilter(),
	itk_kernel_transform(), and the filter bwregiongrow() compile and
	run under Windows XP 32-bit too. (Built with CMake 2.8 and Visual
	Studio 10).

	* MatlabMakeMacros.cmake:

	- Don't link to the m library in Windows, as it's not available.

	* ItkToolbox/ThinningFilter.hpp:

	- (v0.2.2) Don't instantiate this filter for bool, because the
	compiler broke in Windows.

	- Silly mistake of using "#import" instead of "#include".

	* ItkToolbox/ThinningFilter.cpp:

	- (v0.1.2) Don't instantiate this filter for bool. For some
	reason, the concept check passed in Linux but not in Windows.

	* ItkToolbox/NrrdImage.hpp:

	- (v0.2.1) Return distances and minimal values as double instead
	of integer.

	* ItkToolbox/NrrdImage.cpp:

	- (v0.1.2) Return distance as a double instead of an integer
	NrrdImage::maxVoxDistance().

	* ItkToolbox/GerardusCommon.cpp:

	- (v0.3.1) Correct some type casting that Windows doesn't like.

	- Don't use function div() for integer division, because it's
	incompatible with Windows. Use / (division) and % (reminder)
	instead.

	* ItkToolbox/ArgumentParsers.hpp, tkToolbox/BaseFilter.cpp,
	ItkToolbox/BaseFilter.hpp, ItkToolbox/DanielssonFilter.cpp,
	ItkToolbox/DanielssonFilter.hpp, ItkToolbox/GerardusCommon.hpp,
	ItkToolbox/SignedMaurerFilter.cpp, ItkToolbox/SignedMaurerFilter.hpp:

	- (v0.2.1) Silly mistake of using "#import" instead of "#include".

	* ItkToolbox/ArgumentParsers.cpp:

	- (v0.2.2) Use log()/log(2.0) instead of log2(), because Windows
	doesn't provide the latter.

	- Silly mistake of using "#import" instead of "#include".

	* FiltersToolbox/CMakeLists.txt, ItkToolbox/CMakeLists.txt:

	- INSTALL() needs different arguments for Windows and
	Linux. Windows DLLs are ARCHIVE, Linux shared objects are LIBRARY.

	* FiltersToolbox/bwregiongrow.cpp:

	- (v0.2.3) Correct some type casting that Windows doesn't like.

	- Don't use function div() for integer division, because it's
	incompatible with Windows. Use / (division) and % (reminder)
	instead.

2011-06-10  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/CMakeLists.txt:

	- Add copyright notice.

	* CMakeLists.txt:

	- Matlab 2010b is compatible with g++ 4.5.2, which is the version
	available in the current Ubuntu Natty, so we can comment out the
	lines forcing g++-3.4.

	- With the new FindMatlab.cmake, there's no longer need to
	provided MATLAB_ROOT.

	* FindMatlab.cmake:

	- (v0.2.1) Be more precise with the directory where mex.h is.

	- (v0.2.0) Major rewrite of how the MEX libraries and include
	directory are found in non-Windows systems. Now we are using shell
	commands, e.g. "find". The original FindMatlab.cmake relied on
	some hard-coded paths that have been removed.

	* ItkToolbox/CMakeLists.txt, FiltersToolbox/CMakeLists.txt:

	- Conditional to avoid compilation flags that should not be used
	for Windows.

	- Windows requires that ARCHIVE is given as a target for INSTALL
	because it treats static libraries as ARCHIVE.

	* FindMatlab.cmake:

	- Major rewrite of how the MEX libraries are found in Windows.

2011-06-09  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_intersect_plane.m:

	- (v0.3.2) Edit helper header to make clear that gx, gy, gz
	correspond to the coordinates of where the NRRD volume was
	actually sampled to obtain IM. Hence, for INTERP='nn' if you plot
	the plane, it will in general look a bit "jagged" instead of flat.

	- Thanks to Pablo Lamata for pointing out that this feature was
	not clear in the help header.

	* Add FindMatlab.cmake:

	- To make a derivative work of file FindMatlab.cmake released with
	CMake v2.8, because the original seems to be a bit outdated and
	doesn't work with my Windows XP and Visual Studio 10
	install. (Note that the original file does work for Ubuntu Natty)

2011-06-08  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.5.0) Remove CC.dbif. The Maurer distance is quite misleading
	if the vessel's cross section is very elliptical.

	* FiltersToolbox/skeleton_label.m:

	- (v0.10.0) Add merging of neighbouring branches that are a
	continuation of each other. The merging is controlled by new input
	arguments alphamax, p.

2011-06-06  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.4.2) CC.BifurcationPixelIdx has changed from vector to
	vector of cells.

	* FiltersToolbox/skeleton_label.m:

	- (v0.9.4) Get bifurcation point indices for all types of
	branches, not only leaves.

2011-06-03  Ramon Casero  <rcasero@gmail.com>

	* Add subversion property "svn:eol-style native" to all text
	files, so that people working with Windows will get the correct
	end of line characters.

	* FiltersToolbox/scinrrd_intersect_plane.m:

	- (v0.3.1) Tidy up code to match Gerardus coding guidelines.

	- (v0.3.0) Patch submitted by Pablo Lamata. Add input argument for
	interpolation type. Before, interpolation was performed by finding
	the nearest voxel to the sampling point (more approrpiate for
	binary segmentations). Now, it's also possible to select linear
	and spline interpolation, which is more appropriate for gray scale
	images.

2011-06-01  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.4.1) Fix bug. The segment cannot be straightened if the
	skeleton doesn't have at least 3 voxels.

2011-05-31  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.2.2) Pruning was not always working great. Before,
	bifurcation voxels were always preserved, and this created
	problems with 1-voxel branches sometimes appearing on the sides of
	main branches. In the last version, bifurcation voxels were always
	removed, and then all non-pruned branches were regenerated in the
	segmentation. But in some cases, this did not regenerate some
	bifurcation voxels, and the skeleton became disconnected. This
	latest revision addresses both problem. Now bifurcation voxels are
	only deleted if they don't disconnect the skeleton.

	* FiltersToolbox/skeleton_label.m:

	- (v0.9.3) When looking for neighbour branches, skip bifurcation
	voxels that haven't been labelled.

	- (v0.9.2) Fix bug. Wrong number of labels was used to compute the
	data type necessary to contain all labels.

2011-05-27  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.2.1) Fix bug. Wrong variable name.

	- (v0.2.0) Add code to prune spurious branches that are roughly as
	long as the local radius of the main branch they are attached to.

2011-05-26  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_skeleton_prune.m:

	- (v0.1.1) We were removing bifurcation voxels unwillingly. Now
	instead of clearing the segmentation and adding the good branches,
	we prunce the very short branches, but keeping the bifurcation
	voxels.

	* Rename FiltersToolbox/skeleton_prune.m as
	FiltersToolbox/scinrrd_skeleton_prune.m.

	* Add FiltersToolbox/skeleton_prune.m:

	- (v0.1.0) Prune branches in a segmentation's skeletonization.

	* FiltersToolbox/skeleton_label.m:

	- (v0.9.1) Fix bug. First we need to distribute the bifurcation
	points to their corresponding branches. Then we can loop to find
	connected branches.

2011-05-25  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.9.0) Add output arguments cc.BranchNeighbours.

	* FiltersToolbox/scinrrd_intersect_plane.m:

	- (v0.2.1) Add midx as output argument.

	- (v0.2.0) Complete rewrite. Now we can use any plane to intersect
	the image volume, from horizontal to vertical.

2011-05-24  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.4.0) Add output arguments stats.nvox and stats.vol.

	- (v0.3.3) For the case when the branch gets straightened, order
	the eigenvalues so that the first one is along the skeleton.

2011-05-23  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.8.0) Add output argument cc.Degree.

2011-05-20  Ramon Casero  <rcasero@gmail.com>

	* release v0.4.0

	- Important refactorization of the itk_imfilter architecture, that
	makes maintaining, compiling and extending the code much
	easier. It's also possible to extract more than one output from
	each filter.

	* ItkToolbox/SignedMaurerFilter.cpp:

	- (v0.2.1) Filter types are defined in the base header file, not
	here. Also, to avoid problems in the future, when we refer to a
	FilterType we specify which one,
	e.g. SignedMaurerFilter<InVoxelType,OutVoxelType>::FilterType.

	* ItkToolbox/BaseFilter.cpp, ItkToolbox/BaseFilter.hpp:

	- (v0.3.0) Move code that returns an empty output for empty input
	from the constructor to CopyFilterImageOutputToMatlab(). This is
	the right place for it to be.

	* ItkToolbox/DanielssonFilter.hpp, ItkToolbox/DanielssonFilter.cpp:

	- (v0.3.0) Substantial change. Now filters can output more than
	one image. As a proof of concept, I have modified the
	DanielssonFilter to output not only the distance map, but also an
	array of the same size as the image with the linear index of the
	closest object voxel to each image voxel. This is a reformatting
	of the output provided by
	itk::DanielssonDistanceMapImageFilter::GetVectorDistanceMap().

	* ItkToolbox/SignedMaurerFilter.hpp,
	ItkToolbox/ArgumentParsers.cpp, ItkToolbox/ThinningFilter.hpp:

	- (v0.2.1) Fix bug. Method had the wrong name.

	* ItkToolbox/CMakeLists.txt:

	- Add GerardusCommon.cpp to the itk_imfilter project.

	* ItkToolbox/GerardusCommon.hpp, ItkToolbox/GerardusCommon.cpp:

	- (v0.3.0) Add ind2sub_itkOffset() so that we can have an
	itk::Offset<3> at the output. Note that it's not possible to
	overload functions on the return value, so the function needs to
	have a different name.

	- (v0.2.0) Add sub2ind() overloaded so that it can take as input
	argument itk::Offset<3>.

	* Add ItkToolbox/GerardusCommon.hpp,
	ItkToolbox/GerardusCommon.cpp:

	- Miscellaneous functions of general use. Functions to convert
	between linear indices and r, c, s indices: sub2ind(), ind2sub().

	* ItkToolbox/SignedMaurerFilter.hpp,
	ItkToolbox/DanielssonFilter.hpp, ItkToolbox/NrrdImage.hpp,
	ItkToolbox/BaseFilter.cpp, ItkToolbox/ArgumentParsers.cpp,
	ItkToolbox/BaseFilter.hpp, ItkToolbox/ArgumentParsers.hpp,
	ItkToolbox/ThinningFilter.hpp, ItkToolbox/SignedMaurerFilter.cpp:

	- (v0.2.0) Big change in architecture. BaseFilter declares the
	filter variable as an ImageToImageFilter, but then it's the
	responsability of each derived filter class to instantiate it in
	its constructor.

	- BaseFilter declares several methods that contain the code to
	load the image, filter it and pass the output to Matlab for a
	plain filter. These methods are virtual, so thanks to polymorphism
	we can override them in the derived filter classes if the filter
	has any special requirements or features.

	- Big thanks to Joe Pitt-Francis, Miguel Bernabeu and Raf Bordas
	for their help and advice that made this architecture change
	possible.

2011-05-19  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkKernelTransform.cpp:

	- Add svn:keywords Rev, Date.

	* ItkToolbox/SignedMaurerFilter.hpp,
	ItkToolbox/SignedMaurerFilter.cpp,
	ItkToolbox/DanielssonFilter.hpp, ItkToolbox/DanielssonFilter.cpp,
	ItkToolbox/NrrdImage.hpp, ItkToolbox/NrrdImage.cpp,
	ItkToolbox/BaseFilter.hpp, ItkToolbox/BaseFilter.cpp,
	ItkToolbox/ThinningFilter.hpp, ItkToolbox/ThinningFilter.cpp:

	- Move parser functions to new files.

	- Create member functions for BaseFilter to split the filtering in
	different stages. These functions are virtual, so they can be
	redifined by derived classes to introduce functionality specific
	to each fiter.

	- Remove function SetSpecificParameters(), because now its
	functionality will be part of FilterSetup().

	* Add ItkToolbox/ArgumentParsers.hpp,
	ItkToolbox/ArgumentParsers.cpp, CMakeLists.txt:

	- Files to contain the functions that parse the input type
	variables to type templates.

	* ItkToolbox/SignedMaurerFilter.cpp, ItkToolbox/BaseFilter.hpp,
	ItkToolbox/BaseFilter.cpp, SignedMaurerFilter.hpp:

	- Rename member function SetSpecificParameters() as
	SetSpecificFilterParameters().

	* ItkToolbox/BaseFilter.hpp, ItkToolbox/BaseFilter.cpp
	(BaseFilter):

	- (v0.1.1) Remove class FilterParamFactory. Now parameters
	specific to each filter are passed through the derived filter
	classes.

	* ItkToolbox/ItkImFilter.cpp, ItkToolbox/CMakeLists.txt:

	- (v0.3.7) New substantial change in the architecture. Now we have
	a BaseFilter class that implements in its constructor the
	filtering of the Matlab image, as before.

	  But now each filter is a class derived from BaseFilter. So if a
	filter has some specific requirements (input arguments, member
	methods or secondary outputs), we can add code just for it.

	  Besides, because we have moved each filter's code to a .cpp and
	.hpp pair of files, we only need to compile the filter we are
	modifying. Previously, every compilation had to recompile all the
	code.

	* Add ItkToolbox/BaseFilter.cpp, ItkToolbox/BaseFilter.hpp,
	ItkToolbox/SignedMaurerFilter.hpp,
	ItkToolbox/SignedMaurerFilter.cpp,
	ItkToolbox/DanielssonFilter.cpp, ItkToolbox/DanielssonFilter.hpp,
	ItkToolbox/ThinningFilter.cpp, ItkToolbox/ThinningFilter.hpp

	- Files to hold code that is specific to each filter. Each filter
	is a class derived from BaseFilter. There are two blocks of code
	that we need to put in these files:

	  The EXCLUDEFILTER macros in *.hpp/*.cpp make the compiler
	compile the class with an empty constructor and empty methods, so
	that the filter is not instantiated for not allowed input/output
	types.

	  The FILTERINST macros at the end of *.cpp instantiate the filter
	for valid input/output types. This is necessary to avoid errors
	with the linker. The reason is that templated classes either need
	to be completely defined in the header file (which makes the
	compilation slower and possibly the executable larger), or
	instantiated explicitly, as we are doing. This solution was found
	in the following link

	  http://www.parashift.com/c++-faq-lite/templates.html#faq-35.15

	* Delete ItkToolbox/FilterExclusions.cpp:

	- This file is no longer needed. Now the filter exclusions are in
	the new files that are specific to each filter.

2011-05-18  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkImFilter.cpp:

	- (0.3.6) Move some code to ItkToolbox/BaseFilter.cpp.

	* CMakeLists.txt, ItkToolbox/CMakeLists.txt:

	- Code has been moved from ItkToolbox/ItkImFilter.cpp to the new
	files ItkToolbox/BaseFilter.hpp, ItkToolbox/BaseFilter.cpp.

	* Add ItkToolbox/BaseFilter.hpp, ItkToolbox/BaseFilter.cpp:

	- To contain the BaseFilter class and the auxiliary parsing
	functions that map from type variables to type templates. The
	parsers have to be included here because BaseFilter needs to be
	available for them at compile time. Otherwise, the linker doesn't
	know how to link them together. This is a template problem, as
	pointer out by Raf Bordas. The only solutions, he says, are either
	to put the code together, or to use explicit instantiation of
	every template type, but that's what we are trying to avoid,
	because we can have a large number of combinations. The trade off
	for code simplicity is that compilation will be slower.

	* Rename ItkToolbox/FilterFactoryExclusions.hpp as
	ItkToolbox/FilterExclusions.hpp.

	* ItkToolbox/FilterFactoryExclusions.hpp:

	- (0.1.1) Pass the number of output arguments from the entry
	mexFunction all the way to the FilterFactory. We are going to need
	it for filters that give more than one output argument.

	* ItkToolbox/ItkImFilter.cpp:

	- (0.3.5) Pass the number of output arguments from the entry
	mexFunction all the way to the FilterFactory. We are going to need
	it for filters that give more than one output argument.

	- Rename runTime* functions to parse*, as this describes better
	what they do.

2011-05-17  Ramon Casero  <rcasero@gmail.com>

	* FilterFactoryExclusions.hpp:

	- We are going to pass the pointer to the array of all output
	arguments instead of just the first output argument to the
	FilterFactory.

	* CMakeLists.txt, FiltersToolbox/CMakeLists.txt,
	ItkToolbox/CMakeLists.txt:

	- Move the NrrdImage class to ItkToolbox/NrrdImage.hpp,
	ItkToolbox/NrrdImage.cpp.

	- Add svn:keywords Rev, Date.

	* ItkToolbox/ItkImFilter.cpp:

	- Move the NrrdImage class to ItkToolbox/NrrdImage.hpp,
	ItkToolbox/NrrdImage.cpp.

	- We are going to pass the pointer to the array of all output
	arguments instead of just the first output argument to the
	FilterFactory.

	* Add ItkToolbox/NrrdImage.hpp, ItkToolbox/NrrdImage.cpp:

	- Create these two files to remove the NrrdImage class from
	ItkImFilter.cpp.

	* FiltersToolbox/skeleton_label.m:

	- (v0.7.2) Fix bug. Remove small patch of voxels only of we are
	labelling the image.

2011-05-15  Ramon Casero  <rcasero@gmail.com>

	* All *.m, *.cpp, *.hpp files:

	- Add missing help headers, authour, version, $Rev$ and $Date$, if
	necessary.

	- Add svn:keywords Rev, Date.

	* FiltersToolbox/skeleton_label.m:

	- (v0.7.1) In some very particular cases, a small patch of voxels
	may be left unlabelled. We are just going to remove them from the
	segmentation

	- Add svn:keywords Rev, Date.

	* ItkToolbox/FilterFactoryExclusions.hpp:

	- Add svn:keywords Rev, Date.

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.3.2) Fix bugs. Avoid trying to straighten branches with 1 or
	2 voxels. Deal with the case when the branch produces less than 3
	eigenvalues.

	- Add svn:keywords Date.

	- Maurer distances inside the object are negative by default, so
	we have to convert them to the positive value.

	- Add svn:keywords Rev.

	* ItkToolbox/ItkImFilter.cpp (FilterParamFactory):

	- (v0.3.4) Add svn:keywords Rev, Date.

	- Make Maurer filter give the output in actual Euclidean
	distances, not squared ones.

2011-05-14  Ramon Casero  <rcasero@gmail.com>

 	* FiltersToolbox/skeleton_label.m:

	- (v0.7.0) Add output field cc.BifurcationPixelIdx.

2011-05-13  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/FilterFactoryExclusions.hpp:

	- (v0.1.0) Add exclusions for SignedMaurerDistanceMapImageFilter.

	* ItkToolbox/ItkImFilter.cpp:

	- Add SignedMaurerDistanceMapImageFilter to compute signed
	distances in real world coordinates.

	- (v0.3.3) Thanks to a new FilterParamFactory class with explicit
	specialization, we can treat each filter type differently in terms
	of parameters. So e.g. we can run filter->SetAlpha1(0.3) for a
	certain filter type, but don't do it for the rest.

	- (v0.3.2) Move template explicit specialization code to
	ItkToolbox/FilterFactoryExclusions.hpp, add comments so that the
	code can be well understood and tidy up.

	* Add ItkToolbox/FilterFactoryExclusions.hpp:

	-  This is a file to remove some cluttering from file
	ItkImFilter.cpp. It contains the template explicit specialization
	code that prevents the compiler from trying to instantiate certain
	input/output image types for certain filters.

2011-05-12  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkImFilter.cpp:

	- (v0.3.1) Very big internal change in architecture, that doesn't
	change the interface. Now, instead of nesting switch and if
	clauses in mexFunction() to instantiate the different combinations
	of input/output image type, we have created functions that allow
	us to translate from the type variables to type templates. Now we
	can run all filters with one FilterFactory, because types not
	supported by each filter can be explicitely removed from the
	compilation. These changes came after a lengthly discussion with
	Miguel Bernabeu who figured out the problem I had to solve.

	- (v0.3.0) Accept SCI NRRD structs created by scinrrd_load() as
	input, so that we can pass image resolution and offset to the
	filter. This has been a substantial rewrite, because we had to
	create an NrrdImage class to parse the NRRD fields and pass them
	to runFilter().

2011-05-11  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_load.m:

	- (v0.1.0) Add version number and note on help header to make
	clear that nrrd.axis(1) corresponds to rows, not to the
	x-coordinate.

2011-05-10  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkImFilter.cpp:

	- (v0.2.0) Add DanielssonDistanceMapImageFilter. This basically
	meant creating another runFilter() for the case where the input
	and output images don't have the same type, and some template
	tricks to e.g. be able to test the output image type using the
	templated type. Now it should be very easy to add new filters that
	produce an result with a different type than the input image.

2011-05-09  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m:

	- (v0.3.1) Don't try to straighten branches that cannot be
	parameterized (at the moment, the only case I can think of are
	branches with loops).

	* FiltersToolbox/skeleton_label.m:

	- (v0.6.1) We no longer split up loops, because it doesn't really
	make sense to try to parameterize a loop as a 1-D spline.

2011-05-08  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.6.0) Add field cc.IsLoop to output.

	- Fix bug. For branches that were a loop not connected to any
	other part of the skeleton, there were no extreme points and this
	gave an error when trying to index an empty array.

2011-05-06  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m:

	- (v0.5.0) Add fields cc.IsLeaf, cc..BranchLength to output.

	- (v0.4.2) Fix bug. When adding bifurcation points to branches, in
	some cases voxels could get duplicated.

	- (v0.4.1) Fix bug. Branches forming a loop were not correctly
	parameterized. We were choosing an extreme voxel, and then finding
	the furtherst voxel. In a "linear" branch this works fine, but in
	a loop, the furthest voxel is at the other end of the loop, so
	half the loop was being dropped. Now, we break loops open before
	computing Dijkstra, so all the voxels are included.

	* FiltersToolbox/bwregiongrow.cpp (MexFunction, getNeighbours):
	v0.2.2

	- Fix bug. As the neighbour r, c, s indices we are using a
	mwIndex, that is a long unsigned int. So when we were doing
	rcs[2]-1 and rcs[2]==0, instead of getting -1, the number wrapped
	around due to an implicit cast and gave 18446744073709551615.

	- Fix bug. If res was not provided, we were passing a NULL pointer
	to run(), that gave a segfault.

2011-05-04  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_seg2label_stats.m: v0.3.0

	- SCINRRD_SEG2LABEL_STATS Shape stats for each object in a
	multi-label segmentation; objects can be straightened with an
	skeleton or medial line before computing the stats.

	* Delete FiltersToolbox/landlocked_stats.m:

	- Move its functionality to
	FiltersToolbox/scinrrd_seg2label_stats.m to avoid having different
	functions that do similar things.

2011-05-03  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_squeeze.m: v0.1.2

	- Don't remove dimension from nrrd.axis if it's not a dummy
	dimension.

2011-04-29  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m: v0.4.0

	- Replace slow Dijkstra-based labelling of the whole image by new
	very fast region grow algorithm bwregiongrow().

	* FiltersToolbox/bwregiongrow.m: v0.2.0

	- Remove all Matlab code, that was very slow and inefficient. This
	function is now fully implemented in C++ in the corresponding MEX
	function, that is very fast.

	* FiltersToolbox/bwregiongrow.cpp: v0.2.1

	- Add input argument maxiter, to limit the number of grow
	iterations of the algorithm.

	* FiltersToolbox/CMakeLists.txt:

	- Rename FiltersToolbox/bwregiongrow_aux.cpp as
	FiltersToolbox/bwregiongrow.cpp.

	* Rename FiltersToolbox/bwregiongrow_aux.cpp as
	FiltersToolbox/bwregiongrow.cpp.

	* FiltersToolbox/bwregiongrow_aux.cpp: v0.2.0

	- Complete rewrite of the function. Now instead of implementing
	only a loop of the Matlab function, it implements the whole region
	grow algorithm. We don't need to use a distance matrix, and the
	algorithm is super fast (6 sec with the right.mha image that
	would've probably taken over 35 min with the Dijkstra Matlab
	method, and a lot more with the region grow implemented in Matlab).

2011-04-28  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/bwregiongrow.m:

	- BWREGIONGROW  Region grow segmentation of binary image from
	multiple seeds.

	* Add FiltersToolbox/bwregiongrow_aux.cpp: v0.1.0

	- This is an auxiliary function to bwregiongrow.m, to implement
	part of the algorithm in C++ so that we can avoid a costly loop in
	Matlab.

2011-04-26  Ramon Casero  <rcasero@gmail.com>

	* ItkToolbox/ItkImFilter.cpp:

	- Change a type that was int to mwSize, so that it can be compiled
	for 64 bit architectures.

	* matlab/MatlabMakeMacros.cmake:

	- In 64 bit architectures, we need to remove the flag
	-DMX_COMPAT_32 (this is what mex -largeArrayDims does).

	* FiltersToolbox/seg2dmat.m: v0.2.1

	- We were removing voxels not connected to other voxels from the
	dictionary and the distance matrix. This creates all sorts of
	problems with other functions, because when they find an isolated
	voxel, they try to index a non-existent entry in dict or the
	distance matrix.

	* Add FiltersToolbox/bwregiongrow.m: v0.1.0

	- BWREGIONGROW  Region grow segmentation of binary image from
	multiple seeds.

2011-04-25  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m: v0.3.3

	- Use new slow mode in graph_nn() to avoid running out of
	memory. Either method is, however, too slow, with a expected 35
	min to partition a 468x159x475 image with only 16510 skeleton
	voxels.

	* PointToolbox/graph_nn.m: v0.2.0

	- Add new input argument FAST, to choose between running it in
	vectorized mode (faster), or using a loop (less memory).

	- Fix bug. Voxels not connected to the skeleton (min distance =
	Inf) were being assigned skeleton index 1. Now they get NaN.

	- Remove predecessors list, we don't need it, and it needs a lot
	of memory.

2011-04-23  Ramon Casero  <rcasero@gmail.com>

	* Delete matlab/test/bent-vessel-2d.mat

	- Not an image, just some vectors and matrices that are difficult
	to use.

	* FiltersToolbox/scinrrd_seg2label_stats.m: v0.2.0

	- Fix bug. Skeleton voxels that are not part of the branch voxels
	need to be added to the branch. This can happen because a labelled
	segmentation voxel can belong only to one object, but a skeleton
	bifurcation voxel can be actually shared by more than one.

	- Big rewrite, tidy up, and remove all the code about
	straightening, that is now under function pts_local_rigid().

	- Remove STRAIGHT input argument, that is now implicit if CC is
	provided.

	* PointsToolbox/pts_local_rigid.m: v0.1.1

	- Fix bug. The rotation and translation was wrong, and it became
	apparent when running the function on the 3D example
	bent-vessel-3d-2.mat. Now the points are correctly translated
	before and after rotation, and the procrustes registration is
	unnecessary within the loop.

2011-04-22  Ramon Casero  <rcasero@gmail.com>

	* release 0.3

	- After releasing first versions of functions in matlab/ItkToolbox
	that allow to run ITK code from Matlab.

	* update_README.sh:

	- Avod recursing into directories. This avoids that it finds the
	*Toolbox directories in bin/

	* Move itk functions to new ItkToolbox directory

	- FiltersToolbox/ItkImFilter.cpp
	- FiltersToolbox/CMakeLists.txt
	- FiltersToolbox/itk_imfilter.m
	- PointsToolbox/ItkKernelTransform.cpp
	- PointsToolbox/CMakeLists.txt
	- PointsToolbox/itk_kernel_transform.m
	- CMakeLists.txt

	* Add new directory ItkToolbox

	* Add FiltersToolbox/ItkImFilter.cpp,
	FiltersToolbox/CMakeLists.txt, FiltersToolbox/itk_imfilter.m:

	- ITK_IMFILTER: Run ITK filter on a 2D or 3D image.

	- This is also a big development in the project, because even
	though this function currently implements only the skeleton
	filter, it is templated so that it can use many of Matlab's matrix
	classes (double, boolean, uint8, etc), and it's generic enough
	that adding new filters should be easy.

	* CMakeLists.txt:

	- Build new function itk_imfilter().

2011-04-21  Ramon Casero  <rcasero@gmail.com>

	* Add some test data to matlab/test

	- bent-vessel-2d.mat
	- veins-tree-blob.mat
	- veins-tree-blob.mha
	- veins-tree-blob-skeleton.mat
	- veins-tree-blob-skeleton.mha

	* Add PointsToolbox/pts_local_rigid.m: v0.1.0

	- PTS_LOCAL_RIGID Non-rigid transformation that is locally rigid
	between two sets of points with known correspondence.

	* FileFormatToolbox/scinrrd_world2index.m: v0.2.1

	- Add default for CHOP input argument.

2011-04-20  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/landlocked_stats.m: v0.1.0

	- LANDLOCKED_STATS Assess whether sections of voxels are
	surrounded by other sections (land) or by background (water).

	* Add PointsToolbox/ItkKernelTransform.cpp,
	PointsToolbox/itk_kernel_transform.m: v0.1.0

	- ITK_KERNEL_TRANSFORM ITK warps between 3D point sets with a
	known correspondence.

	* Add CMakeLists.txt, PointsToolbox/CMakeLists.txt,
	MatlabMakeMacros.cmake:

	- Cmake files to build PointsToolbox/itk_kernel_transform.mexa64.

	- This is a big development for the project, because now we know
	how to write C++ code with ITK functions, and compile it as a MEX
	file so that we can run it directly from Matlab. Also, we can
	build the files using cmake, and we don't need mex.

2011-04-19  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_plot.m: v0.2.0

	- Add input arguments varargin so that we can pass extra options
	to the plots.

	* FileFormatToolbox/scinrrd_world2index.m: v0.2.0

	- Add input argument CHOP so that we can deactivate the conversion
	of points outside the image to NaN.

2011-04-14  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scinrrd_seg2label_stats.m: v0.1.0

	- SCINRRD_SEG2LABEL_STATS  Shape stats for each label in a
	multi-label segmentation.

	* Rename FiltersToolbox/scinrrd_seg2vesselness.m as
	FiltersToolbox/scinrrd_seg2voxel_stats.m.

	* PointsToolbox/pts_rotmat.m: v1.0.0

	- PTS_ROTMAT Compute rotation matrix to minimize least squares
	error.

	* PointsToolbox/pts_procrustes.m: v1.0.0

	- PTS_PROCRUSTES Least-Squares Fit Orthogonal Procrustes Analysis
	between two sets of points.

	* PointsToolbox/pts_procrustes_gen.m: v1.0.0

	- PTS_PROCRUSTES_GEN Generalized Least-Squares Fit Orthogonal
	Procrustes Analysis.

	* PointsToolbox/pts_cn.m: v1.0.0

	- PTS_CN Center and normalize a set of points.

	* PointsToolbox/pts_simil_map.m: v1.0.0

	- PTS_SIMIL_MAP Apply similarity transformation to points.

	* PointsToolbox/pts_simil_map_params.m: v1.0.0

	- PTS_SIMIL_MAP_PARAMS Compute similarity transformation
	parameters between sets of points with unknown
	correspondence (Procrustes is used).

2011-04-13  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/pts_pca.m: v1.1.0

	- Don't chop off small eigenvalues. First, because depending on
	the scaling of the data, a small eigenvalue may actually be
	significant. Second, because small or negative eigenvalues may
	indicate interesting features in the data. Third, because it's
	easy to remove them afterwards if they are creating numerical
	errors in some application.

	* PointsToolbox/coords_from_dist_gower.m: v0.2.0

	- Add collinearity test.

	* Add PointsToolbox/iscollinear.m: v0.1.0

	- ISCOLLINEAR Test to determine whether a set of points are
	collinear.

2011-04-12  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/dmatrix_complete: v0.1.0

	- DMATRIX_COMPLETE Fill in empty elements of non-Euclidean
	distance matrix.

	* PointsToolbox/dmatrix2coords.m: v0.1.0

	- DMATRIX2COORDS Point coordinates from distance matrix.

	* PointsToolbox/plot_dmatrix.m: v0.1.1

	- Plot vertices as disconnected dots, so that their connections
	don't get confused with distance matrix connetions.

2011-04-11  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m: v0.3.2

	- Add PixelParam field to CC output, with the parameterization
	value for each branch voxel computed as the accumulated chord
	distance between consecutive voxels.

	* Add FiltersToolbox/skeleton_plot.m: v0.1.0

	- SKELETON_PLOT Plot a labelled segmentation and its skeleton.

	* FiltersToolbox/skeleton_label.m: v0.3.1

	- Add as output arguments skeleton distance matrix, and
	dictionaries to convert between image and distance matrix indices.

	- Now voxels in each branch are sorted, so that we can walk from
	one termination point to the other without "jumps".

2011-04-10  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m: v0.2.2

	- Add bifurcation points to every branch they terminate. This way,
	it will be easier to sort the points in the branch, as we will
	have 2 termination points (leaf/bifurcation or
	bifurcation/bifurcation) in every branch.

2011-04-08  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/skeleton_label.m: v0.2.1

	- Fix bug. Instead of adding the bifurcation voxel, we were adding
	its neighbour.

	- Add input arguments so that besides the skeleton, we can pass
	the original segmentation. Now, the whole segmentation and not
	only the skeleton will get labelled.

	* Add matlab/test/veins-tree.mat, matlab/test/veins-tree.mha:

	- To test the new functionality in skeleton_label().

	* FiltersToolbox/scinrrd_squeeze.m: v0.1.1

	- Fix bug. Remove dummy dimension also when nrrd.data has only 3
	dimensions. If you have a single slice, Seg3D saves it with a
	3-dimensional matrix (with a first dummy dimension), but 4
	elements for the nrrd.axis. So this function was working wrong for
	1-slice volumes.

	* Add PointToolbox/graph_nn.m: v0.1.0

	- GRAPH_NN Nearest neighbours from a subset of nodes in a graph to
	another subset.

2011-04-07  Ramon Casero  <rcasero@gmail.com>

	* Add test/veins-tree-skeleton.mat, test/veins-tree-skeleton.mha:

	- A 2D segmentation that looks like a tree of veins (with a
	cycle), to test skeleton_label().

	* Add test directory.

	- Directory to keep data and scripts for tests.

	* Add FiltersToolbox/skeleton_label.m: v0.1.0

	- SKELETON_LABEL Give each branch of a skeleton a different label.

2011-04-06  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/seg2dmat.m: v0.2.0

	- Add input variable for voxel size different from [1 1 1].

	- Add input flag to create a smaller output matrix, but indexing
	only the segmented voxels of the image, not all the voxels in the
	image.

	* Rename img_adjacency_distance.m as im2imat.m.

	* Rename img_adjacency_distance.cpp as im2imat.cpp.

	* FiltersToolbox/img_adjacency_distance.m: v0.1.1

	- Small rewrite of help header to make it more consistent with new
	function seg2dmat.

	* Add FiltersToolbox/seg2dmat.m: v0.1.0

	- SEG2DMAT Local neighbourhood distance matrix between
	segmentation voxels.

2011-04-05  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scinrrd_seg2vesselness.m: v0.1.0

	- SCINRRD_SEG2VESSELNESS Vesselness parameters from a segmentation
	mask.

	* PointsToolbox/plotaxes.m: v0.2.0

	- Add varargin to be able to pass extra arguments to the plot
	function.

2011-04-01  Ramon Casero  <rcasero@gmail.com>

	* Add Vesselness3DImage.cxx: v0.1

	- Program to compute the vesselness measure for each voxel of a 3D
	image. Vesselness is a measure of how much does the voxel look
	like belonging to a long cilindrical structure, as opposed to,
	e.g. a blob or a plate.

2011-03-31  Ramon Casero  <rcasero@gmail.com>

	* Add Skeletonize3DSegmentation.cxx:

	- Program to reduce a segmentation to its skeleton.

2011-03-30  Ramon Casero  <rcasero@gmail.com>

	* Add src/third-party/itkBinaryThinningImageFilter3D

	- Code from H Homann, "Implementation of a 3D thinning algorithm",
	The Insight Journal, Jul 2007.

	http://hdl.handle.net/1926/1292

	* ExtractVoxelCoordinatesFromSegmentationMask.cxx,
	PadSegmentationMaskWithVoxels.cxx, Resize3DImage.cxx: Add author.

	* CMakeLists.txt: Add comment licence headers.

	* Resize3DImage.cxx: Add comment and licence headers.

	* Delete MbaSurfaceInterpolation.cxx: Test code no longer needed.

2011-03-29  Ramon Casero  <rcasero@gmail.com>

	* CMakeLists.txt: Add CMAKE_BUILD_TYPE variable so that the code
	is optimized for speed.

2011-03-22  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/surface_interpolation.m: v0.1.2

	- Add 'mbae' interpolation: Like the 'mba' method, but first a
	thin-plate spline is used to extrapolate values on the
	interpolation domain boundary. Then MBA is used for the local
	support interpolation of X and the boundary values set by the
	thin-plate spline.

2011-03-21  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/scinrrd_surface_interpolation.m:

	- Remove the surface interpolation code to create new function
	CardiacToolbox/surface_interpolation.m.

	* Add CardiacToolbox/surface_interpolation.m:

	- SURFACE_INTERPOLATION Interpolate a surface from a scattered set
	of points.

	- Create this fuction from part of the code in
	CardiacToolbox/scinrrd_surface_interpolation.m. It didn't make
	sense to have all that code depending on using SCI volumes.

	* Rename CardiacToolbox/scinrrd_valve_surface.m as
	PointsToolbox/scinrrd_surface_interpolation.

	- As this is a function for general surface interpolation, it
	doesn't make much sense to give it such an specific name as
	"vale_surface".

	* README

	- First time the README file is automatically generated by
	update_README.sh. From now on, we will not point the updates in
	the ChangeLog, but they will be part of changes to the toolboxes.

	* Add update_README.sh:

	- Script to automatically extract the summary of the help headers
	of all the Matlab functions in this toolbox, and generate a README
	file.

2011-03-19  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/third-party/mba/CMakeLists.txt:

	- Now libMBA.so is installed in matlab/PointsToolbox, so that it's
	in the same directory as the MEX function that makes use of it.

	* cpp/src/CMakeLists.txt:

	- Force the gcc and g++ compilers version to be 4.3. This is the
	version that Matlab currently requires, and we have to compile the
	libMBA library with the same version as the MEX file in the matlab
	directory.

	* FileFormatToolbox/scinrrd_save.m: v0.2

	- Add input argument v73, a flag to save to v7.3 format, so that
	we can save volumes larger than 2GB.

	* CardiacToolbox/scinrrd_valve_surface.m: v0.3

	- Add new otions to header file.

	- Add 'mba' interpolation, that makes use of the new MEX-file
	mba_surface_interpolation.cpp to provide Multilevel B-Spline
	Approximation interpolation.

	-Use 'natural' option for TriScatteredInterp(), so that the
	interpolant is smoother.

	* Add matlab/PointsToolbox/mba_surface_interpolation.cpp,
	matlab/PointsToolbox/mba_surface_interpolation.m:

	- MBA_SURFACE_INTERPOLATION Scattered data Multilevel B-spline
	interpolation.

2011-03-18  Ramon Casero  <rcasero@gmail.com>

	* third-party/mba/include/UCButils.h,
	third-party/mba/src/UCButils.cpp:

	- Add UCBspl::printCSVgrid() method so that I can output the
	interpolated grid points to a CSV file that Matlab can read.

	* third-party/mba/CMakeLists.txt:

	- Remove dependencies to OpenGL, that were giving linking problems
	and don't seem to be necessary for mbaSurfaceInterpolation to run. 

	* Add MbaSurfaceInterpolation.cxx:

	- So far, I copied the example provided by the original MBA
	developers, and made some changes for a quick and dirty test of
	the interpolation code. It throws a segmentation fault if you try
	to interpolate outside the square that contains the grid.

	* Add engopts.sh:

	- Matlab's configuration file modified so that we can compile and
	link PointsToolbox/mba_surface_interpolation doing

	>> mex -v -largeArrayDims -outdir PointsToolbox/ -f ./engopts.sh PointsToolbox/mba_surface_interpolation.cpp

2011-03-17  Ramon Casero  <rcasero@gmail.com>

	* Rename third-party/mba/Makefile provided by original developers as
	third-party/mba/Makefile.orginal so that it doesn't interfere with
	files generated by cmake.

	* Add third-party/mba/CMakeLists.txt

	- So that we can use cmake to build the MBA library and integrate
	it with Gerardus, instead of the Makefile provided by the orginal
	developers.

	* Add third-party/mba

	- Directory with the MBA library (SINTEF Multilevel B-spline
	Approximation library - version 1.1), Copyright (C) 2000-2005
	SINTEF ICT, Applied Mathematics, Norway. GPL.

2011-03-16  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/scinrrd_valve_surface.m: v0.2

	- Add 'gridfit' option to interpolate (actually, approximate)
	using John D'Errico's gridfit() function.

	- Add 'tsi' option to interpolate using Matlab's
	TriScatteredInterp() function.

	* Add ThirdPartyToolbox/gridfit.m: v2.0

	- By John D'Errico

	- estimates a surface on a 2d grid, based on scattered data
	Replicates are allowed. All methods extrapolate to the grid
	boundaries. Gridfit uses a modified ridge estimator to generate
	the surface, where the bias is toward smoothness.

        Gridfit is not an interpolant. Its goal is a smooth surface that
	approximates your data, but allows you to control the amount of
	smoothing.

	* Add ThirdPartyToolbox/L2_distance.m

	- L2_DISTANCE - computes Euclidean distance matrix

	- By Roland Bunschoten

	- Requirement of the isomap functions.

2011-03-15  Ramon Casero  <rcasero@gmail.com>

	* Add ThirdPartyToolbox/Isomap.m, ThirdPartyToolbox/IsomapII.m

	- Add modified code from Josh Tenenbaum, to compute Isomap
	embedding using an advanced version of the algorithm in Tenenbaum,
	de Silva, and Langford (2000), which can take advantage of
	sparsity in the graph and redundancy in the distances.

	* CardiacToolbox/scinrrd_valve_surface.m: v0.1

	- Add Isomap function to compute interpolation domain.

	- Rewrite the function to be able to use different methods to
	compute the interpolation domain, use different interpolants and
	the factor for the interpolation domain size.

	- Correct the way the interpolation is computed for the PCA
	method. I was rotating the horizontal domain, interpolation and
	rotating back, but this is incorrect because it does not give you
	the same point.

2011-03-10  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/dmatrix.m: v3.0

	- Fix copyright notice to be uniform with the rest of Gerardus.

	- Add input argument METHOD to select other distances than
	Euclidean.

	* Add PointsToolbox/plot_dmatrix.m

	- PLOT_DMATRIX Plot the connections implied by a distance matrix.

2011-02-24  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_save.m

	- Rename the input argument nrrd to scirunnrrd so that we don't
	need to duplicate the memory.

	- Add output argument nrrd to give the reformatted data volume
	actually saved.

	- Undo last change. The flag -v7.3 is not necessary, and prevents
	Seg3D from loading the segmentations. I think the problem was that
	if Matlab runs out of memory while trying to save the NRRD volume,
	it gives the flag -v7.3 error.

2011-02-23  Ramon Casero  <rcasero@gmail.com>

 	* FileFormatToolbox/scinrrd_save.m

	- Force saving with flag -v7.3 to avoid warning message.

2011-02-18  Ramon Casero  <rcasero@gmail.com>

	* src/Resize3DImage.cxx

	- Add input argument so that the user can give the Gaussian
	standard deviation in voxel units.

2011-02-17  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/Resize3DImage.cxx

	- Add input arguments to override the automatically computed
	standard deviations for the Gaussian low-pass filtering. This way,
	it's possible to blur more or less. If the std=0, the Gaussian
	filtering is skipped for that coordinate.

2011-02-16  Ramon Casero  <rcasero@gmail.com>

	* cpp/src/CMakeLists.txt

	- Add boost_system to the list of libraries each program has to be
	linked too. I have no idea why linking has been working in the
	past without this.

2011-02-15  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/pts_tps_map.m v6.4

	- Remove whitespace before or after bracket.

	- Fix bug. A bad testing condition prevented the computation of
	interpolated points apart from the first one in the SLOW mode.

	* FiltersToolbox/scinrrd_estimate_bias_field.m

	- Add input argument to switch between fast (and more memory
	consuming) and slow thin-plate spline interpolation.

	- Fix bug, force scaling factor to be a 3-vector so that it can be
	different in each coordinate.

	- Clear memory as it's no longer needed, so that we can process
	bigger images.

	- Add sigma as output argument so that we now how many voxels we
	are using to low-pass filter the image.

2011-02-10  Ramon Casero  <rcasero@gmail.com>

	* README

	- Add entry for img_tps_map

2011-02-09  Ramon Casero  <rcasero@gmail.com>

	* README

	- Add some function names and descriptions that I had forgotten.

	* Add FiltersToolbox/img_tps_map.m

	- IMG_TPS_MAP Warp an image using a thin-plate spline
	transformation

2011-02-03  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_estimate_bias_field.m

	- Now the standard deviation necessary to prevent aliasing is
	computed based on proper formulas, instead of guessing. Notes
	about the computations have been added to the help header.

	- Add input argument sigma to force bandwidth of Gaussian filter.

	- Fix bug, the number of rows and columns were swapped, so that
	after reshaping the interpolated intensity vector, the voxels were
	in the wrong place.

2011-01-31  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/pts_tps_weights.m from svn://edison.comlab.ox.ac.uk/ramc/rcasero/matlab-toolbox/pts/trunk/pts_tps_weights.m

	PTS_TPS_WEIGHTS  Compute weights and affine parameters of
	thin-plate spline warp for N-dimensional points

	This function is a dependency that I had forgotten for
	FiltersToolbox/scinrrd_estimate_bias_field.m.

	* Add PointsToolbox/pts_tps_map.m from
	svn://edison.comlab.ox.ac.uk/ramc/rcasero/matlab-toolbox/pts/trunk/pts_tps_map.m

	PTS_TPS_MAP Interpolate/warp/map N-dimensional points using a
	thin-plate spline transformation

	This function is a dependency that I had forgotten for
	FiltersToolbox/scinrrd_estimate_bias_field.m.

	* FiltersToolbox/scinrrd_estimate_bias_field.m

	- Make function a lot faster, especially with large images.

	Instead of low-pass filtering the image, reducing the size and
	sampling the background points, now we sample the background
	points and a region around them, and low-pass filter only the
	voxels of interest.

2011-01-25  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_estimate_bias_field.m

	- Add low-pass anti-aliasing filter before downsampling
	image. Make it optative, in case filtering is too slow.

	* Add FiltersToolbox/fspecial3.m

	- FSPECIAL3  Create predefined 3-dimensional filters.

2011-01-20  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_estimate_bias_field.m

	- Add input argument to select prescaling. Because using the TPS
	to interpolate all voxels can be rather slow, and the bias field
	is anyway a slow varying field, it's convenient to first quickly
	reduce the image size by A (using bilinear interpolation),
	interpolate the bias field in the smaller image with the TPS, and
	then expand to the original size. By default, A = 1.0 and no
	rescaling is used.

2011-01-06  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scinrrd_estimate_bias_field.m

	- SCINRRD_ESTIMATE_BIAS_FIELD  Estimate MRI bias field.

	* FileFormatToolbox/scinrrd_index2world.m,
	FileFormatToolbox/scinrrd_world2index.m

	- The way indices and coordinates were computed was wrong. Offset
	gives the coordinates of the first voxel's vertex, not the voxel's
	centre. Now integer indices correspond to the voxels' centres.

2010-12-17  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_index2world.m,
	FileFormatToolbox/scinrrd_world2index.m

	- Roll back last change, it was not a bug. Rewrite help header to
	clarify the coordinate and index order.

2010-12-14  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_index2world.m,
	FileFormatToolbox/scinrrd_world2index.m

	- Fix bug. The x,y coordinates (and, correspondingly, the j, i
	indices) were being operated with the wrong spacing and limit
	values. For example, the x-coordinate was being operated with the
	dy spacing. Now this has been fixed.

2010-10-07  Ramon Casero  <rcasero@gmail.com>

	* src/Resize3DImage.cxx

	- After asking in the ITK user mailing list, Dan Mueller suggested
	using IdentityTransform. I started looking, and found that there's
	actually an example on how to decimate in ITK, in
	Examples/Filtering/SubsampleVolume.cxx. I adapted the code, and
	figured out how to scale the sigma value of the low-pass filter to
	get a similar result to the Resample tool in Seg3D.

2010-07-15  Ramon Casero  <rcasero@gmail.com>

	* Add src/Resize3DImage.cxx

	- Start adding program to resize an image volume, trying an
	approach of ScaleTransform to resize the image. This is not
	working very well, because there's no Gaussian filtering, and the
	coordinate frame is changed. I'm going to switch to using
	MultiResolutionPyramidImageFilter, but before I'm commiting the
	code in case I need to roll back.

2010-07-05  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_load.m

	- Give error if the data is compressed.

	- If ElementDatafile is LOCAL, then raw data is in the file, not
	an external one.

2010-07-01  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_save.m

	- Add input argument to control whether data is converted to uint8
	or not before saving.

	* CardiacToolbox/process_misas_patient.m

	- if we have two NormalMri volumes, combine them with a max()
	function to remove banding artifacts, as suggested by Matt Robson

2010-06-30  Ramon Casero  <rcasero@gmail.com>

	* release 0.2.1

	- New minor release given that the bug in WriteRawFile.m and
	WriteMhaFile.m was quite severe, and the new scinrrd_load()
	functionality is interesting.

	* FileFormatToolbox/scinrrd_load.m

	- Now this function can also load an nrrd struct from MetaImage
	(.mha) files, and not only Matlab (.mat). This should save us from
	a lot of time wasted having to load .mha files in Seg3D and
	exported as .mat.

2010-06-28  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/WriteRawFile.m,
	FileFormatToolbox/WriteMhaFile.m

	- Fix bug. DICOM frames are loaded into Matlab with X-coordinates
	along columns, but they were written along rows, so the image
	volume was rotated 90.

2010-06-21  Ramon Casero  <rcasero@gmail.com>

	* release 0.2

	- After submission of paper to MICCAI STACOM 2010: R. Casero,
	R.A.B. Burton, T.A. Quinn, C. Bollensdorff, P. Hales,
	J.E. Schneider, P. Kohl, and V. Grau, "Towards high-resolution
	cardiac atlases: ventricular anatomy descriptors for a
	standardized reference frame", STACOM MICCAI'10, Beijing, 2010.

2010-06-16  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/scinrrd_rv_crescent_tips.m

	- Instead of assigning the top and botton of the crest to the last
	and first axis points, just compute from each slice the closest
	axis point. Now there is no need for the axis and the right
	ventricle to have the same number of slices.

2010-06-15  Ramon Casero  <rcasero@gmail.com>

	* Add CardiacToolbox/scinrrd_valve_surface.m.

	- Inter atrio-ventricular surface.

2010-06-14  Ramon Casero  <rcasero@gmail.com>

	* src/Rotate3DImage.cxx:

	- Attempt to recompute the image resolution when the image is
	rotated. Imagine we have a 2D image with 1x2 resolution, and
	rotate it 90. With the current code, the rotated image would
	still have 1x2 resolution, but it would make sense that it changes
	to 2x1. Anyway, I need to test the new code, and have no time now,
	so I'm leaving the code commented out to work on it later.

2010-06-09  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/crest_envelope.m:

	- Compute the envelope for the Right Ventricle's crest.

2010-05-28  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/process_misas_patient.m

	- Remove assumption that subdirectories with IMA files are called
	MISAS*. We need this because Jason will rename the MISAS*
	directories to NormalMri1, FatMri1, etc. before running this
	script.

2010-05-27  Ramon Casero  <ramc@clpc444.comlab>

	* Add CardiacToolbox/process_misas_patient.m

	- Create MetaImage volumes from directory tree of IMA DICOM files,
	for project with human hearts provided by Kelvin Wong.

	* FileFormatToolbox/sortdirbynum.m:

	- Fix bug. Exit gracefully when list of input files is empty.

2010-05-25  Ramon Casero  <rcasero@gmail.com>

	* Add CardiacToolbox/correct_rv_crescent_tips.m

	- Correct the segmentation of the Right Ventricle's crescent tips
	using the segmentation of the tricuspid and pulmonary annula.

2010-05-19  Ramon Casero  <rcasero@gmail.com>

	* CardiacToolbox/scinrrd_rv_crescent_tips.m

	- Extend computation of the RV crescent tips to the RV slices that
	have no corresponding centroid. In that case the first and last
	centroids in the LV axis are used.

2010-05-12  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/coords_from_dist_gower.m

	- Compute point coordinates from distances to a set of landmarks,
	as described in Gower (1986).

2010-05-09  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/WriteMhaFile.m

	- Fix bug, wrong variable name and function in error message.

	* FileFormatToolbox/dcm2metaimage.m

	- Fix bug when directory in path is the current one.

	* Add PointsToolbox/dmatrix.m

	- Matrix of distances between vectors. Move from Comlab
	repository, matlab-toolbox/misc/trunk.

2010-04-30  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/dcm2metaimage.m:

	- Fix bug with dir name when data is in the current directory.

2010-04-29  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_gradients.m:

	- Vicente suggested using an explicit formula with a 3x3
	neighbourhood to compute the second order gradients, instead of
	running function gradient() twice (which uses a 5x5 neighbourhood).

2010-03-23  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/dijkstra.cpp:

	- Nodes not connected to the source get a NaN as parent. They were
	getting a 1, which is a bug. By making it NaN, it also mimics the
	output of Matlog Toolbox's function dijk(), that has a native
	Matlab implementation of the same algorithm.

	* Add CardiacToolbox/scinrrd_rv_crescent_tips.m:

	- Extract the tips of the crescent-shaped curve in all slices of
	the Right Ventricle.

	* Add CardiacToolbox/is_lv_on_the_left.m:

	- Check whether the left ventricle is on the left hand side of the
	image.

	* Add CardiacToolbox subdirectory for functions that are specific
	to cardiac image processing.

	* Add ThirdPartyToolbox/dijkstra.m,
	ThirdPartyToolbox/dijkstra.cpp, ThirdPartyToolbox/fibheap.h:

	- DIJKSTRA Shortests path tree from sparse matrix graph.

	* Add ThirdPartyToolbox/LICENCE

	- To explan licence difference of files in this subdirectory.

	* Add ThirdPartyToolbox directory for derivative works or third
	party functions that cannot be covered by the GPL used elsewhere
	in Gerardus, or code with an uncertain licence status.

	* FiltersToolbox/img_adjacency_distance.m:

	- Add Matlab implementation of the function, to compare with the
	MEX implementation.

2010-03-16  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/img_adjacency_distance.cpp,
	FiltersToolbox/img_adjacency_distance.m:

	- Convert image to adjacency-distance list in sparse matrix form.

	* Add PointsToolbox/sparse_breakdown.cpp,
	PointsToolbox/sparse_breakdown.m:

	- Extract internal arrays from sparse matrix.

2010-03-10  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scinrrd_gradients.m:

	- Compute 1st and 2nd order image gradients.

2010-03-07  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_centroids.m:

	- Instead of skipping them, make [NaN NaN NaN] centroid for empty
	slices too. This way, it's easier to use them in other functions
	that iterate all the slices in a volume.

	* Add FiltersToolbox/scinrrd_centroids.m:

	- Compute centroid of every slice with segmented pixels.

2010-03-06  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/extmat2rotmat.m, PointsToolbox/rotmat2extmat.m:

	- Remove rounding of index values to allow for continuous
	indices. This way, numerical errors are reduced. In case we need
	integer indices, it's very easy to run round(idx) on the output.

	- Rename argument axis as ax, to avoid clash with function axis().

	* Add FiltersToolbox/scinrrd_regionprops.m:

	- SCINRRD_REGIONPROPS Measure properties of image regions on each
	slice.

2010-03-05  Ramon Casero  <rcasero@gmail.com>

	* PointsToolbox/extmat2rotmat.m, PointsToolbox/rotmat2extmat.m:

	- Add input argument "center", so that we can choose the
	transformation A(X-M) instead of A(X-M)+M. This will center the
	heart around the origin of coordinates, and it also allows to use
	a well-conditioned system to be used in extmat2rotmat.

	* FiltersToolbox/scinrrd_vertical_orientation_pca_basis.m:

	- Remove input argument "type". We are computing an orientation
	basis, not a rotation matrix, so there's no point in having "type"
	to select between A or A'.

	* Rename scinrrd_vertical_rot3.m as
	scinrrd_vertical_orientation_pca_basis.m:

	- We are computing the orientation basis, not a rotation matrix.

	* FiltersToolbox/scinrrd_vertical_rot3.m:

	- Make sure that the orientation of the resulting basis is the
	same as the Cartesian system.

	The problem is that the basis is valid if we take the negative of
	any of its vectors too. For example, the Cartesian system has
	positive orientation because [1 0 0] x [0 1 0] = [0 0 1]. But
	scinrrd_vertical_rot3() could also produce the basis with negative
	orientation [-1 0 0], [0 1 0], [0 0 1].

	To avoid this, we make sure that the "Z" vector is going up,
	and then change the sign of "X", if necessary.

2010-03-04  Ramon Casero  <rcasero@gmail.com>

	* src/Rotate3DImage.cxx:

	- Reorder input arguments, so that now filename is at the
	end. This way, we can use xargs on the shell and rotate a
	list of files.

	- Major bug fix. Input transformation was all mixed up. Now the
	input transformation is expected to be in the intuitive
	direction. For example, if you want to rotate the volume 30
	clockwise, your transformation should rotate the Cartesian system
	30 clockwise too.

	- Add input argument to select autocrop, so that the output volume
	will tightly enclose the selected voxels in a segmentation mask,
	or you can also define margins by a percentage.

	* Add CardiacToolbox, a directory to keep functions that are only
	relevant to cardiac image processing.

	* Add FiltersToolbox/scinrrd_papillary_muscles.m:

	- Extract the papillay muscles from a segmentation of the Left
	Ventricle's cavity.

	* Add FileFormatToolbox/scinrrd_save.m:

	- SCINRRD_SAVE Save a NRRD struct to a Matlab format that can be
	imported by Seg3D.

	* Add FiltersToolbox/scinrrd_unsqueeze.m:

	- SCINRRD_UNSQUEEZE  Add dummy dimension and convert data to uint8
	data type.

	* Add FileFormatToolbox/scinrrd_load.m:

	- SCINRRD_LOAD Load a NRRD struct saved to Matlab format.

2010-03-02  Ramon Casero  <rcasero@gmail.com>

	* src/Rotate3DImage.cxx:

	- Add input argument to select the interpolator type. Now we can
	choose between bspline or nearest neighbour. The reason is that
	bspline was giving bad results for binary masks (but works well
	for grayscale images).

2010-02-26  Ramon Casero  <rcasero@gmail.com>

	* src/Rotate3DImage.cxx:

	- Change syntax. Instead of giving the centroid and rotation
	matrix, in that order, we are expecting the (3,4) extended matrix,
	that contains the rotation matrix and a translation vector.

	* PointsToolbox/extmat2rotmat.m, PointsToolbox/rotmat2extmat.m:

	- Remove the bottom row of the extended matrix.

2010-02-25  Ramon Casero  <rcasero@gmail.com>

	* src/Rotate3DImage.cxx:

	- Make default background colour 0, and add input argument to be
	able to change it.

	* Add PointsToolbox/extmat2rotmat.m:

	- EXTMAT2ROTMAT Convert rotation in extended matrix form into
	centroid and matrix pair.

	* Add PointsToolbox/rotmat2extmat.m:

	- ROTMAT2EXTMAT  Convert centroid and rotation matrix pair to
	extended matrix form.

2010-02-22  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/intersect_line_plane.m:

	- INTERSECT_LINE_PLANE Find intersection of a line with a plane.

	* Add FiltersToolbox/scinrrd_box.m:

	- SCINRRD_BOX Compute tight box around SCI NRRD segmentation.

2010-02-20  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_optimal_intersecting_plane.m:

	- Interface change: Change input arguments.

	- Now, instead of intering RAD for smoothing of the segmentation,
	we enter a struct called param, that contains new options for the
	optimisation.

	- Added global optimisation, that is, instead of using fminsearch,
	now you can sweep a whole range of azimuth and elevation angles to
	compute the area values. Because we are optimising only two
	variables, this is not much slower than using fminsearch, and it
	provides a much better insight into the results.

	* PointsToolbox/vec2rotmat.m:

	- Add input argument so that an initial guess for the 2 vectors
	orthogonal to V is provided (as part of an initial guess for the
	rotation matrix). This will constrain the infinite space of
	possible rotations to the closest one to the one we had.

2010-02-19  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/scinrrd_index2world.m,
	FileFormatToolbox/scinrrd_world2index.m:

	- Real world coordinates are to be presented as (x,y,z), while
	indices are to be presented as (r,c,s). But note that x <-> c, and
	y <-> r.

	* PointsToolbox/scinrrd_pca.m:

	- Fix bug: The convention has to be that rows are y-coordinates,
	and columns are x-coordinates.

	* PointsToolbox/plotaxes.m:

	- Add input argument for the origin of coordinates.

2010-02-18  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_optimal_intersecting_plane.m:

	- Remove unnecessary function nesting.

2010-02-17  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scinrrd_optimal_intersecting_plane.m:

	- Interface change: Change argument order.

	- Now instead of computing a rotation centroid at 2/3 of the
	volume, the user enters the rotation centroid.

	- The rotation centroid stays fixed and is not recomputed at each
	iteration of the optimisation algorithm (actually it is, for
	tracking purposes, but the value used is the initial).

	- Remove big block to compute the instersection area at iteration
	zero, as this can be now done within the optimisation loop.

	- Optimise the azimuth and elevation angles of the normal vector,
	instead of the 3 coordinates of the vector.

	- Use new vec2rotmat() function to compute rotation matrix from
	the normal vector.

	* Add PointsToolbox/vec2rotmat.m:

	- VEC2ROTMAT Compute rotation matrix from Cartesian vector.

	* Add PointsToolbox/plotaxes.m:

	- PLOTAXES Plot axes of 3D coordinate system.

2010-02-15  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scirunnrrd_optimal_intersecting_plane.m:

	- Undo change of vector arguments to matrices, because we can do
	the optimisation on the sole vector, and then recompute the
	rotation matrix.

	But keep renaming of function being used by this function.

	* FiltersToolbox/scinrrd_intersect_plane.m:

	- Force NRRD data to be double, otherwise interpolation for the
	intersection doesn't work.

	* PointsToolbox/scinrrd_pca.m:

	- Remove assumption that NRRD will have dummy dimension, because
	it could have been removed by a previous scinrrd function.

	* FiltersToolbox/scinrrd_vertical_rot3.m:

	- Replace code block by scinrrd_vertical_rot3().

	- Add input argument so that you can select whether the rotation
	is forwards or backwards.

	* PointsToolbox/scinrrd_pca.m:

	- Compute centroid as output argument.

	* Rename scirunnrrd_world2index.m as
	scinrrd_world2index.m. Correct variables and help header for
	consistency with the rest of scinnrd functions.

	* Rename scirunnrrd_index2world.m as
	scinrrd_index2world.m. Correct variables and help header for
	consistency with the rest of scinnrd functions.

	* Rename scirunnrrd_pca.m as scinrrd_pca.m. Correct variables and
	help header for consistency with the rest of scinnrd functions.

	* Rename scirunnrrd_vertical_rot3.m as
	scinrrd_vertical_rot3. Correct help header. Correct variables and
	help header for consistency with the rest of scinnrd functions.

2010-02-09  Ramon Casero  <rcasero@gmail.com>

	* Rename FiltersToolbox/scirunnrrd_optimal_intersecting_plane.m as
	FiltersToolbox/scinrrd_optimal_intersecting_plane.m.

	* FiltersToolbox/scinrrd_intersect_plane.m:

	- When sampling with interpn(), it is necessary to provide the
	grid matrices in the same order as they are generated by ndgrid().

	* Add FileFormatToolbox/scinrrd_seg3d2matlab.m:

	- SCINRRD_SEG3D2MATLAB Correct dimensions of data loaded from SCI
	NRRD so that rows and columns will follow Matlab's coordinates.

	* FiltersToolbox/scinrrd_ndgrid.m:

	- Fix bug. Limits for x-coordinates were used for y-coordinates
	and viceversa.

2010-02-08  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scirunnrrd_optimal_intersecting_plane.m:

	- Remove temporal code. Add avals, vvals, mvals as output
	arguments to monitor evolution of optimisation algorithm. Add v0,
	rad as input arguments, so that the initial vector is not hard
	coded, and radius of smoothing operators.

2010-02-07  Ramon Casero  <rcasero@gmail.com>

	* FiltersToolbox/scirunnrrd_optimal_intersecting_plane.m:

	- Remove quaternions and use the normal vector to the plane as
	optimization variable. The function has some debugging code, it's
	still in development. The optimisation is getting trapped in local
	minima; it's not clear whether this is because of the
	trabeculations, or because the normal vector is not a good
	parameter to optimise.

2010-02-06  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scinrrd_intersect_plane.m:

	- SCINRRD_INTERSECT_PLANE  Compute intersection of a plane with an
	SCI NRRD image volume.

	* Add FiltersToolbox/scinrrd_squeeze.m:

	- SCINRRD_SQUEEZE Remove dummy dimension and convert data to
	double type.

	* Add FiltersToolbox/scinrrd_ndgrid.m:

	- Generation of arrays for 3D SCI NRRD image volumes.

2010-02-05  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scirunnrrd_optimal_intersecting_plane.m:

	- SCIRUNNRRD_INTERSECT_PLANE  Optimise intersection plane for SCI
	NRRD segmentation mask.

2010-02-04  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/quaternion2matrix.m:

	- Convert quaternion to rotation matrix. Function written
	originally by Vicente Grau.

	* Add PointsToolbox/polycenter.m:

	- POLYCENTER  Compute center of mass of polygon.

2010-02-02  Ramon Casero  <rcasero@gmail.com>

	* Add FiltersToolbox/scinrrd_vertical_rot3.m:

	- Compute the 3D rotation matrix to make a point cloud vertical.

2010-01-26  Ramon Casero  <rcasero@gmail.com>

	* src/PadSegmentationMaskWithVoxels.cxx:

	- Remove some redundant lines of code.

2010-01-25  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/scirunnrrd_pca.m:

	- SCIRUNNRRD_PCA Principal Principal Component Analysis of the
	selected points in a SCI NRRD segmentation mask.

	* Add PointsToolbox/pts_pca.m:

	- PTS_PCA Linear and Kernel Principal Component Analysis (PCA and
	KPCA).

	This function was in my internal repository (r9953, v3.0,
	2008-06-14 22:07:56 +0100). I started developing it for my DPhil
	thesis at the Wolfson Medical Vision Laboratory, University of
	Oxford (2006-08-31 18:56:56 +0100).

	* Add PointsToolbox/pts_kmat.m:

	- PTS_KMAT Compute kernel matrix for Linear and Kernel Principal
	Component Analysis (PCA and KPCA).

	This function was in my internal repository (r7928, v2.3,
	2007-08-26 17:20:26 +0100). I started developing it for my DPhil
	thesis at the Wolfson Medical Vision Laboratory, University of
	Oxford (2007-06-09 15:27:07 +0100).

2009-12-08  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/dcm2metaimage.m:

	- Read the resolution values from the DICOM header, if possible.

	- Add input arguments crop, ext, file and rewrite the function so
	that it does the same as im2metaimage().

2009-12-07  Ramon Casero  <rcasero@gmail.com>

	* Add FileFormatToolbox/sortdirbynum.m:

	- SORTDIRBYNUM List the files in a directory ordering them by a
	numerical substring field in the file name

	* FileFormatToolbox/im2metaimage.m:

	- Add input arguments for image file extension and the possibility
	to contribute the image file listing, intead of using an internal
	DIR().

2009-11-25  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/dcm2mat.m:

	- In case of a time series, we assume that all frames for slice 1
	are in consecutive DICOM files. Then all the frames for slice 2,
	and so on.

	Note that the output matrix is permuted to have the indices in the
	order (I,J,N,F), where N is the slice index and F is the frame
	index.

2009-11-24  Ramon Casero  <rcasero@gmail.com>

	* FileFormatToolbox/dcm2mat.m:

	- Add block to detect time series and create 4D volumes, if
	necessary.

	- If output filename is empty, call it 'im.mat'.

2009-11-23  Ramon Casero  <rcasero@gmail.com>

	* Add FileFormatToolbox/dcm2mat.m:

	- Read a batch of DICOM files, collate them and save as a single
	volume in a .mat file.

	* FileFormatToolbox/dcm2metaimage.m:

	- Fix bug with wrong function call.

2009-11-18  Ramon Casero  <rcasero@gmail.com>

	* Add copyright and licence notices.

	* Add README file with list of available programs.

	* Add src/PadSegmentationMaskWithVoxels.cxx.

	- Program to pad the sides of a 3D segmentation mask
	(e.g. produced by Seg3D) with new voxels.

2009-11-04  Ramon Casero  <rcasero@gmail.com>

	* README:

	- Add scirunnrrd_index2world.m and scirunnrrd_world2index.m.

	* Add FileFormatToolbox/scirunnrrd_index2world.m:

	- SCIRUNNRRD_INDEX2WORLD Convert data volume indices to real world
	coordinates for NRRD volumes created by SCI
	applications (e.g. Seg3D).

	* Add FileFormatToolbox/scirunnrrd_world2index.m:

	- SCIRUNNRRD_WORLD2INDEX Convert real world coordinates to data
	volume indices for NRRD volumes created by SCI
	applications (e.g. Seg3D).

2009-09-11  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/PointsToolbox/cube_five_tessellation.m:

	- CUBE_FIVE_TESSELLATION Tessellation in 5 tetrahedra of a cube
	with perpendicular diagonals on opposite sides of the
	cube (non-stackable).

2009-09-10  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox/PointsToolbox/cube_stackable_tessellation.m:

	- CUBE_STACKABLE_TESSELLATION  Tessellation in tetrahedra of a
	cube that can be stacked in a regular mesh.

2009-09-09  Ramon Casero  <rcasero@gmail.com>

	* Add PointsToolbox for functions that deal with points.

	* Create directories for FileFormatToolbox and FiltersToolbox, and
	split existing functions accordingly. As more functions are added
	to the project, we'll need to organize them anyway.

2009-09-08  Ramon Casero  <rcasero@gmail.com>

	* Add src/ExtractVoxelCoordinatesFromSegmentationMask.cxx ,
	src/CMakeLists.txt:

	- Program to extract the coordinates of voxels selected in a
	segmentation mask.

2009-08-24  Ramon Casero  <rcasero@gmail.com>

	* Add LICENCE, ChangeLog, README.

	* HamamatsuDecoder.java, ImageDecoderAdapter.java:

	- Add copyright headers.

2009-08-24  Gil Bub  <gilbub@gmail.com>

	* Add HamamatsuDecoder.java, ImageDecoderAdapter.java:

	- HamamatsuDecoder.java: Decoder for Hamamatsu photodiode array.
	- ImageDecoderAdapter.java: General adapter class
2009-07-20  Ramon Casero  <rcasero@gmail.com>

	* Add README:

	- To document available shell scripts in Gerardus.

	* Add images2avi.sh:

	- Create an AVI video from a stack of images.

2009-07-16  Ramon Casero  <rcasero@gmail.com>

	* release 0.1

	* First public release to project Gerardus in Google Code of this
	Matlab Toolbox.

	- http://code.google.com/p/gerardus

	* Add README with help for functions in the Toolbox.

	* WriteMetaFile.h -> WriteRawFile.h:

	- Correct name, as "Meta" could refer to MetaImage, the format
	that includes both the mha header and the raw file.

	* dcm2metadata.m -> dcm2metaimage.m, im2metadata.m ->
	im2metaimage.m:

	Correct filenames and function names, because we are create
	MetaImage files, not "metadata".

	* Add LICENCE with text of the GPL v3, and corresponding copyright
	notices to all files.

2009-04-03  Ramon Casero  <rcasero@gmail.com>

	* Add correct_light_blobs_in_microscope_mosaic.m:

	- CORRECT_LIGHT_BLOBS_IN_MICROSCOPE_MOSAIC Correct the colour blob
	created by the microscope's light in each tile of a mosaic,
	e.g. for histology.

2009-04-02  Ramon Casero  <rcasero@gmail.com>

	* Add dcm2metadata.m:

	- DCM2METADATA  Read a batch of DICOM files, collate them and save
	as a single metadata volume (one .mha and one .raw file).

	* Add matlab2vox_seg3d.m:

	- MATLAB2VOX_SEG3D Convert Matlab file with Seg3D segmentation to
	vox format (for the Tarantula meshing application).

2009-03-18  Ramon Casero  <rcasero@gmail.com>

	* im2metadata.m:

	- Add input argument "crop", so that the volume can be cropped
	before saving.

	* WriteMhaFile.m:

	- Add help comments.

	- Write 'Offset' line to file, so that cropped data is correctly
	placed.

2009-01-19  Ramon Casero  <rcasero@gmail.com>

	* WriteMhaFile.m, WriteMetaFile.m:

	- Increase precission for values of ElementSpacing, from 4 digits
	to 12 digits, to make sure that we can save spacings in microns.

	* Add im2metadata.m.

	- IM2METADATA Read a batch of image files, collate them and save
	as a single metadata volume (one .mha and one .raw file).

2009-01-15  Ramon Casero  <rcasero@gmail.com>

	* WriteMhaFile.m, WriteMetaFile.m: v0.2.

	- Add MET_USHORT as output type for uint16 input data.

	- Add error message if the data type is not one of the expected
	types. Otherwise, no ElementType header is added to the file, this
	is not reported, and then Seg3D (and possibly other image
	visualisation applications) will fail to open the file.

2009-01-14  Ramon Casero  <rcasero@gmail.com>

	* Add files provided by Martin Bishop to write metadata
	files. These files were actually created originally by Vicente
	Grau.
