[OpenCV] Image Processing - Fuzzy Set

时间:2023-12-24 15:13:55

使用模糊技术进行 (灰度变换Grayscale Transform) 和 (空间滤波Spatial Filtering)


模糊集合为处理不严密信息提供了一种形式。

首先,需要将输入量折算为隶属度,这个过程叫做“模糊化”。

然后,使用得到的隶属度来进行计算,或者判断,或者其他更复杂的算法。

最后,需要将隶属度再次折算为输出,这个过程称为“去模糊”或者“反模糊”。

使用模糊集合进行"灰度变换"

使用模糊集合来进行灰度变换,从而增强图像。首先可以在常理下考虑一下,一般的对于动态范围较小的图像,我们一般的处理的方法是灰度拉升,或者直方图均衡。

这两种的方法的本质就是,让原图较暗的像素更加暗,让原图较亮的像素更加亮。那么,我们规定如下模糊规则

R1:IF 一个像素是暗的,THEN 让这个像素更暗;

R2:IF 一个像素是灰的,THEN 让他保持是灰的;

R3:IF 一个像素是亮的,THEN 让这个像素更亮;

这个规则就代表了我们的处理方法。

当然,IF条件中的像素是暗的(或者灰的,或者是亮的),这个概念都是模糊的。

同理THEN结论中的更暗(或者保持灰的,或者更亮)亦是模糊的。

为此,我们需要确立一个隶属度函数,从而来判断一个像素对于三个条件的隶属度。

实际上,隶属度函数的确定是很复杂的,然而,这里我们则尽量想得简单一点。

首先,一个像素是暗的(模糊),那么其隶属度函数大致的形状是,

    • 在低于某个值[OpenCV] Image Processing - Fuzzy Set的时候域隶属度为1,
    • 在灰度越过某一个值[OpenCV] Image Processing - Fuzzy Set之后,其隶属度为0,
    • 当然[OpenCV] Image Processing - Fuzzy Set

然后[OpenCV] Image Processing - Fuzzy Set[OpenCV] Image Processing - Fuzzy Set之间进行线性插值,那么,我们就可以得到R1的隶属度函数了。同理,R2与R3也是一样的。

为了简单起见,我们将THEN结论中的更暗设置为较为简单的函数。

    • 为了让这个像素更黑,其输出都为0。同理,
    • 为了使这个像素保持灰的,我们将其输出设为0.5,
    • 为了使得一个像素更亮,我们将其设置为1。

根据以上讨论,我们所决定的隶属度函数如下所示。

使用输入的隶属度函数,可以得到模糊化后的数据。

对于一个像素[OpenCV] Image Processing - Fuzzy Set,需要根据规则R1,R2与R3,计算出[OpenCV] Image Processing - Fuzzy Set所对应的隶属度[OpenCV] Image Processing - Fuzzy Set[OpenCV] Image Processing - Fuzzy Set[OpenCV] Image Processing - Fuzzy Set

这个过程,称之为模糊化

将一个输入量模糊化,所使用的函数(或者说是对应关系),称之为知识库。

模糊集合的应用

[OpenCV] Image Processing - Fuzzy Set

有意思的表达方式,赞。

实例:

[OpenCV] Image Processing - Fuzzy Set

[OpenCV] Image Processing - Fuzzy Set

将隶属度函数重叠起来看,理解的重点:

[OpenCV] Image Processing - Fuzzy Set

[OpenCV] Image Processing - Fuzzy Set

关键就在这里,自定义了一个标准,这就是精髓。

结合公式来看,理解公式的含义:

[OpenCV] Image Processing - Fuzzy Set

得到一个权值衡量后的成熟度估计值,最为输出值。

但这样是不是计算量太大了点,对于每一幅图像,毕竟这么多像素要逐个计算。

但效果看上去还是不错的。


使用模糊集合进行"空间滤波"

模糊规则:

[OpenCV] Image Processing - Fuzzy Set         [OpenCV] Image Processing - Fuzzy Set

[OpenCV] Image Processing - Fuzzy Set

实例:

[OpenCV] Image Processing - Fuzzy Set