Overview about colorizing grain boundaries
On this page ... |
The grain boundary |
Visualizing special grain boundaries |
Phase boundaries |
Subboundaries |
Misorientation |
Classifying special boundaries |
Let's import some EBSD data and compute the grains.
close all mtexdata forsterite plotx2east ebsd = ebsd('indexed'); [grains,ebsd.grainId] = calcGrains(ebsd); % remove very small grains ebsd(grains(grains.grainSize<=5)) = []; % and recompute grains [grains,ebsd.grainId] = calcGrains(ebsd); % smooth the grains a bit grains =smooth(grains,4)
grains = grain2d Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 426 151466 Forsterite mmm 2 200 25635 Enstatite mmm 3 142 7306 Diopside 12/m1 X||a*, Y||b*, Z||c boundary segments: 33636 triple points: 1347 Properties: GOS, meanRotation
The grain boundary of a list of grains can be extracted by
gB = grains.boundary plot(gB)
gB = grainBoundary Segments mineral 1 mineral 2 1355 notIndexed Forsterite 198 notIndexed Enstatite 36 notIndexed Diopside 13890 Forsterite Forsterite 10857 Forsterite Enstatite 5167 Forsterite Diopside 598 Enstatite Enstatite 1259 Enstatite Diopside 276 Diopside Diopside
Accordingly, we can access the grain boundary of a specific grain by
grains(267).boundary plot(grains(267).boundary,'lineWidth',2,'micronbar','off')
ans = grainBoundary Segments mineral 1 mineral 2 304 Forsterite Forsterite 126 Forsterite Enstatite 97 Forsterite Diopside
Let's combine it with the orientation measurements inside select axisAngle color key. This colorizes the mean orientation gray and deviations from the mean orientation according to the misorientation axis where saturation increases with the misorientation angle
ipfKey = axisAngleColorKey(grains(267)); % set the reference orientation to be the grain mean orientation ipfKey.oriRef = grains(267).meanOrientation; ipfKey.maxAngle = 4*degree; % get the ebsd data of grain 267 ebsd_267 = ebsd(grains(267)); % plot the orientation data hold on plot(ebsd_267,ipfKey.orientation2color(ebsd_267.orientations)) hold off
For a multi-phase system, the location of specific phase transistions may be of interest. The following plot highlights all Forsterite to Enstatite phase transitions
close all plot(grains,'faceAlpha',.3) hold on plot(grains.boundary('Fo','En'),'linecolor','r','linewidth',1.5) hold off
Another type of boundaries is boundaries between measurements that belong to the same grain. This happens if a grain has a texture gradient that loops around these two measurements.
close all plot(grains.boundary) hold on plot(grains.innerBoundary,'linecolor','r','linewidth',2)
The boundary misorientation is the misorientation between the two neighboring pixels of a boundary segment. Depending of the misorientation angle one distinguishes between high angle and low angle grain boundaries. In MTEX we can visualize the boundary misorientation angle by the commands
close all gB_Fo = grains.boundary('Fo','Fo'); plot(grains,'translucent',.3,'micronbar','off') legend off hold on plot(gB_Fo,gB_Fo.misorientation.angle./degree,'linewidth',1.5) hold off mtexColorbar('title','misorientation angle')
In order to visuale the full misorientation, i.e., axis and angle, one has to define a corresponding color key. One option is the color key described in the paper by S. Patala, J. K. Mason, and C. A. Schuh, Improved representations of misorientation information for grain boundary, Prog. Mater. Sci., vol. 57, no. 8, pp. 1383-1425, 2012.
close all plot(grains,'translucent',.3,'micronbar','off') legend off hold on % this reorders the boundary segement a a connected graph which results in % a smoother plot gB_Fo = gB_Fo.reorder; ipfKey = PatalaColorKey(gB_Fo); plot(gB_Fo,'linewidth',6) % on my computer setting the renderer to painters gives a much more % pleasent result %set(gcf,'Renderer','painters') hold on plot(gB_Fo,ipfKey.orientation2color(gB_Fo.misorientation),'linewidth',4) hold off
Lets visualize the color key as axis angle sections through the misorientation space
plot(ipfKey)
Actually, it might be more informative, if we classify the grain boundaries after some special property.
We can mark grain boundaries after its misorientation angle is in a certain range
close all
mAngle = gB_Fo.misorientation.angle./ degree;
hist(mAngle) [~,id] = histc(mAngle,0:30:120);
plot(gB,'linecolor','k') hold on plot(gB_Fo(id==1),'linecolor','b','linewidth',2,'DisplayName','<30^\circ') plot(gB_Fo(id==2),'linecolor','g','linewidth',2,'DisplayName','30^\circ-60^\circ') plot(gB_Fo(id==3),'linecolor','r','linewidth',2,'DisplayName','60^\circ-90^\circ') plot(gB_Fo(id==4),'linecolor','y','linewidth',2,'DisplayName','> 90^\circ') hold off
Or we mark the rotation axis of the misorientation.
close all plot(gB) hold on ind = angle(gB_Fo.misorientation.axis,xvector)<5*degree; plot(gB_Fo(ind),'linecolor','b','linewidth',2,'DisplayName','[100]')
Or we mark a special rotation between neighboured grains. If a linecolor is not specified, then the boundary is colorcoded after its angular difference to the given rotation.
rot = rotation.byAxisAngle(vector3d(1,1,1),60*degree); ind = angle(gB_Fo.misorientation,rot)<10*degree; close all plot(gB) hold on plot(gB_Fo(ind),'lineWidth',1.5,'lineColor','r') legend('>2^\circ','60^\circ/[001]')
Warning: Ignoring extra legend entries.
Another kind of special boundaries is tilt and twist boundaries. We can find a tilt boundary by specifying the crystal form, which is tilted, i.e. the misorientation maps a lattice plane of on grain onto the others grain lattice plane.
where are neighbored orientations. TODO
%close all %plot(grains.boundary) %hold on %plot(grains.boundary,'property',Miller(1,1,1),'delta',2*degree,... % 'linecolor','r','linewidth',1.5) %plot(grains.boundary,'property',Miller(0,0,1),'delta',2*degree,... % 'linecolor','b','linewidth',1.5) % %legend('>2^\circ',... % '\{111\}',... % '\{001\}')
DocHelp 0.1 beta |