WEB开发网
开发学院软件开发VC VC++实现对退化图像的恢复 阅读

VC++实现对退化图像的恢复

 2008-11-14 19:34:54 来源:WEB开发网   
核心提示: 傅立叶逆变换的同傅立叶变换比较相似,只是在计算exp[j2πvy/N]时同正变换有符号的区别,VC++实现对退化图像的恢复(3),以及在计算完成后逆变换需要将值除以N,因此不难写出一维傅立叶逆变换的实现代码,结果乘以N,完成第一步的转换,在进行二维傅立叶变换将图像由空域变换到频域之前

傅立叶逆变换的同傅立叶变换比较相似,只是在计算exp[j2πvy/N]时同正变换有符号的区别,以及在计算完成后逆变换需要将值除以N,因此不难写出一维傅立叶逆变换的实现代码。在进行二维傅立叶变换将图像由空域变换到频域之前,首先需要通过补0的手段将点数非2的整数次幂的非正方型网格采样构造为一个长宽均为2的整数次幂的正方型网格:

int WM=(int)(log(W)/log(2)+1.0f); file://计算图像宽应为2的多少次幂
int HM=(int)(log(H)/log(2)+1.0f); file://计算图像高应为2的多少次幂
WM=HM=max(WM,HM); file://取二者大值
int WN=(int)pow(2,WM); file://构造网格宽度
int HN=(int)pow(2,HM); file://构造网格高度
for{int i=0;i;for(int j=0;j   if(i    U[i*WN*3+j].Re=D[i*W*3+j]; file://D为图像序列
  U[i*WN*3+j].Im=0.0f;
  }else file://缺位补0
  U[i*WN*3+j].Re=U[i*WN*3+j].Im=0.0f;
 }
}

预处理完毕后,可对构造网格的每一列分别进行一维快速傅立叶变换,并将结果存放在原位置,结果乘以N,完成第一步的转换,求得F(x,v):

for(i=0;i  for(int j=0;j   UH[j].Re=U[j*WN*3+i].Re;
  UH[j].Im=U[j*WN*3+i].Im;
 }
 DFT_FFT(UH,HM); file://对UH进行快速离散傅立叶变换
 for(j=0;j   U[j*WN*3+i].Re=HN*UH[j].Re; file://N=HN
  U[j*WN*3+i].Im=HN*UH[j].Im;
 }
}

随即对构造网格的每一行进行傅立叶变换,得到最终的变换结果F(u,v):

for(i=0;i  for(int k=0;k<3;k++){ file://对24位位图的R、G、B三分量均各自进行变换
  for(int j=0;j    UW[j].Re=U[i*WN*3+j*3+k].Re;
   UW[j].Im=U[i*WN*3+j*3+k].Im;
  }
  DFT_FFT(UW,WM); file://对UW序列进行快速离散傅立叶变换
  for(j=0;j    U[i*WN*3+j*3+k].Re=UW[j].Re;
   U[i*WN*3+j*3+k].Im=UW[j].Im;
  }
 }
}

上一页  1 2 3 4 5  下一页

Tags:VC 实现 退化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接