【问题标题】:Bilateral filter [closed]双边过滤器[关闭]
【发布时间】:2011-08-07 10:35:19
【问题描述】:

在给定高斯滤波器的情况下,如何实现双边滤波器?

【问题讨论】:

    标签: algorithm vision


    【解决方案1】:

    一个简单的双边滤波器可以定义为

    Inew (x,y) = Summation(j=yn/2; j

    其中常见的低通滤波器,例如高斯滤波器,根据内核中心 (x,y) 到每个像素 (i, j)。对于双边滤波器,权重基于两个距离确定:图像空间距离和颜色空间距离。

    下面是一个简单的C实现

    void convolution(uchar4 *_in, uchar4 *_out, int width, int height, int ~ halfkernelsize, float id, float cd)
    { 
      int kernelDim = 2*halfkernelsize+1;
    for(int y=0; y float sumWeight = 0; unsigned int ctrIdx = y*width + x; float ctrPix[3]; ctrPix[0] = _in[ctrIdx].x; ctrPix[1] = _in[ctrIdx].y; ctrPix[2] = _in[ctrIdx].z; // neighborhood of current pixel int kernelStartX, kernelEndX, kernelStartY, kernelEndY; kernelStartX = x-halfkernelsize; kernelEndX = x+halfkernelsize; kernelStartY = y-halfkernelsize; kernelEndY = y+halfkernelsize; for(int j= kernelStartY; j<= kernelEndY; j++) { for(int i= kernelStartX; i<= kernelEndX; i++) { unsigned int idx = max(0, min(j, height-1))*width + max(0, min(i,width-1)); float curPix[3]; curPix[0] = _in[idx].x; curPix[1] = _in[idx].y; curPix[2] = _in[idx].z; float currWeight; // define bilateral filter kernel weights float imageDist = sqrt( (float)((i-x)*(i-x) + (j-y)*(j-y)) ); float colorDist = sqrt( (float)( (curPix[0] - ctrPix[0])*(curPix[0] - ctrPix[0]) + (curPix[1] - ctrPix[1])*(curPix[1] - ctrPix[1]) + (curPix[2] - ctrPix[2])*(curPix[2] - ctrPix[2]) ) ); currWeight = 1.0f/(exp((imageDist/id)*(imageDist/id)*0.5)*exp((colorDist/cd)*(colorDist/cd)*0.5)); sumWeight += currWeight; _sum[0] += currWeight*curPix[0]; _sum[1] += currWeight*curPix[1]; _sum[2] += currWeight*curPix[2]; } } _sum[0] /= sumWeight; _sum[1] /= sumWeight; _sum[2] /= sumWeight; _out[ctrIdx].x = (int)(floor(_sum[0])); _out[ctrIdx].y = (int)(floor(_sum[1])); _out[ctrIdx].z = (int)(floor(_sum[2])); _out[ctrIdx].w = _in[ctrIdx].w; } }

    }

    【讨论】:

    • 此代码无法编译。在函数的开头有一个不完整的流浪 for 循环。我假设这个循环遍历每个像素。请考虑修复您的代码。
    猜你喜欢
    • 2020-03-12
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多