模糊逻辑图像处理

此示例显示如何使用模糊逻辑进行图像处理。具体地,该示例示出了如何检测图像中的边缘。

边缘是两个均匀区域之间的边界。通过比较相邻像素的强度,可以检测边缘。然而,因为均匀区域没有清晰地定义,所以两个相邻像素之间的小强度差异并不总是表示边缘。相反,强度差异可能代表着阴影效果。

图像处理的模糊逻辑方法允许您使用会员函数来定义像素所属的程度或均匀区域。

导入RGB图像并转换为灰度

导入图像。

irgb = imread('peppers.png');

IRGB.是384 x 512 x 3uint8.大批。三个渠道IRGB.(第三个阵列维度)表示图像的红色,绿色和蓝色强度。

兑换IRGB.到灰度,以便您可以使用2-D阵列而不是三维数组。为此,使用RGB2GRAY.功能。

IGRAY = RGB2GRAY(IRGB);图图像(IGRAI,'cdatamapping''缩放')Colormap('灰色的') 标题('灰度中的输入图像'

将图像转换为双精度数据

evalfis.评估模糊推理系统的功能仅支持单精度和双精度数据。金宝app因此,转换Igay.到A.双倍的数组使用im2double.功能。

i = im2double(igray);

获取图像梯度

该示例的模糊逻辑边缘检测算法依赖于图像梯度以定位均匀区域中的断裂。计算沿着的图像梯度X-axis和y-轴。

GX.GY.是简单的渐变过滤器。获取包含该矩阵X-AXIS梯度一世,你围捕一世GX.使用Conv2.功能。梯度值位于[-1 1]范围内。同样,获得y-AXIS梯度一世,卷积一世GY.

gx = [-1 1];gy = gx';ix = conv2(i,gx,'相同的');iy = conv2(我,gy,'相同的');

绘制图像渐变。

图图像(IX,'cdatamapping''缩放')Colormap('灰色的') 标题('ix'

图图像(IY,'cdatamapping''缩放')Colormap('灰色的') 标题('IY'

您可以使用其他过滤器获取图像渐变,例如Sobel运算符或ProWitt运算符。有关如何使用卷积过滤图像的信息,请参阅空间域中的图像过滤是什么?(图像处理工具箱)

或者,如果您有图像处理工具箱软件,则可以使用Imfilter.imgradientxy., 或者Imgradient.函数以获取图像渐变。

为边缘检测定义模糊推理系统(FIS)

为边缘检测创建模糊推理系统(FIS),edgefis.

edgefis = mamfis('名称''edgedetection');

指定图像渐变,IX.IY.,作为输入的输入edgefis.

EdgeFIS = AddInput(EdgeFIS,[ -  1 1],'名称''ix');EdgeFIS = AddInput(EdgeFIS,[ -  1 1],'名称''IY');

为每个输入指定零均匀的高斯成员资格函数。如果像素的梯度值是0.,然后它属于具有程度的零会员函数1

sx = 0.1;sy = 0.1;edgefis = addmf(边缘码,'ix''Gaussmf',[sx 0],'名称''零');edgefis = addmf(边缘码,'IY''Gaussmf',[sy 0],'名称''零');

SX.SY.为零成员函数指定标准偏差IX.IY.输入。要调整边缘检测器性能,可以更改值SX.SY.。增加值使算法对图像中的边缘的敏感性不太敏感,并降低检测到的边缘的强度。

将边缘检测图像的强度指定为输出的edgefis.

EdgeFIS = AddOutput(EdgeFIS,[0 1],'名称''iout');

指定三角形隶属函数,白色和黑色,IOUT.

wa = 0.1;WB = 1;WC = 1;ba = 0;bb = 0;BC = 0.7;edgefis = addmf(边缘码,'iout''trimf',[wa wb wc],'名称''白色的');edgefis = addmf(边缘码,'iout''trimf',[bb bc],'名称''黑色的');

尽可能多SX.SY.,您可以更改值WB.厕所BA.BB., 和公元前调整边缘检测器性能。三态元指定成员函数三角形的起始,峰值和结束。这些参数影响检测到的边缘的强度。

绘制输入和输出的隶属函数edgefis.

图形子图(2,2,1)plotmf(边缘fis,'输入',1)标题('ix')子图(2,2,2)plotmf(边缘fis,'输入',2)标题('IY')子图(2,2,[3 4])plotmf(边缘fis,'输出',1)标题('iout'

指定FIS规则

如果它属于均匀区域和黑色,则添加规则以制作像素白色。当图像梯度在两个方向上为零时,像素在均匀区域中。如果任一方向具有非零梯度,则像素处于边缘。

R1 =“如果ix为零并且iy为零,则iout是白色的”;r2 =“如果ix不是零,或者iy不是零,那么iout是黑色的”;edgefis = addrule(边缘fis,[R1 R2]);edgefis.rules.
ANS = 1x2具有属性的FISRule数组:说明前所未有的重量连接详细信息:描述____________________________________1“IX == ZERO和IY == ZERO => IOUT = WHITE(1)”2“IX〜= ZERE | IY〜= ZERO | IY〜= ZERO |iout = black(1)“

评估FIS.

为每行像素进行评估边缘检测器的输出一世使用相应的行IX.IY.作为输入。

ieval = zeros(尺寸(i));为了II = 1:尺寸(i,1)ieval(ii,:) = evalfis(Edgefis,[(ix(ii,:));(iy(ii,:))]');结尾

绘图结果

绘制原始灰度图像。

图图像(我,'cdatamapping''缩放')Colormap('灰色的') 标题('原始灰度图像'

绘制检测到的边缘。

图图像(ieval,'cdatamapping''缩放')Colormap('灰色的') 标题('边缘检测使用模糊逻辑'

也可以看看

相关话题