In EBSD-Image, the procedure of going from diffraction patterns to indexed solutions is called an experiment. This includes, of course, several steps such as the Hough transform, peak detection and various other computations. It is the core of the EBSD-Image module. All the features, options and file formats in this module are used at one point or another by the experiment engine.
The following paragraphs explains the structure and the fundamental concepts of the engine. For a walkthrough guide on setting up an experiment and running it, please refer to How to run an experiment guide.
The design objectives of the experiment engine can be summarized by one word: flexibility. As a research and development tool, one should be able to adapt the experiment to match their specific needs. No hidden information or fudge factor. One should also be able to specify the outputs they want as well as all the steps to obtain these results. In summary, the users are given three levels of flexibility:
- To decide the steps towards an output
- To change any parameters
- To implement new algorithms inside the engine
The engine can be simplified into three parts:
As mentioned before, the inputs of the experiment are diffraction patterns. An experiment can be the analysis of one or a million diffraction patterns depending on the user’s needs, however each diffraction pattern is independently processed.
Patterns can be loaded from an image file, a folder containing many image files or an SMP file. The latter is a format specific to EBSD-Image. It allows to store a large quantity of diffraction pattern images in our file and load these images quickly.
We refer to the steps in the experiment as operation. They are closely related to the various type of maps available in RML-Image and EBSD-Image. An operation is a process taking one or many inputs and returning one or many outputs. The input(s) and output(s) are known a priori.
An experiment can be divided into five major steps:
The pattern operations consist in loading the diffraction pattern image and performing image analysis routines to enhance the pattern, remove noise, select a region of interest, etc.
The Hough operations are related to the Hough transform. This algorithm is used to transform the image space into the Hough space. The Kikuchi bands in the diffraction pattern are converted to peaks. One can select the resolution of the Hough transform, operations to select a region of the Hough space, etc.
Peak detection operations
The next step is to located the peaks in the Hough transform. First algorithms such as the butterfly convolution mask can be used to selectively enhance the peaks in Hough space. Different peak detection algorithms are available to perform a thresholding of the Hough map.
Peak positioning operations
The result of the previous step is a binary map. Therefore, the next step is to identify the peaks by measuring their position in the Hough space ( and ) as well as their intensity. Operations to clean unwanted peaks or to look for specific peaks can be performed as part of this step.
Finally, using the identified Hough peaks, the indexing can be performed. In other words, the orientation and the phase of the initial diffraction pattern is calculated. A goodness of fit value is also provided to evaluate how closely the solution(s) match(es) the identified Hough peaks.
More specifically, the five major steps can be subdivided into sub-steps or categories. Overall, the experiment engine goes through 18 categories of operations. Some categories can contain more than one operation, some can contain no operation and other can only contain one. The categories follow a logical chain of actions: the input of operation 2 is the output of operation 1 and the output of operation 2 will be the input of operation 3.
Each major step, previously discussed, contains 4 categories of operations except for the first one which only has 2 (4 x 4 + 2). Each group follows the same logic:
- An single operation which defines the group
- A set of operations to process the input(s) of this single operation
- A set of operations to process the output(s) of this single operation
- Finally, a set of operations to compute result(s) from this single operation
In order this gives:
- Results operations
The pre, post and results operations can contain zero or many operations, whereas the category operation can only contain one operation.
In summary, the experiment engine will process each category of operations as follows:
- Pattern post-operations
- Pattern results operations
- Hough pre-operations
- Hough operation
- Hough post-operations
- Hough results operations
- Peak detection pre-operations
A description and an example of a potential operation is given for each category in the following table:
|1||Pattern||Post||Process the diffraction pattern after it being loaded||Selecting the region of interest|
|2||Pattern||Results||Compute results from the diffraction pattern||Quality index using the pixels average|
|3||Hough||Pre||Process the diffraction pattern before the Hough transform||Median|
|4||Hough||Operation||Perform the Hough transform||Hough transform with a resolution of 0.5 deg.|
|5||Hough||Post||Process the Hough transform||Truncate edges|
|6||Hough||Results||Compute results from the Hough transform||Quality index from the range of the Hough|
|7||Peak detection||Pre||Process the Hough transform prior to the peak detection||Butterfly convolution|
|8||Peak detection||Operation||Detect the peaks in the Hough transform||Top hat thresholding|
|9||Peak detection||Post||Process the detected peaks to remove unwanted peaks||Remove small peaks|
|10||Peak detection||Results||Compute results from the detected peaks||Quality index using the number of detected peaks|
|11||Peak positioning||Pre||Process detected peaks prior to their positioning||Keep only peaks of a certain shape|
|12||Peak positioning||Operation||Identify Hough peaks (position and intensity) from the detected peaks||Find the position using the local centroid of each peak|
|13||Peak positioning||Post||Process the identified Hough peaks|
|14||Peak positioning||Results||Compute results from the identified Hough peaks||Image quality index|
|15||Indexing||Pre||Process the Hough peaks before the indexing||Select most intense peaks|
|16||Indexing||Operation||Index the Hough peaks to potential solutions (phase and orientation)||Automated indexing from Krieger Lassen|
|17||Indexing||Post||Process the solutions to find the best one||Lowest misfit|
|18||Indexing||Results||Save orientation and phase of the solution||Euler angles|
Each category is defined by a distinct set of inputs and outputs. A summary of each category is given in the following table.
|2||Pattern||Results||ByteMap||array of byte or float|
|6||Hough||Results||HoughMap||array of byte or float|
|10||Peak detection||Results||BinMap||array of byte or float|
|12||Peak positioning||Operation||BinMap and HoughMap||array of Hough peak|
|13||Peak positioning||Post||array of Hough peak||array of Hough peak|
|14||Peak positioning||Results||array of Hough peak||array of byte or float|
|15||Indexing||Pre||array of Hough peak||array of Hough peak|
|16||Indexing||Operation||array of Hough peak||array of Solution|
|17||Indexing||Post||array of Solution||array of Solution|
|18||Indexing||Results||array of Solution||array of byte or float|
All the outputs of the experiment engine are saved in an EbsdMMap. In short, a multimap is a container of many maps, all sharing the same image dimensions. A new map is created for each result. For example, the image quality is saved in a RealMap and the orientation (given as a quaternion is saved as four RealMap, one for each coefficient of the quaternion. There is no limit or restriction on what type of results can be saved, as long as a result can be expressed as a number or a set of numbers.
The dimensions (width and height) of the result maps inside the EbsdMMap depends on the size of the mapping. If only one diffraction pattern is analyzed, the maps have a 1x1 dimension.
The operations used in the experiment and their parameters are saved in a human readable and editable XML file located in the working directory.