模糊逻辑图像处理
这个例子展示了如何使用模糊逻辑进行图像处理。具体来说,这个例子展示了如何检测图像中的边缘。
边是两个均匀区域之间的边界。您可以通过比较相邻像素的强度来检测边缘。然而,由于均匀区域不是清晰定义的,两个相邻像素之间的小强度差异并不总是代表一条边。相反,强度的差异可能代表阴影效果。
图像处理的模糊逻辑方法允许使用隶属函数来定义像素属于边缘或均匀区域的程度。
导入RGB图像并转换为灰度
导入映像。
Irgb = imread(“peppers.png”);
Irgb
是384 x 512 x 3吗uint8
数组中。的三个渠道Irgb
(第三个数组维度)表示图像的红、绿、蓝强度。
转换Irgb
到灰度,这样你就可以使用二维数组而不是三维数组了。要做到这一点,请使用rgb2gray
函数。
grey = rgb2gray(Irgb);数字图像(Igray“CDataMapping”,“缩放”) colormap (“灰色”)标题(“输入灰度图像”)
将图像转换为双精度数据
的evalfis
模糊推理系统的评估函数只支持单精度和双精度数据。万博1manbetx因此,转换Igray
到一个双
数组使用im2double
函数。
I = im2double(灰度);
获取图像梯度
本例的模糊逻辑边缘检测算法依赖于图像梯度来定位均匀区域的断口。计算图像梯度沿x设在和y设在。
Gx
而且孔侑
都是简单的渐变过滤器。得到一个包含x的-轴梯度我
卷积我
与Gx
使用conv2
函数。梯度值在[-1 1]范围内。类似地,得到y的-轴梯度我
,卷我
与孔侑
.
Gx = [-1 1];Gy = Gx';Ix = conv2(I,Gx,“相同”);Iy = conv2(I,Gy,“相同”);
绘制图像梯度。
图图像(第九,“CDataMapping”,“缩放”) colormap (“灰色”)标题(“九”)
数字图像(Iy“CDataMapping”,“缩放”) colormap (“灰色”)标题(“Iy”)
您可以使用其他过滤器来获得图像梯度,例如Sobel算子或Prewitt算子。有关如何使用卷积过滤图像的信息,请参见什么是空间域的图像滤波?(图像处理工具箱)
或者,如果您有“图像处理工具箱”软件,您可以使用imfilter
(图像处理工具箱),imgradientxy
(图像处理工具箱),或imgradient
(图像处理工具箱)函数来获取图像的梯度。
定义模糊推理系统(FIS)用于边缘检测
建立边缘检测的模糊推理系统(FIS),edgeFIS
.
edgeFIS = mamfis(“名字”,“edgeDetection”);
指定图像的梯度,9
而且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),“名字”,“零”);
sx
而且sy
的零隶属函数的标准偏差9
而且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(edgeFIS,“Iout”,“trimf”,[wa wb wc],“名字”,“白色”);edgeFIS = addMF(edgeFIS,“Iout”,“trimf”,[ba bb bc],“名字”,“黑”);
你可以用sx
而且sy
,您可以更改的值佤邦
,白平衡
,wc
,英航
,bb
,公元前
调整边缘检测器的性能。三元组指定成员函数三角形的开始、峰值和结束。这些参数影响被检测边缘的强度。
的输入和输出的隶属函数edgeFIS
.
figure subplot(2,2,1)“输入”1)标题(“九”) subplot(2,2,2)“输入”2)标题(“Iy”) subplot(2,2,[3 4])“输出”1)标题(“Iout”)
指定FIS规则
添加规则使像素如果属于统一区域则为白色,否则为黑色。当图像梯度在两个方向上都为零时,像素处于均匀区域。如果任何一个方向的梯度都非零,那么像素就在一条边上。
r1 ="如果Ix是0 Iy是0那么Iout是白色的";r2 ="如果Ix不为零或Iy不为零那么Iout是黑色的";edgeFIS = addRule(edgeFIS,[r1 r2]);edgeFIS。规则
详细信息:描述_______________________________________ 1 "Ix== 0 & Iy== 0 => Iout=white (1)"2 "Ix~= 0 | Iy~= 0 => Iout=黑(1)"
评估金融中间人
中的每一行像素计算边缘检测器的输出我
使用相应的行9
而且Iy
作为输入。
Ieval = 0 (size(I));为2 = 1:尺寸(我,1)Ieval (ii):) = evalfis (edgeFIS, [(Ix (ii,:)); (Iy (ii,:))] ");结束
阴谋的结果
绘制原始灰度图像。
图图像(我“CDataMapping”,“缩放”) colormap (“灰色”)标题(“原始灰度图像”)
绘制检测到的边缘。
数字图像(Ieval“CDataMapping”,“缩放”) colormap (“灰色”)标题(“用模糊逻辑进行边缘检测”)