前情提要:毕业季许多同学要做扫描电镜,而背散射电子成像是分析材料第二相区域的有效方法(背散射电子像对原子序数敏感)。一般来说,使用ImageJ或PS软件可以手动调节材料的灰度区域,并计算出第二相区域的比例。但是,如果进行了大规模的对照试验需要得出统计规律时,这种方法面临许多问题:
在此提出一种针对大规模数据处理的材料第二相识别的MATLAB解决方案。
1 文件的读取
对于命名极有规律的电镜照片文件(如500-2-0003.tif)可以使用for循环结合sprintf函数生成文件名字符。在此需要注意,对于0003、0010这两种文件,sprintf中%d的数目不同。
for i=1:15
if i<10
X=sprintf('%d%s%d%s%d%d%d%d%s',500,'-',46,'-_',0,0,0,i,'.tif');
2 图像处理
首先看一张典型的背散射电子像图案:
某七系铝合金时效处理后的背散射电子像,第二相为含Cu金属间化合物故较亮
可以看到,第二相的边缘较为清晰,易于分辨,可以使用图形的二值化方法对图像进行处理后分辨第二相。同时注意到扫描电镜图像的背底中存在较多的椒盐噪声(类似于雪花点)。所以,对图像需要进行一步滤波处理。以上即为对电镜图象处理的基本思路。
首先,注意到图形的数据格式为rgb,要对图像进行灰度处理。
grayplot=rgb2gray(imread(X));
对于电镜图像中弥散分布的椒盐噪声,可以使用中值滤波的方法。中值滤波是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。
g=medfilt2(grayplot,'symmetric');
bw = im2bw(g);
其中,im2bw函数使用了Otsu算法对灰度图进行二值化,对于滤波后的电镜图象,效果良好。
导出二值化图像可以使用print函数
imshow(bw);
print(gcf,'-r300','-djpeg',X1);
二值化图像如下图所示:
二值化的背散射电子像
之后用find函数查找二值图像中白色像素点个数,比上总像素点个数就能得到第二相占总体比例。
[a,b]=size(bw);
part=[part length(find(bw==1))/(a*b)];
希望有帮助