接上篇文章,这次双边滤波处理的是彩色图。
下面是函数代码:
function J=btfColorImage(I,G,sigma_d,sigma_r,filterRadius)
x=-filterRadius:filterRadius;
y=-filterRadius:filterRadius;
[xx,yy]=meshgrid(x,y);
spatialKernel=exp(- (xx.^2+yy.^2)/(2*sigma_d^2));
[rows,cols,channels]=size(I);
rc=zeros(size(I(:,:,1)));
gc=zeros(size(rc));
bc=zeros(size(gc));
if size(G,3)==1
temp=G;
G(:,:,1)=temp;
G(:,:,2)=temp;
G(:,:,3)=temp;
end
parfor y=filterRadius+1:rows-filterRadius
for x=filterRadius+1:cols-filterRadius
roi= I(y-filterRadius:y+filterRadius,x-filterRadius:x+filterRadius,:);
roidif=zeros(size(roi));
roidif(:,:,1)=roi(:,:,1)-G(y,x,1);
roidif(:,:,2)=roi(:,:,2)-G(y,x,2);
roidif(:,:,3)=roi(:,:,3)-G(y,x,3);
roidif=roidif.^2;
roidif=roidif(:,:,1)+roidif(:,:,2)+roidif(:,:,3);
tonalKerne