[数字图像处理]模糊算法用于图像增强 您所在的位置:网站首页 模糊算法控制原理是什么方法 [数字图像处理]模糊算法用于图像增强

[数字图像处理]模糊算法用于图像增强

2024-07-12 06:21| 来源: 网络整理| 查看: 265

模糊集合原理

       在计算机编程的时候,常常会使用一种“干脆的”集合。在判断某件事,或者某个变量的时候,常常使用的是布尔值(因为某件事,不是真就是假)。通过一个阈值,去判断这件事,而这样的一个阈值的设定,会产生一个问题。还是使用《Digital Image Processing》 Rafael C. Gonzalez / Richard E. Woods书中的例子,看以下两个图。

       当一个人的年龄超过20岁,那么这个人就不再属于年轻人范畴。这样来说,未免有些太过“残忍”,毕竟,20多岁的人还是“比较”年轻的。这里就出现了一个模糊的定义,“比较”年轻,这个集合既不属于年轻,也不属于非年轻,也就是其实年轻与非年轻之间的过度不应该是干脆的,而应该是渐进的过度。

       定义Z为对象集,其中,z表示Z中的一类元素(比如z表示年龄)。Z中的一个模糊集合A主要由一个隶属度(Degree of membership)来表示。对此,模糊集合A是一个由z值和隶属度函数组成的集合,即

的时候,所有的z是模糊集合A的完全成员‘;当的时候,所有的z都不是模糊集合A的成员,当的值介于0和1之间,那么此时的z称为模糊集合A的不完全成员。

       下面,还有几个重要的性质。

       对于所有的,模糊集合A的补集(NOT),其隶属度函数如下所示。

       对于所有的,模糊集合A与模糊集合B的并集(OR)U,其隶属度函数如下所示。

       对于所有的,模糊集合A与模糊集合B的交集(AND)I,其隶属度函数如下所示。

       到这里,其实已经可以用模糊集合来做一些事情了。对于一个问题的处理,在使用模糊集合来解决的时候,我们可以参考以下步骤。首先,需要将输入量折算为隶属度,这个过程叫做“模糊化”。然后,使用得到的隶属度来进行计算,或者判断,或者其他更复杂的算法。最后,需要将隶属度再次折算为输出,这个过程称为“去模糊”或者“反模糊”。

       通过下面两个例子,来具体体会一下模糊算法在图像处理上的运用。

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

       使用模糊集合来进行灰度变换,从而增强图像。首先可以在常理下考虑一下,一般的对于动态范围较小的图像,我们一般的处理的方法是灰度拉升,或者直方图均衡。这两种的方法的本质就是,让原图较暗的像素更加暗,让原图较亮的像素更加亮。那么,我们规定如下模糊规则

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

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

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

       这个规则就代表了我们的处理方法。当然,IF条件中的像素是暗的(或者灰的,或者是亮的),这个概念都是模糊的。同理THEN结论中的更暗(或者保持灰的,或者更亮)亦是模糊的。为此,我们需要确立一个隶属度函数,从而来判断一个像素对于三个条件的隶属度。

       实际上,隶属度函数的确定是很复杂的,然而,这里我们则尽量想得简单一点。首先,一个像素是暗的(模糊),那么其隶属度函数大致的形状是,在低于某个值的时候域隶属度为1,在灰度越过某一个值之后,其隶属度为0,当然。然后之间进行线性插值,那么,我们就可以得到R1的隶属度函数了。同理,R2与R3也是一样的。

        为了简单起见,我们将THEN结论中的更暗设置为较为简单的函数。为了让这个像素更黑,其输出都为0。同理,为了使这个像素保持灰的,我们将其输出设为0.5,为了使得一个像素更亮,我们将其设置为1。

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

       使用输入的隶属度函数,可以得到模糊化后的数据。对于一个像素,需要根据规则R1,R2与R3,计算出所对应的隶属度,这个过程,称之为模糊化。将一个输入量模糊化,所使用的函数(或者说是对应关系),称之为知识库。

       模糊化之后,得到一个像素所对应的三个隶属度之后,就可以进行反模糊化了。反模糊化的算法很多,这里使用简单的重心法去进行计算。

      到此,就得到了输出,整个算法的效果如下图所示。

       根据以上算法,所得到的结果还是比较理想的。从灰度直方图来看,处理后的图像的直方图的动态范围得到了扩展,所得的图像也比原图更加的明亮清晰,图片的一些细节处理的较为妥当。所使用的Matlab代码如下所示。

function [drak,gray,brig] = Fuzzy_Knowledge(Intensity) if(Intensity = 0.5) drak = double(0); else drak = (0.5 - double(Intensity))/(0.22); end if(Intensity >= 0.72) brig = double(1); elseif(Intensity = 0.72) gray = double(0); elseif(Intensity


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有