-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.md.bak
58 lines (35 loc) · 2.92 KB
/
README.md.bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# MicroMorph
MicroMorph: The Microplastic Shape and Size Analyzer
<p align="center">
<img src="screenshot.png">
</p>
## Fibers and Numbers (FAN)
FAN calculates the shape morphology and size of objects from the particle map provided by sIMPle (https://simple-plastics.eu/). It provides a graphical interface to inspect particles and their respective shape characteristics. The program calculates the following size and shape descriptors:
Size:
* Area, perimeter, minor dimension, major dimension, perimeter, and maximum and minimum Feret diameter
Shape:
* Convexity, convex area, solidity, equivalent circle diameter, circularity, compactness, aspect ratio, Feret ratio, fiber length, fiber curl, average fiber diameter, fiber elongation
FAN is written in C-idiomatic style C++ code with little use of C++ features (pretty much just std::vector).
### Contour tracing
First, it transverses through the array row wise and assigns the first pixel it encounters as the starting pixel of the boundary (b). Then the algorithm travels through the array in the Moore Neighbourhood until the starting pixel is reached again, see Fig. 1. The algorithm ONLY works for closed boundaries!
Algorithm:
1. Find the first non-zero pixel travelling row wise.
2. Set that index as the starting point as S.
3. Set the current index as p and add this to the boundary pixel list.
4. Set the previous index visited from p as b (backtraced pixel).
5. Go through the Moore Neighbourhood (3 * 3 pixels around p) starting from b and look for the first non-zero pixel in a clockwise rotation around p.
6. Repeat steps 3 to 5 until p is equal to S.
<p align="center">
<img src="fig01.png">
<figcaption align = "center">Figure 1: How the algorithm transverses through the particle pixel map and the resulting pixel boundary.</figcaption>
</p>
### Fiber Length
Fiber length is calculated by the following approach:
1. Find the skeleton of the object (Figure 2 B).
2. Find pixels in the skeleton with only one non-zero neighbour skeleton pixel (Fiure 2 C). Define them as endpoints.
3. Find the shortest distance between all endpoints and select the longest of the shortest paths (Figure 2 D).
The skeleton is calculated using the Zhang-suen thinning algorithm. Endpoints are found by visiting each skeleton pixel and find the pixels with only one neighbour skeleton pixel. The shortest distance between each endpoint is found by the breath first search algorithm. The longest path is found by comparing each of the shortest paths between endpoints and selecting the longest. Hence, the fiber length is the longest shortest path between endpoints.
<p align="center">
<img src="fig02.png">
<figcaption align = "center">Figure 2: A: Particle before skeletonization. B: Morphological skeletonization of A. Notice multiple branches departing from the main skeleton. C: Endpoints of the skeleton. D: Longest path in skeleton between two endpoints. D is defined as the fiber length.</figcaption>
</p>