非局部均值(NLMeans)去噪算法实现

时间:2013-05-28 19:33:14

标签: c image-processing

我在尝试使用此paper实现NLMEANS算法时遇到问题。 我应用算法的区域输出图像完全黑暗。 对于图像输入和输出,使用名为diblook-vs10的框架。

这是我的源代码:

void CDibView::OnProcessingNl()
{
// TODO: Add your command handler code here


int mat[400][400];
int dif[8];
for(int i=0;i<400;i++)
    for(int j=0;j<400;j++)
        mat[i][j]=0;

BEGIN_PROCESSING();     

BYTE red,green,blue;

for(int r=dwHeight-2;r>=0;r--)
    {    
         for(int c=1;c<dwWidth-1;c++){

           mat[r][c]=lpSrc[r*w+c];
         }
    }



float z=0; // Z(i)
float nlVi=0.0; // NL[V](i)

for(int i=100;i>=0;i--) // searching for grey level similarities
    for(int j=1;j<100;j++)
    {   
        float num=0.0; // 
          for(int r=100;r>=0;r--)   
          { 
           for(int c=1;c<100;c++){ 

                dif[0]=mat[i][j+1]-mat[r][c+1];  
                dif[1]=mat[i-1][j+1]-mat[r-1][c+1];
                dif[2]=mat[i-1][j]-mat[r-1][c];
                dif[3]=mat[i-1][j-1]-mat[r-1][c-1];
                dif[4]=mat[i][j-1]-mat[r][c-1];
                dif[5]=mat[i+1][j-1]-mat[r+1][c-1];
                dif[6]=mat[i+1][j]-mat[r+1][j];
                dif[7]=mat[i+1][j+1]-mat[r+1][c+1];


                dif[0]=dif[0]*dif[0];  // || V(Ni) - V(Nj) || ^ 2
                dif[1]=dif[1]*dif[1];
                dif[2]=dif[2]*dif[2];
                dif[3]=dif[3]*dif[3];
                dif[4]=dif[4]*dif[4];
                dif[5]=dif[5]*dif[5];
                dif[6]=dif[6]*dif[6];
                dif[7]=dif[7]*dif[7];

                int sum=0;
                float sume=0.0;
                float eLaDif=0.0;
                for(int cont=0;cont<=7;cont++)
                {
                    float putere=0.0;
                    putere=((float) dif[cont])/4;   //h=4 
                    eLaDif=exp(-putere);
                    sume=sume+eLaDif;
                } 

                 float varweight=sume; 

                 num=num+varweight*mat[r][c];
                 z=z+varweight;       
           }

      }
      nlVi=num/z;
      lpDst[i*w+j]= nlVi;

}
END_PROCESSING("NL_MEANS");
}

0 个答案:

没有答案