基于模糊规则的金属腐蚀类型判决算法matlab仿真
一、理论基础
A不平整金属腐蚀
金属表面为不规则表明。识别方法:金属表面是否为直线。
B金属腐蚀点
金属腐蚀部分的长大于宽,并且它的面积不能远远大于它的长度。(V=L/D,V>1.5)
C金属坑腐蚀
金属腐蚀部分的长度几乎相等与宽度。(V=L/D,0.67<V<1.5)
D金属点腐蚀
金属腐蚀部分的长度远大于宽度(V=L/D,V<0.67)
E金属层下腐蚀
金属腐蚀部分不与金属表面接触。可以视为,金属黑点到金属表面的距离大于0. (d>0)
F金属层腐蚀
金属层腐蚀也属于金属层下腐蚀,只是它的金属腐蚀面积非常大,并且金属腐蚀部分表面的斜率L〈0.5,并且腐蚀率大于所有金属面积的0.1.
G晶间腐蚀
晶间腐蚀的特点是沿晶界的金属腐蚀区域而存在,金属腐蚀是沿着金属纹理而产生的,金属腐蚀部分的颜色比金属纹理更深。
H晶间腐蚀之向内局部纹理
这个和G类似,但是其特点是由表层向内的局部纹理腐蚀
整个算法的基本流程如下所示:
二、核心程序
clc; clear; close all; warning off; addpath func %读取图片 I = imread(samples 08.jpg); %形态学处理 [Is,I_gray] = func_preprocess(I); %特征提取 %根据如下的几个要点来提取特征; %提取金属表层数据,区分是否:不平整金属腐蚀; NUM = func_type1_feature(Is); Feature{1}= NUM; %提取金属腐蚀区域,计算面积和长宽比例,区分是否是金属腐蚀点、金属坑腐蚀、金属点腐蚀; [Ws,Hs] = func_type2_feature(Is); if isempty(Ws) == 0 Feature{2}(:,1)= Ws; Feature{2}(:,2)= Hs; else Feature{2}= []; end %提取金属腐蚀区域中面积较小的,统计其面积及个数,判断是否存在金属层下腐蚀; Area1 = func_type3_feature(Is); Feature{3}= Area1; %判断是否存在面积大于金属区域面积0.1腐蚀区域,判断是否有金属层腐蚀; Area2 = func_type4_feature(Is); Feature{4}= Area2; %提取纹理和腐蚀区域,如果纹理和腐蚀区域重合,则说明是晶间腐蚀,如果纹理和腐蚀区域不重合,则说明是穿晶腐蚀; [Area3,N] = func_texture_total(Is); Feature{5}= [Area3,N]; %模糊逻辑进行识别 flag = func_fuzzy_check(Feature); %显示具体腐蚀类型 func_type_check(flag);
function flag = func_fuzzy_check(Feature); flag1=0; flag2=0; flag3=0; flag4=0; flag5=0; flag6=0; flag7=0; flag8=0; Feature001 = Feature{1}; if isempty(Feature001) == 0 flag1 = func_fuzzy1(Feature001); else flag1 = 0; end Feature234 = Feature{2}; if isempty(Feature234) == 0 [flag2,flag3,flag4] = func_fuzzy2(Feature234); else flag2=0; flag3=0; flag4=0; end Feature005 = Feature{3}; if isempty(Feature005) == 0 flag5 = func_fuzzy3(Feature005); else flag5 = 0; end Feature006 = Feature{4}; if isempty(Feature006) == 0 flag6 = func_fuzzy4(Feature006); else flag6 = 0; end Feature078 = Feature{5}; if isempty(Feature078) == 0 [flag7,flag8] = func_fuzzy5(Feature078); else [flag7,flag8] = 0; end flag = [flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8];
三、测试结果
A10-18