资源简介
实现默认设置下的BM3D去噪算法,为简单起见,图像用PS转成纯数据的RAW格式
代码片段和文件信息
#include
#include
#include
#include
#define BlockSize1 8
#define BlockSize2 8
#define BlockStep1 3
#define BlockStep2 3
#define BlockSearch1 19
#define BlockSearch2 19
#define BlockMatch1 16
#define BlockMatch2 32
#define Threshold1 2500
#define Threshold2 400
#define Lemda1_3D 2.7//注意使用时要乘上噪声标准差
#define BetaHt 2.0
#define BetaWie 2.0
#define Width 256
#define Height 256
#define NoiseStadard 25.0
#define fillen_haar 2
#define fillen_bior 10
#define M_PI 3.1415926
///////////////////////////////////
static double KDCT[8][8];
static double KIDCT[8][8];
void DCTInit()
{
int ij;
double c0c1;
c0=1/sqrt(8.0);
c1=c0*sqrt(2.0);
for(i=0;i<8;i++)
for(j=0;j<8;j++)
KDCT[i][j]=cos((2*j+1)*i*M_PI/16.0);
//Normalization
for(i=0;i<8;i++)
if(i==0)
for(j=0;j<8;j++)
KDCT[i][j]*=c0;
else
for(j=0;j<8;j++)
KDCT[i][j]*=c1;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
KIDCT[i][j]=KDCT[j][i];
}
void DCT1D(double * x)//routine to perform 8 point 1-D DCT
{
int ij;
double y[8];//temp array
double t;
for(i=0;i<8;i++)
{
t=0.0;
for(j=0;j<8;j++)
t+=x[j]*KDCT[i][j];
y[i]=t;
}
for(i=0;i<8;i++)
x[i]=y[i];
}
void DCT2D(double * x)//routine to perform 8*8 point 2-D DCT
{
int ij;
double y[8];
//first row direction
for(i=0;i<8;i++)
DCT1D(x+8*i);
//then column direction
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
y[j]=*(x+8*j+i);
DCT1D(y);
for(j=0;j<8;j++)
*(x+8*j+i)=y[j];
}
}
void IDCT1D(double * x)//routine to perform 8 point 1-D Inverse DCT
{
int ij;
double y[8];//temp array
double t;
for(i=0;i<8;i++)
{
t=0.0;
for(j=0;j<8;j++)
t+=x[j]*KIDCT[i][j];
y[i]=t;
}
for(i=0;i<8;i++)
x[i]=y[i];
}
void IDCT2D(double * x)//routine to perform 8*8 point 2-D Inverse DCT
{
int ij;
double y[8];
//first row direction
for(i=0;i<8;i++)
IDCT1D(x+8*i);
//then column direction
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
y[j]=*(x+8*j+i);
IDCT1D(y);
for(j=0;j<8;j++)
*(x+8*j+i)=y[j];
}
}
///////////////////////////////////////////////
struct Trans_2D
{
double Trans[BlockSize1][BlockSize1];
};
struct ValueWeight
{
double SumValue;
double SumWeight;
};
struct Index
{
int IndexH;
int IndexW;
};
///////////////////////////////////////
double WSExt(double * xint nint N)
{
int P=2*(N-1);
if(n<0)
while(n<0)
n+=P;
else
if(n>=P)
while(n>=P)
n-=P;
if(n>=N)
return x[P-n];
else
return x[n];
}
double WAExt(double * xint nint N)
{
int P=2*N;
if(n<0)
while(n<0)
n+=P;
else
if(n>=P)
while(n>=P)
n-=P;
if(n>=N)
if(n==P-1)
return 0;
else
return -x[P-2-n];
else
return x[n];
}
double HSExt(double * xint nint N)
{
相关资源
- BayesShrink阈值图像小波去噪 c语言
- 用C语言对图像加高斯噪声
- 旅行商问题 C语言解法
- 二叉树的C语言实现,实现二叉树基本
- C语言马踏棋盘_实验报告+源代码
- 应用C语言编写ADAMS用户自定义函数的
- 模拟时钟转动程序
- C语言最小二乘法多项式拟合
- C语言FIR滤波器
- c语言课程设计之网络购物系统
- 大津法C语言实现方法
- 算术编码C语言程序编码解码,非自适
- 用C语言实现文件的模糊查找.pdf
- C语言中文分词源代码
- C语言大作业 菜单驱动的学生成绩管理
- apriori算法的c语言实现
- 编译原理课程设计广工C语言
- websocket编程C语言源码
- C语言解析IP数据包程序
- SHA HMAC 和SHA3基于Keccak加密算法测试代
- 霍夫曼编码的C语言实现
- 实验室设备管理系统c++代码
- dos图形界面例程c语言
- c语言万年历的课程设计及源码
- C语言 机房收费管理系统
- 基于C语言实现的贪吃蛇
- c语言 课程设计 井字棋
- SED1520 C语言驱动程序
- 高速公路收费系统C语言课程设计报告
- C语言设计散列表实现电话号码查找系
评论
共有 条评论