91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 33KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-08
  • 語言: C/C++
  • 標簽: BM3D??C語言??

資源簡介

實現默認設置下的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)
{

評論

共有 條評論