基于模糊规则的金属腐蚀类型判决算法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\008.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