Grain Boundary Properties edit page

In this section we discus geometric properties that can be derived from grain boundaries. Lets start by importing some EBSD data and computing grain boundaries.

% load some example data
mtexdata twins
ebsd.prop = rmfield(ebsd.prop,{'error','bands'});

% detect grains
[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd('indexed'));

% smooth them
grains = grains.smooth;

% visualize the grains
plot(grains,grains.meanOrientation)

% extract all grain boundaries
gB = grains.boundary;

hold on
plot(gB,'LineWidth',2)
hold off
ebsd = EBSD
 
 Phase  Orientations     Mineral         Color  Symmetry  Crystal reference frame
     0     46 (0.2%)  notIndexed                                                 
     1  22833 (100%)   Magnesium  LightSkyBlue     6/mmm       X||a*, Y||b, Z||c*
 
 Properties: bands, bc, bs, error, mad, x, y
 Scan unit : um

Property overview

A variable of type grainBoundary contains the following properties

ebsdId

neighboring pixel ids

phaseId

neighboring phase ids

grainId

neighboring grain ids

F

vertices ids of the segments

segLength

length of each segment

direction

direction of each segment

midPoint

mid point of the segment

curvature

curvature of each segment

misorientation

between ebsdId(:,1) and ebsdId(:,2)

componentId

connected component id

componentSize

connected component size

The first three properties refer to \(N \times 2\) matrices where \(N\) is the number of boundary segments. Each row of these matrices contains the information about the EBSD data, and grain data on both sides of the grain boundary. To illustrate this consider the grain boundary of one specific grain

gB8 = grains(8).boundary
gB8 = grainBoundary
 
 Segments  mineral 1  mineral 2
        8  Magnesium  Magnesium

This boundary consists of 6 segemts and hence ebsdId forms a 8x2 matrix

gB8.ebsdId
ans =
         843         676
         843         844
        1011         844
        1011        1012
        1011        1178
        1010        1177
        1010        1009
         843         842

It is important to understand that the id is not neccesarily the same as the index in the list. In order to index an variable of type EBSD by id and not by index the following syntax has to be used

ebsd('id',gB8.ebsdId)
ans = EBSD
 
 Phase  Orientations    Mineral         Color  Symmetry  Crystal reference frame
     1     16 (100%)  Magnesium  LightSkyBlue     6/mmm       X||a*, Y||b, Z||c*
 
   Id   Phase   phi1   Phi   phi2    bc    bs   mad     x     y   grainId   phi1   Phi   phi2
  843       1    115    16    218   170   176   0.7   2.1   1.5         8     56     0    304
  843       1    115    16    218   170   176   0.7   2.1   1.5         8     56     0    304
 1011       1    115    16    219   182   174   0.5   2.4   1.8         8    340     0     20
 1011       1    115    16    219   182   174   0.5   2.4   1.8         8    340     0     20
 1011       1    115    16    219   182   174   0.5   2.4   1.8         8    340     0     20
 1010       1    114    16    219   164   158   0.5   2.1   1.8         8    217     0    143
 1010       1    114    16    219   164   158   0.5   2.1   1.8         8    217     0    143
  843       1    115    16    218   170   176   0.7   2.1   1.5         8     56     0    304
  676       1      5    80    195   176   196   0.5   2.1   1.2        21    340     3     18
  844       1      4    81    195   174   197   0.3   2.4   1.5        21    332     3     27
  844       1      4    81    195   174   197   0.3   2.4   1.5        21    332     3     27
 1012       1      4    81    195   176   168   0.4   2.7   1.8        21    332     3     26
 1178       1      5    81    195   174   181   0.5   2.4   2.1        21    337     3     21
 1177       1      5    81    195   168   171   0.3   2.1   2.1        21    334     3     24
 1009       1      5    81    195   156   160   0.4   1.8   1.8        21    335     3     23
  842       1      5    80    195   167   170   0.5   1.8   1.5        21    340     3     18
 Scan unit : um
 Grid size (square): 8 x 2

Similarly

gB8.grainId
ans =
     8    21
     8    21
     8    21
     8    21
     8    21
     8    21
     8    21
     8    21

results in 9x2 matrix indicating that grain 8 is an inclusion of grain 21.

plot(grains(8),'FaceColor','DarkBlue','micronbar','off')
hold on
plot(grains(21),'FaceColor','LightCoral')
hold off

Grain boundary misorientations

The grain boundary misorientation defined as the misorientation between the orientations corresponding to ids in first and second column of ebsdId, i.e. following two commands should give the same result

gB8(1).misorientation

inv(ebsd('id',gB8.ebsdId(1,2)).orientations) .* ebsd('id',gB8.ebsdId(1,1)).orientations
ans = misorientation (Magnesium → Magnesium)
  antipodal:         true
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  330.172 86.1071 150.366       0
 
 
ans = misorientation (Magnesium → Magnesium)
 
  Bunge Euler angles in degree
     phi1     Phi    phi2    Inv.
  330.172 86.1071 150.366       0

Note that in the first result the antipodal flag is true while it is false in the second result.

Obviously, misorientations of a list of grain boundaries can only be extracted if all of them have the same type of phase transition. Let us consider only Magnesium to Magnesium grain boundaries, i.e., ommit all grain boundaries to an not indexed region.

gB_Mg = gB('Magnesium','Magnesium')
gB_Mg = grainBoundary
 
 Segments  mineral 1  mineral 2
     3219  Magnesium  Magnesium

Then the misorientation angles can be plotted by

plot(gB_Mg,gB_Mg.misorientation.angle./degree,'linewidth',4)
mtexColorbar('title','misorientation angle (°)')

Geometric properties

The direction property of the boundary segments is usefull when checking for tilt and twist boundaries, i.e., when we want to compare the misorientation axis with the interface between the grains

% compute misorientation axes in specimen coordinates
ori = ebsd('id',gB_Mg.ebsdId).orientations;
axes = axis(ori(:,1),ori(:,2),'antipodal')

% plot the angle between the misorientation axis and the boundary direction
plot(gB_Mg,angle(gB_Mg.direction,axes),'linewidth',4)
axes = vector3d
 size: 3219 x 1
 antipodal: true

We observe that the angle is quite oscilatory. This is because of the stair casing effect when reconstructing grains from gridded EBSD data. The weaken this effect we may average the segment directions using the command calcMeanDirection

% plot the angle between the misorientation axis and the boundary direction
plot(gB_Mg,angle(gB_Mg.calcMeanDirection(4),axes),'linewidth',4)

The midPoint property is usefull when TODO:

While the command

length(gB_Mg)
ans =
        3219

gives us the total number of all Magnesium to Magnesium grain boundary segements the following command gives us its their total length in um.

sum(gB_Mg.segLength)
ans =
  837.4641

Connected components

TODO: explain this in more detail

components = unique(gB.componentId);
for cId = components.'
  plot(gB(gB.componentId == cId),'lineColor',ind2color(cId),...
    'micronbar','off','lineWidth',4,'displayName',num2str(cId))
  hold on
end
hold off