赞
踩
目录
图像双边滤波是一种常用的图像滤波技术,它可以平滑图像并保留图像的边缘信息。然而,传统的双边滤波算法在处理大尺寸图像时,计算量较大,导致处理速度较慢。为了解决这个问题,研究者们提出了图像快速双边滤波算法。图像的双边滤波(Bilateral Filtering)是一种图像滤波技术,用于平滑图像的同时保留边缘信息。它在图像处理中常用于降噪和平滑的任务,与传统的高斯滤波不同,双边滤波考虑了像素之间的相似性,以及像素之间的距离,从而可以更精确地保留边缘细节。 双边滤波的核心思想是在滤波过程中,将一个像素的值进行加权平均,权重包括两部分:一个是像素值相似性的权重,另一个是像素位置距离的权重。换句话说,双边滤波会在保留边缘的同时,平滑那些在颜色上相似且距离较近的像素。
双边滤波算法采用一个二维高斯滤波器对图像进行平滑处理,并根据像素的位置和像素值之间的差异来调整平滑程度,从而保留图像的边缘信息。
图像快速双边滤波算法是一种改进的双边滤波算法,它采用了一种快速近似的高斯滤波方法,从而加速了滤波过程。具体来说,图像快速双边滤波算法可以分为以下步骤:
1.将输入图像$I_{\text{in}}$分解为不同尺度的图像$I_{\text{in}}^{(i)}$,其中$i$表示尺度。
2.对每个尺度的图像$I_{\text{in}}^{(i)}$进行高斯滤波处理,得到图像$G_{\sigma}^{(i)}$。
3.对每个尺度的图像$G_{\sigma}^{(i)}$进行双边滤波处理,得到图像$B_{\sigma}^{(i)}$。
4.将不同尺度的图像$B_{\sigma}^{(i)}$进行加权平均,得到最终输出图像$I_{\text{out}}$。
其中,高斯滤波和双边滤波的参数可以根据需要进行调整。
图像快速双边滤波算法的原理是利用高斯金字塔的结构将图像分解成不同尺度的图像,然后对每个尺度的图像进行双边滤波处理,最后将不同尺度的图像进行加权平均,从而得到最终输出图像。采用这种方法可以加速滤波过程,同时保留图像的边缘信息。
图像快速双边滤波算法利用高斯金字塔结构将图像分解成不同尺度的图像,然后对每个尺度的图像进行双边滤波处理,最后将不同尺度的图像进行加权平均,从而得到最终输出图像。采用这种方法可以加速滤波过程,同时保留图像的边缘信息。
滤波算法中,目标点上的像素值通常是由其所在位置上的周围的一个小局部邻居像素的值所决定。在2D高斯滤波中的具体实现就是对周围的一定范围内的像素值分别赋以不同的高斯权重值,并在加权平均后得到当前点的最终结果。而这里的高斯权重因子是利用两个像素之间的空间距离(在图像中为2D)关系来生成。通过高斯分布的曲线可以发现,离目标像素越近的点对最终结果的贡献越大,反之则越小。其公式化的描述一般如下所述:
高斯滤波在低通滤波算法中有不错的表现,但是其却有另外一个问题,那就是只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。这里的边缘主要是指图像中主要的不同颜色区域(比如蓝色的天空,黑色的头发等),而Bilateral就是在Gaussian blur中加入了另外的一个权重分部来解决这一问题。Bilateral滤波中对于边缘的保持通过下述表达式来实现:
综上所述,
优势:
难点:
双边滤波是一种结合了空间域和像素值相似性的图像滤波技术,可以在保留图像细节的同时实现降噪和平滑的效果,适用于需要保留边缘信息的图像处理任务。
- function [ outImg , param ] = shiftable_jointBF(inImg, rangeImg, sigmaS, sigmaR, w, tol)
-
-
- % create spatial filter
- filt = fspecial('gaussian', [w w], sigmaS);
-
- % set range interval and the order of raised cosine
- T = maxFilter(rangeImg, w);
- N = ceil( 0.405 * (T / sigmaR)^2 );
-
- gamma = 1 / (sqrt(N) * sigmaR);
- twoN = 2^N;
-
- % compute truncation
- if tol == 0
- M = 0;
- else
- if sigmaR > 40
- M = 0;
- elseif sigmaR > 10
- sumCoeffs = 0;
- for k = 0 : round(N/2)
- sumCoeffs = sumCoeffs + nchoosek(N,k)/twoN;
- if sumCoeffs > tol/2
- M = k;
- break;
- end
- end
- else
- M = ceil( 0.5 * ( N - sqrt(4*N*log(2/tol)) ) );
- end
- end
-
-
- % main filter
- [m, n, b] = size(inImg);
- outImg1 = zeros(m, n, b);
- outImg2 = zeros(m, n, b);
- outImg = zeros(m, n, b);
-
- warning off; %#ok<WNOFF>
-
- for k = M : N - M
-
- coeff = nchoosek(N,k) / twoN;
-
- temp1 = cos( (2*k - N) * gamma * rangeImg);
- temp2 = sin( (2*k - N) * gamma * rangeImg);
-
- if size(inImg, 3) > 1
- temp1 = repmat(temp1, [1 1 size(inImg, 3)]);
- temp2 = repmat(temp2, [1 1 size(inImg, 3)]);
- end
-
- phi1 = imfilter(inImg .* temp1, filt);
- phi2 = imfilter(inImg .* temp2, filt);
- phi3 = imfilter(temp1, filt);
- phi4 = imfilter(temp2, filt);
-
- outImg1 = outImg1 + coeff * ( temp1 .* phi1 + temp2 .* phi2 );
- outImg2 = outImg2 + coeff * ( temp1 .* phi3 + temp2 .* phi4 );
-
- end
-
- idx1 = find( outImg2 < 0.0001);
- idx2 = find( outImg2 > 0.0001);
-
- outImg( idx1 ) = inImg( idx1 );
- outImg( idx2 ) = outImg1( idx2 ) ./ outImg2 (idx2 );
-
- % save parameters
- param.T = T;
- param.N = N;
- param.M = M;
-
- up171
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。