图 2.算法实现的主要代码
算法时间复杂度:O(m*n*(2r+1)
2
)
算法的改进:分析计算方法 1,很明显权重计算的几个加减乘除以及下面的那句判
断是比较耗时的,而其只是 Y-Value 的一个函数,因此,我们可以提前建立一个表,
该表的索引范围从 Min[Y - Value]到 Max[Y - Value]之间,很明显,这个范围是[-255,
255],因此,建立一个查找表。
对于彩色图像,一种做法就是直接扩展现在单通道的代码,让其支持三通道,另
外一个办法就是把图像先拆分成 3 通道独立的数据,然后没通道独立处理,处理完成
后再合成,这样做有两个好处,第一是代码复用;第二就是如果支持 Openmp 或者其
他的并行库,可以让 3 通道并行起来执行。但是也有 2 个不足,第一是内存占用会增
加很多,因为这种算法是不支持 In-Place 操作的,所以必须分配 6 份单通道的数据,
而算法内部分配的内存由于并行的关系也要增加一些(不是三倍),及时考虑到可以
把其中三个通道的数放置到 Dest 中,也会增加 3 份通道的数据。
针对实际的应用,一种可选的进一步加速的方式就是把图像的色阶范围进一步缩
小,比如由 256 色阶变为 128 或者 64 色阶,这样理论上还可以在快 2 倍到 4 倍,不过
效果会稍有下降,一般 128 位时还是可以接受的。
这里可以提升 10 倍左右速度,由于时间限制,暂时不做更多的研究和实现。
1.2 尝试 2:双边滤波
双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。和其他
滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代
表某个像素的强度,所用的加权平均基于高斯分布。最重要的是,双边滤波的权重不
仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影
响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程
度、颜色强度,深度距离等),在计算中心像素的时候同时考虑这两个权重。
公式 1a,1b 给出了双边滤过的操作,Iq 为输入图像,Ipbf 为滤波后图像: