Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 非局部均值(NLMeans)去噪算法的实现_C_Image Processing - Fatal编程技术网

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

C 非局部均值(NLMeans)去噪算法的实现,c,image-processing,C,Image Processing,我在尝试用这个来实现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

我在尝试用这个来实现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");
}
void CDibView::OnProcessingNl()
{
//TODO:在此处添加命令处理程序代码
int mat[400][400];
int-dif[8];

对于(int i=0;我能给你一个MATLAB参考吗?