模糊逻辑图像处理

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

的边缘是两台同类区域之间的边界。您可以通过比较相邻像素的强度检测边缘。然而,由于均匀的区域没有脆限定,两个相邻的像素之间的小的强度差异并不总是代表的边缘。相反,强度差可能是一个阴影效果。

用于图像处理的模糊逻辑方法允许您使用隶属函数来定义,其中像素属于边缘或统一区域的程度。

导入RGB图像,并转换为灰度

导入图像。

IRGB = imread('peppers.png');

IRGB是一个384×512×3UINT8阵列。的三个通道IRGB(第三阵列的尺寸)表示图像的红色,绿色和蓝色强度。

兑换IRGB为灰度,以便可以用2-d阵列的代替3-d阵列工作。要做到这一点,使用rgb2gray功能。

Igray = rgb2gray(IRGB);图图像(Igray,'CDataMapping'“缩放”)颜色表('灰色')标题(“输入图像中的灰度”

图像转换为双精度数据

evalfis函数,用于评估模糊推理系统仅支持单精度和双精度数据。万博1manbetx因此,转换Igray阵列使用im2double功能。

I = im2double(Igray);

获取图像梯度

这个例子的模糊逻辑的边缘检测算法依赖于图像的梯度来定位均匀区域断裂。计算沿图像的梯度X轴和ÿ-轴。

GX戈瑞是简单的梯度过滤器。以获得含有一个矩阵X- 轴的梯度一世,你卷积一世GX使用CONV2功能。梯度值在[-1 1]范围内。类似地,为了获得ÿ- 轴的梯度一世,卷积一世戈瑞

GX = [-1 1];戈瑞=的Gx';IX = CONV2(I,GX,'相同');IY = CONV2(I,戈瑞,'相同');

画出图像梯度。

图图像(IX,'CDataMapping'“缩放”)颜色表('灰色')标题(“九”

图图像(IY,'CDataMapping'“缩放”)颜色表('灰色')标题('IY'

您可以使用其他过滤器来获得图像梯度,如Sobel算子或Prewitt算。有关如何使用过滤卷积的图像信息,请参阅什么是图像过滤在空间域?(图像处理工具箱)

另外,如果您有图像处理工具箱软件,可以使用imfilterimgradientxy, 要么imgradient函数来获取所述图像梯度。

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

对于边缘检测创建一个模糊推理系统(FIS),edgeFIS

edgeFIS = mamfis('名称'“边缘检测”);

指定图像梯度,IY,作为输入edgeFIS

edgeFIS = addInput(edgeFIS,[ -  1 1],'名称'“九”);edgeFIS = addInput(edgeFIS,[ -  1 1],'名称''IY');

指定每个输入零均值高斯隶属函数。如果用于像素的梯度值是0的话,就属于零隶属函数具有一定程度的1

SX = 0.1;SY = 0.1;edgeFIS = addMF(edgeFIS,“九”'gaussmf'[SX 0],'名称''零');edgeFIS = addMF(edgeFIS,'IY''gaussmf'[SY 0],'名称''零');

SXSY指定了零隶属函数的标准偏差IY投入。要调整边缘检测器的性能,你可以改变的值SXSY。增加值使得算法的图像的边缘较不敏感,并降低了检测到的边缘的强度。

指定边缘检测图像的强度作为输出edgeFIS

edgeFIS = addOutput(edgeFIS,[0 1],'名称''IOUT');

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

WA = 0.1;WB = 1;WC = 1;BA = 0;BB = 0;BC = 0.7;edgeFIS = addMF(edgeFIS,'IOUT''trimf',[WA WB WC]'名称''白色');edgeFIS = addMF(edgeFIS,'IOUT''trimf'[BA BB BC]'名称''黑色');

你可以用SXSY,你可以改变的值WAWB厕所BABB公元前调整边缘检测器的性能。三胞胎指定开始,峰值和隶属函数的三角形的结束。这些参数会影响所检测的边缘的强度。

绘制的输入和输出的从属关系函数edgeFIS

图副区(2,2,1)plotmf(edgeFIS,“输入”,1)标题(“九”)副区(2,2,2)plotmf(edgeFIS,“输入”,2)标题('IY')副区(2,2,[3 4])plotmf(edgeFIS,“输出”,1)标题('IOUT'

指定FIS规则

添加规则,使一个像素的白色,如果它属于一个统一的区域和黑色的除外。像素是在统一区域时,图像梯度是在两个方向上为零。如果任一方向具有非零梯度,则该像素是在边缘上。

R1 =“如果九是零和1y为零,则Iout为白色”;R2 =“如果九不为零或1y不为零,则Iout为黑”;edgeFIS = addRule(edgeFIS,[R1 R2]);edgeFIS.Rules
ANS = 1x2的fisrule阵列属性:说明先行随之而来的体重连接细节:说明_______________________________________ 1 “九==零&IY ==零=> IOUT =白色(1)” 2“九〜=零| IY〜=零=>IOUT =黑(1)”

评估FIS

评价边缘检测器的输出,用于在每行像素一世使用的相应的行IY作为输入。

Ieval =零(大小(I));对于II = 1:尺寸(I,1)Ieval(II,:) = evalfis(edgeFIS,[(九(二,:));(IY(II,:))]');结束

绘图结果

绘制原灰度图像。

图形图像(I,'CDataMapping'“缩放”)颜色表('灰色')标题(“原始灰度图像”

绘制检测到的边缘。

图图像(Ieval,'CDataMapping'“缩放”)颜色表('灰色')标题(“边缘检测采用模糊逻辑”

也可以看看

相关话题