扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
F(x,v)=N*[(1/N)* f(x,y)exp[-j2πvy/N]] (v=0,1,……,N-1) F(u,v)=(1/N)* F(x,v)exp[-j2πux/N] (u,v=0,1,……,N-1) |
F(x,v)= F(u,v)exp[j2πux/N] (x,y=0,1,……,N-1) f(x,y)=(1/N)* F(x,v)exp[j2πvy/N]] (y=0,1,……,N-1) |
int N=(int)pow(2,M); file://N:序列长度(2的整数次幂) ReverseOrder(A,N); file://对空间序列进行倒序 for(int i=1;i<=M;i++){ int b=(int)pow(2,(i-1)); for(int j=0;j<=(b-1);j++) { float p=(float)(pow(2,(M-i))*j*2.0*PI/(float)N); for(int k=j;k<=(N-1);){ float tr=(float)(A[k+b].Re*cos(p)+A[k+b].Im*sin(p)); file://计算复数运算A*U float ti=(float)(A[k+b].Im*cos(p)-A[k+b].Re*sin(p)); A[k+b].Re=A[k].Re-tr; file://复数运算A-tr A[k+b].Im=A[k].Im-ti; A[k].Re+=tr; file://复数运算A+tr A[k].Im+=ti; k+=b*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 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; } } |
for(i=0;i UH[j].Im=U[j*WN*3+i].Im; } DFT_FFT(UH,HM); file://对UH进行快速离散傅立叶变换 for(j=0;j U[j*WN*3+i].Im=HN*UH[j].Im; } } |
for(i=0;i for(int j=0;j 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].Im=UW[j].Im; } } } |
…… dsp.DFT_2D_FFT(m_cpBuffer+54,m_nWidth,m_nHeight,U); file://进行二维傅立叶变换 for(int i=0;i D1=(float)sqrt(i*i+k*k); H=1.0f/(1+(D1/D0)*(D1/D0)); file://H(u,v)=1/(1+(u2+v2)/D02)) if(H>0.45f){ file://阀值 d取0.45 U[i*3*WN+j].Re/=H; file://在频域与M(u,v)相乘 U[i*3*WN+j].Im/=H; }else{ U[i*3*WN+j].Re*=0.6f; file://如未超过阀值则M(u,v)取常数k=0.6 U[i*3*WN+j].Im*=0.6f; } } } dsp.DFT_2D_IFFT(m_cpBuffer+54,m_nWidth,m_nHeight,U); file://进行傅立叶逆变换 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者