1.anisotropic_diffusion(Image : ImageAniso : Mode, Contrast, Theta, Iterations : )
anisotropic_diffusion根据Perona和Malik模型,对输入图像Image 进行各向异性扩散。
这一过程也称为非线性各向同性扩散。
将图像看作是一个灰度值函数u,该算法是偏微分方程的离散化
图像Image 在一时刻t0,初始化u=u0
该方程以时间步长为 Theta进行迭代Iterations 次,使得输出图像ImageAniso包含在t0+Iterations *Theta时的灰度值函数。
各向异性扩散的目标是在保持图像边缘不变的情况下,消除图像中的噪声。
通过对相邻像素灰度值差异大小的阈值对比度来实现边缘与固定块的区分。
对比度被称为对比度参数,缩写为字母c。
变量扩散系数g可以选择为不同的单调递减函数,取值范围在0到1之间,决定扩散过程对边缘的响应。
通过参数Mode,可以选择以下功能:
通过将模式设置为“parabolic”来选择函数g1,保证了相关微分方程是抛物型的,
从而使问题存在一个完备的理论,并且对于任意步长Theta都是稳定的。
然而,在这种情况下,即使在高度大于c的情况下,仍然存在轻微的扩散。
在《Perona》和《Malik》的出版中,对于Mode的选择“Perona - Malik”,并不具g1的理论性质,
但在实践中已经被证明是足够稳定的,因此得到了广泛的应用。
理论上的不稳定性导致了强边的轻微锐化。
由Weickert提出的常数C=3.31488的函数g3,可通过设置模式为“Weickert”进行选择,
是对边缘锐化的改进。
平滑和锐化之间的过渡在x = c^2处发生得非常突然。
例程:
read_image (Images, 'mreut')
anisotropic_diffusion (Image, ImagePeronaMalik, 'perona-malik', 3, 10, 1)
2.guided_filter(Image, ImageGuide : ImageGuided : Radius, Amplitude : )
guided_filter使用引导图像ImageGuide过滤输入图像Image,并在ImageGuided中返回结果。
Image和ImageGuide必须具有相同的大小和类型。
Radius是滤波器掩模的大小。
数值越大,滤波器的影响面积越大,保留的细节越少。
半径Radius的值不影响操作符的运行时间。
振幅用来决定什么是边,什么是均匀区域。
较大的振幅值导致更强的边缘被平滑。
根据经验,振幅应该低于应该保留的边缘的对比度。
请注意,uint2或real图像的对比度可能与振幅的默认值有显著差异,并相应地调整参数。
例程:
read_image (Image, 'mreut')
* 边缘保留地平滑图像
guided_filter (Image, Image, ImageGuided, 5, 20)
gen_image_proto (Image, ImageGuide, 0)
for I := 1 to 5 by 1
guided_filter (Image, ImageGuide, ImageGuide, 5, 20)
endfor
3.gauss_filter(Image : ImageGauss : Size : )
gauss_filter使用离散高斯函数(高斯函数的离散逼近)平滑图像,
平滑效果随滤波器尺寸的增大而增大。
支持以下滤波器尺寸(Size)(高斯函数的sigma值用括号表示):
3 (0.600)
5 (1.075)
7 (1.550)
9 (2.025)
11 (2.550)
对于边界处理,图像的灰度值反映在图像边界处。
注意,与操作符gauss_image相反,过滤器掩码大小与其对应的sigma参数值之间的关系是线性的。
操作符binomial_filter可以用作gauss_filter的替代。
binomial_filter明显快于gauss_filter。
需要注意的是,binomial_filter中的掩码大小不会导致与gauss_filter中的掩码大小相同的平滑量。
根据高斯平滑参数sigma的各自值,可以确定相应的掩模尺寸。
gauss_filter可以在OpenCL设备上为所有支持的图像类型执行。
然而,OpenCL 可以产生与标量实现略有不同的结果。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
gauss_filter(Image,Gauss,7)
regiongrowing(Gauss,Segments,7,7,5,100)
4.binomial_filter(Image : ImageBinomial : MaskWidth, MaskHeight : )
使用掩码大小为MaskWidth * MaskHeight像素的二项式滤波器对图像Image 进行平滑处理,
并以ImageBinomial返回经过平滑处理的图像。
二项式滤波器是高斯滤波器的一个很相似的函数,它可以非常有效地实现只用整数运算。
因此,binomial_filter非常快。
设m = MaskHeight, n = MaskWidth。
滤波器系数bij由二项式系数给出
则有
这里,i = 0,…, m-1, j = 0,…,n - 1。
二项式滤波器的平滑效果与带
的高斯滤波器近似,
为简便起见,设m = n,其中n与a的关系为:
如果选择不同的MaskHeight和MaskWidth值,则n和a之间的上述关系仍然成立,并表示行和列方向上的平滑量。
对于所有受支持的图像类型,binomial_filter可以在OpenCL设备上执行。
例程:
read_image (Image, 'fuse')
binomial_filter (Image, ImageBinomial, 3, 3)
|