博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双边过滤器(Bilateral filter)
阅读量:5748 次
发布时间:2019-06-18

本文共 1913 字,大约阅读时间需要 6 分钟。

hot3.png

double gausssian5[25]={0.0000,0.0000,0.0002,0.0000,0.0000,0.0000,0.0113,0.0837,0.0113,0.0000,0.0002,0.0837,0.6187,0.0837,0.0002,0.0000,0.0113,0.0837,0.0113,0.0000,0.0000,0.0000,0.0002,0.0000,0.0000};
void Bilateralfilter(int* src,int* result,int Width,int Height)
{
    //复制图片数据
    int* src0=new int[Width*Height*3];
    double* rst0=new double[Width*Height*3];
    for(int i=0;i<Width*Height*3;++i)
    {
        rst0[i]=src0[i]=src[i];
    }
    //构造色差矩阵
    double* secha=new double[256*256];
    for(int i=0;i<256;++i)
    {
        for(int j=0;j<256;++j)
        {
            int index=j*256+i;
            int distance=(i-j)*(i-j);
            secha[index]=exp(-0.5L*distance/200);
        }
    }
    //5*5 双边 算子
    double suanzi[25];
    //RGB 分别计算
    for(int z=0;z<3;++z)
    {
        for(int i=2;i<Width-2;++i)
        {
            for(int j=2;j<Height-2;++j)
            {
                rst0[(j*Width+i)*3+z]=0;
                double total=0.0L;
                for(int m=-2,m0=0;m<3;++m,++m0)
                {
                    for(int n=-2,n0=0;n<3;++n,++n0)
                    {
                        int color1=src0[(j*Width+i)*3+z];
                        int color2=src0[((j+n)*Width+i+m)*3+z];
                        double dr=secha[color1*256+color2];
                        dr=dr*dr;
                        suanzi[m0+n0*5]=dr*gausssian5[m0+n0*5];
                        total+=suanzi[m0+n0*5];
                        rst0[(j*Width+i)*3+z]+=src0[((j+n)*Width+i+m)*3+z]*suanzi[m0+n0*5];
                    }    
                }
                if(total!=0)
                {
                    rst0[(j*Width+i)*3+z]=rst0[(j*Width+i)*3+z]/total;
                }    
                else
                {
                    rst0[(j*Width+i)*3+z]=src0[(j*Width+i)*3+z];
                }
            }
        }
    }
    int err=0;
    for(int i=0;i<Width*Height*3;++i)
    {
        //四舍五入,转型,拷贝
        result[i]=(int)(rst0[i]+0.5);
    }
    //删除临时数据
    delete[] secha;
    delete[] src0;

}

//另附一个收集的5阶高斯算子

1/273*[[1,4,7,4,1],[4,16,26,16,4],[7,26,41,26,7],[4,16,26,16,4],[1,4,7,4,1]]

//另附两个LoG算子

-2 -4 -4  -4 -2

-4 0 8    0   -4
-4 8 24   8  -4
-4 0 8   0  -4
-2 -4 -4 -4 -2

0 0 -1 0    0

0 -1 -2 -1    0
-1 -2 16 -2    -1
0 -1 -2 -1   0 
0 0 -1 0   0
  

susan算子:

OffSetX[37] = { -1, 0, 1,

-2,-1, 0, 1, 2,
-3,-2,-1, 0, 1, 2, 3,
-3,-2,-1, 0, 1, 2, 3,
-3,-2,-1, 0, 1, 2, 3,
-2,-1, 0, 1, 2,
-1, 0, 1 };

OffSetY[37] = { -3,-3,-3,

-2,-2,-2,-2,-2,
-1,-1,-1,-1,-1,-1,-1,
0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
3, 3, 3 };

转载于:https://my.oschina.net/jingshishengxu/blog/137894

你可能感兴趣的文章
freeze
查看>>
SAP HANA存储过程结果视图调用
查看>>
设计模式 ( 十八 ):State状态模式 -- 行为型
查看>>
OracleLinux安装说明
查看>>
nova分析(7)—— nova-scheduler
查看>>
Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)
查看>>
OpenMediaVault 搭建git,ssh无法连接问题
查看>>
java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
查看>>
【Web动画】SVG 实现复杂线条动画
查看>>
使用Wireshark捕捉USB通信数据
查看>>
Apache Storm 官方文档 —— FAQ
查看>>
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
排序高级之交换排序_冒泡排序
查看>>
Cocos2d-x3.2 Ease加速度
查看>>