Compute the depth of each point of a sample relative to its surface whatever its geometry
The following script computes the ditance field between every point inside a *mask* and a *frontiere curve*:
function [ebsdAct] = add_dep_comp(ebsd, front_pic, mask_pic)
%Load and adapt
front = imread(front_pic);
masking = imread(mask_pic);
masking = flipdim(masking,2);
front = flipdim(front,2);
I_max = min([size(front,1), size(masking,1), size(ebsd,1)]);
J_max = min([size(front,2), size(masking,2), size(ebsd,2)]);
I_min = size(ebsd,1) - I_max+1;
ebsd = ebsd(I_min:size(ebsd,1), 1:J_max);
front = front(1:I_max, 1:J_max,:);
masking = masking(1:I_max, 1:J_max,:);
% cut frontier
hsvValues = rgb2hsv(front);
hueValue = hsvValues(:,:,1);
ebsd.prop.hue = hueValue;
ebsdFront = ebsd(ebsd.hue>0.);
% mask
hsvValues2 = rgb2hsv(masking);
hueValue2 = hsvValues2(:,:,1);
ebsd.prop.mask = hueValue2;
ebsdAct = ebsd(ebsd.mask>0.);
% Get distance with frontiere
distTabAct = 10000*ones(ebsdAct.size);
for i=1:ebsdFront.size(1)
disp(strcat(string(i),"/",string(ebsdFront.size(1))))
distTabAct = min(distTabAct,sqrt((ebsdFront.x(i)-ebsdAct.x).^2 + (ebsdFront.y(i)-ebsdAct.y).^2));
end
ebsdAct.prop.dep = distTabAct;
end
The script takes three arguments:
- ebsd: the MTEX ebsd map object to put the distance field in. Note that the field dimensions should be the same than the picture resolution.
- front_pic: A picture where everything is black and white except the frontiere line.
- mask_pic: A picture where everything is black and white except the sample points used to compute the distance.
Here are two examples of picture that worked for me (left: frontiere, right: mask):

