From f85337776b1cc9bc25697437d4230e3a9f1d232a Mon Sep 17 00:00:00 2001
From: patmjen <patmjen@dtu.dk>
Date: Wed, 10 Nov 2021 11:25:21 +0100
Subject: [PATCH] Add README

---
 README.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 97 insertions(+)
 create mode 100644 README.md

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..687e6c0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,97 @@
+# Structure Tensor
+
+Simple MATLAB package for computing structure tensors for 3D images.
+Uses GPU block processing for high performance.
+
+  
+
+## Installation
+
+Simply copy the `structuretensor` directory to you project.
+
+Then call `addpath structuretensor` in MATLAB.
+
+  
+
+## Examples
+**Simple example**: just get the eigenvalues and eigenvectors.
+```matlab
+addpath structuretensor
+
+% Make simple volume with one rod aligned with the Y-axis.
+vol = zeros(128, 128, 128);
+vol(60:70, :, 60:70) = 1;
+
+% Set structure tensor parameters.
+sigma = 2;
+rho = 4;
+
+% Compute structure tensor eigenvalues and eigenvectors.
+% By default, the function uses the GPU if one is available.
+% See also help StructureTensorEig3 for more info.
+[E, X, Y, Z] = StructureTensorEig3(vol, sigma, rho,...
+	 'BlockSize', 64,... % Use 64x64x64 blocks. Can also give block as [W,H,D].
+	 'Verbose', true);   % Print a loadbar to show progress.
+
+% Show smallest eigenvector in the middle of the volume.
+% Notice it is aligned with the Y-axis.
+disp([X{1}(65,65,65), Y{1}(65,65,65), Z{1}(65,65,65)]);
+```
+
+**Only compute the smallest eigenvector.** This saves a lot of time and memory. Since the smallest eigenvector gives the local orientation it is usually the only one we care about.
+
+```matlab
+addpath structuretensor
+
+% Make simple volume with one rod aligned with the Y-axis.
+vol = zeros(128, 128, 128);
+vol(60:70, :, 60:70) = 1;
+
+% Set structure tensor parameters.
+sigma = 2;
+rho = 4;
+
+% Compute structure tensor eigenvalues and eigenvectors.
+% By default, the function uses the GPU if one is available.
+% See also help StructureTensorEig3 for more info.
+[E, X, Y, Z] = StructureTensorEig3(vol, sigma, rho,...
+	 'BlockSize', 64,... % Use 64x64x64 blocks.  Can also give block as [W,H,D].
+	 'Verbose', true,... % Print a loadbar to show progress.
+	 'NumEigVecs', 1);   % Only return 1 eigenvector (the smallest).
+
+% Show smallest eigenvector in the middle of the volume.
+% Notice it is aligned with the Y-axis.
+disp([X{1}(65,65,65), Y{1}(65,65,65), Z{1}(65,65,65)]);
+```
+
+**Compute both the structure tensor components and eigenvectors/values**.
+```matlab
+addpath structuretensor
+
+% Make simple volume with one rod aligned with the Y-axis.
+vol = zeros(128, 128, 128);
+vol(60:70, :, 60:70) = 1;
+
+% Set structure tensor parameters.
+sigma = 2;
+rho = 4;
+
+% Compute structure tensor components.
+% By default, the function uses the GPU if one is available.
+% See also help StructureTensor3 for more info.
+[T11, T22, T33, T12, T13, T23] = StructureTensor3(vol, sigma, rho,...
+	'BlockSize', 64,... % Use 64x64x64 blocks. Can also give block as [W,H,D].
+	'Verbose', true);   % Print a loadbar to show progress.
+
+% Compute structure tensor eigenvalues and eigenvectors.
+% By default, the function uses the GPU if one is available.
+% See also help EigRealSymm3 for more info.
+[E, X, Y, Z] = EigRealSymm3(T11, T22, T33, T12, T13, T23,...
+	 'BlockSize', 64,... % Use 64x64x64 blocks. Can also give block as [W,H,D].
+	 'Verbose', true); % Print a loadbar to show progress.
+
+% Show smallest eigenvector in the middle of the volume.
+% Notice it is aligned with the Y-axis.
+disp([X{1}(65,65,65), Y{1}(65,65,65), Z{1}(65,65,65)]);
+```
+
-- 
GitLab