cleanUpPseudoSym Corrects pseudo-symmetry artifacts in a single phase using tortuosity.
A pseudo symmetry is a rotation which is not a symmetry of the crystal but maps the diffraction pattern almost onto itself, such that the indexing picks between the two solutions at random. The resulting boundaries follow the indexing noise and are therefore much more tortuous, i.e. much longer relative to the distance between their end points, than real grain boundaries. This command merges all grains separated by such a boundary and rotates the affected pixels by the pseudo symmetry.
Since the phase to be corrected is determined by the symmetry of mori, only one phase is treated per call. To clean up pseudo-symmetries in multiple phases, run this function for each phase individually. Grain boundaries should not have been smoothed before, as this destroys exactly the tortuosity the detection is based on.
Syntax
[ebsd, grainsM, numChanged] = cleanUpPseudoSym(ebsd, grains, mori)
[ebsd, grainsM, numChanged] = cleanUpPseudoSym(ebsd, grains, mori, 'threshold', 1.5)Input
| ebsd | EBSD object, with grainId set by EBSD.calcGrains |
| grains | grain2d object |
| mori | rotation or orientation (array of pseudo-symmetries, same CS and SS) |
Output
| ebsd | updated EBSD object |
| grainsM | merged grain2d object |
| numChanged | number of pixels that changed orientation |
Options
| 'delta' | Tolerance for boundary misorientation angle to match pseudo-symmetry (default: 2*degree) |
| 'threshold' | Minimum tortuosity (boundary length / straight distance) to trigger merge (default: 1.5) |
Example
mtexdata forsterite
ebsd = ebsd('indexed');
[grains,ebsd] = calcGrains(ebsd,'angle',10*degree,'minPixel',5);ebsd = EBSD (y↑→x)
Phase Orientations Mineral Color Symmetry Crystal reference frame
0 58485 (24%) notIndexed none
1 152345 (62%) Forsterite LightSkyBlue mmm
2 26058 (11%) Enstatite DarkSeaGreen mmm
3 9064 (3.7%) Diopside Goldenrod 12/m1 X||a*, Y||b*, Z||c
Properties: bands, bc, bs, error, mad
Scan unit : um
X x Y x Z : [0, 36550] x [0, 16750] x [0, 0]
Normal vector: (0,0,1)the pseudo hexagonal oxygen sublattice of olivine
psSym = orientation.byAxisAngle(Miller(1,0,0,ebsd('Fo').CS,'uvw'),[60 120]*degree);[ebsd,grains] = cleanUpPseudoSym(ebsd,grains,psSym)ebsd = EBSD (y↑→x)
Phase Orientations Mineral Color Symmetry Crystal reference frame
0 876 (0.47%) notIndexed none
1 152478 (81%) Forsterite LightSkyBlue mmm
2 26336 (14%) Enstatite DarkSeaGreen mmm
3 7777 (4.1%) Diopside Goldenrod 12/m1 X||a*, Y||b*, Z||c
Properties: bands, bc, bs, error, mad, grainId
Scan unit : um
X x Y x Z : [0, 36550] x [0, 16750] x [0, 0]
Normal vector: (0,0,1)
grains = grain2d (y↑→x)
Phase Grains Pixels Mineral Symmetry Color
0 14 19 notIndexed none
1 489 151516 Forsterite mmm LightSkyBlue
2 218 25725 Enstatite mmm DarkSeaGreen
3 187 7509 Diopside 12/m1 Goldenrod
boundary segments: 35640 (1.7e+06 µm)
inner boundary segments: 190 (8818 µm)
triple points: 1485
Properties: meanRotation, GOS