Symmetry-based filter for feature extraction - Example
By exploiting the (prior) knowledge that certain microstructural features should, on average, have a certain symmetry, it was possible to develop an automated technique for identifying their locations within a complex microstructure. Subsequently, this technique is applied to a single crystal nickel-based superalloy to identify dendrite core locations by using their four-fold symmetry as viewed along the <100> growth direction. Results of such a technique show good agreement with time-intensive manual identification of dendrite core locations. This page shows an example of how to use the MATLAB script developed to analyze the data in these papers.
Author(s): Mark A. Tschopp
All materials required to get started are included below. Test images (the segmentation of eutectic particles and mount material have already been done):
The code is given here:
Here is a quick tutorial on how to use this code:
1. Store the original image as a variable I.
2. Segment all features that would confound the symmetry analysis. For instance, the mount material may cause problems or eutectic particles, per the journal papers referenced. Store them in a logical variable I1.
3. Set the intensities of all confounding features to 0 in variable I, i.e.,
I = imread('image_original.tif'); I1 = imread('image_confounding_features.tif'); I(I1) = 0;
4. The file above can now be used with the nonlinear filter command to use the fourfold symmetry filter. The first variable is the image. The second variable is the size of the filter. The third variable is the handle for the function used in the nonlinear filter.
% Symmetry filter I2 = nlfilter(I1,[49 49],@fourfold_rev1);
where this command calls the following file, fourfold_rev.m, i.e.,
function [a] = fourfold_rev1(x) middle_pixel = (size(x,1)+1)/2; if x(middle_pixel,middle_pixel) ~= 0 mount = x ~= 0; x = double(x); a = zeros(size(x)); b = uint8(zeros(size(x))); for i = 1:4 a = a + x; b = b + uint8(mount); x = rot90(x); mount = rot90(mount); end a = a./double(b); a = sum((x(mount)-a(mount)).^2)/double(sum(mount(:))); a = sqrt(a); else a = 0; end
5. In a similar manner, the standard deviation can also be calculated. I made this customized as well, so that the confounding pixels are not included in the calculation.
% Standard Deviation filter used for weighting different filter sizes w = nlfilter(I1,[49 49],@stdfilt_rev1);
using this function:
function [a] = stdfilt_rev1(x) middle_pixel = (size(x,1)+1)/2; if x(middle_pixel,middle_pixel) ~= 0 x = double(x); mount = x ~= 0; b = x(mount); a = std(b); else a = 0; end
6. Repeat this for the different size filters that you would like to test. Note that this may not handle the edges of the image correctly and they may need to be cropped out.
7. Calculate a vector-based symmetry filtered image using different weightings (w1-w5) and symmetry-filtered images (I1-I5) at each scale with:
w_sum = w1 + w2 + w3 + w4 + w5; w1 = w1./w_sum; w2 = w2./w_sum; w4 = w4./w_sum; w3 = w3./w_sum; w5 = w5./w_sum; Ic = (w1.*(I1).^2 + w2.*(I2).^2 + w3.*(I3).^2 + ... w4.*(I4).^2 + w5.*(I5).^2).^(0.5);
8. Multiply this by the initial intensity, filter using a Gaussian filter and a tophat operation.
III = single(Ic).*single(I); h = fspecial('gaussian',25,3); J = imfilter(III,h,'symmetric'); se = strel('disk',24); J = imtophat(J,se);
9. The dendrite cores can now be identified using a simple threshold command.
MAT would like to acknowledge funding through the visiting scientist contract at the Air Force Research Laboratory on "Damage Mechanics Model Development for Monocrystalline Superalloys."
The initial methodology was used in the following papers:
- ↑ Tschopp, M.A., Groeber, M.A., Simmons, J., Rosenberger, A.H., Woodward, C., "Automated Extraction of Symmetric Microstructure Features in Serial Sectioning Images," Materials Characterization 61 (2010) 1406-1417, http://dx.doi.org/10.1016/j.matchar.2010.10.008.
- ↑ Tschopp, M.A., Groeber, M.A., Fahringer, R., Simmons, J., Rosenberger, A.H., Woodward, C., "Symmetry-Based Automated Extraction of Microstructural Features: Application to Dendritic Cores in Single Crystal Ni-Based Superalloys," Scripta Materialia, 62 (2010) 357-360, http://dx.doi.org/10.1016/j.scriptamat.2009.10.038.