《信号处理原理》实验指导(17页).docVIP

  • 0
  • 0
  • 约1.31万字
  • 约 17页
  • 2017-01-28 发布于四川
  • 举报
《信号处理原理》实验指导(17页)

《信号处理原理》实验指导 【实验要求】 对输入图象文件内容进行2D-FFT变换,再对所得频谱数据进行2D-IFFT,将结果重新转换成字符文件保存起来。 对输入图象文件内容进行2D-FFT变换,再将频谱的大小压缩为(N/2)*(N/2),然后对所得频谱数据进行2D-IFFT,将结果重新转换成字符,保存成(N/2)*(N/2)的汉字图像。 对输入图象文件内容进行2D-FFT变换,再将频谱的大小压缩为(N/2)*(N/2),然后对频谱补入一些零,再对频谱进行2D-IFFT,将结果重新转换成字符,保存成(N/2)*(N/2)的汉字图像。 【实验原理】 一幅二维数字图像可以用矩阵[g(m,n)]来表示,g(m,n)是图像在坐标(m,n)处的灰度级(或彩色RGB值)。也可以把g(m,n)视为一个二元函数,它的自变量为m和n,则可以用它来表示数字图像在平面上的亮度分布。矩阵可以写成下面的形式: 在上面的基础上,我们可以定义下面的二维DFT: 定义1:二维矩阵向量[g(m,n)]的2D-DFT , 从上面的定义我们可以看出:2D-DFT可以用两次1D-DFT来实现。一次是对g(m,n)的各行(即m相同而n不同)进行1D-DFT---如上式中的红色部分所示;再对变换后的结果,再按列进行1D-DFT---如上式中的蓝色部分所示。 【图象压缩与放大原理】 要尽量少失真地对图象进行缩放处理,则需从频域着手进行。如果从频谱图中去掉一些频率的分量,然后再作IFFT,得到时域数据,即可实现对图象的缩小。而如果在频谱中加入一些零值,再作IFFT,得到时域数据,则可实现对图象的放大。 【实验数据】 实验数据为一图像数据文件,文件格式是纯文本格式。文件正文的第一行的值表示矩阵的大小,即N值。后面的N行是点阵图像,每行有N个数据。N最大为256。在图像点阵中,‘.’代表0(即没有点), ‘o’代表1(即有点)。 #include iostream #include fstream #include MyFFT.H int FFTTest() { Comp x[4] = { 1, 1, 1, 1 }; FFT_1D(x, 2, 1); if (x[0] == Comp(4) x[1] == Comp(0) x[2] == Comp(0) [3] == Comp(0) ) return 1; else return 0; } void main() { if (FFTTest() == 0) { cout Your FFT module has something wrong! endl; return; } float POINT_VAL; cout Value for point (.): ; cin POINT_VAL; float CIRCLE_VAL; cout Value for circle (o): ; cin CIRCLE_VAL; float TH; cout Threshold : ; // 数值转化为字符的控制阈值 cin TH; ifstream infilestream(Data.TXT, ios::in); int N; infilestream N; cout N = N endl; if (N MAX_N) { cout 数据文件(Data.TXT)内容不对。图像的大小不能超过 MAX_N endl; return; } Comp Data[MAX_N][MAX_N]; for (int i=0; iN; i++) { for (int j=0; jN; j++) { char inputchar; infilestream inputchar; if (inputchar == o) Data[i][j] = CIRCLE_VAL; if (inputchar == .) Data[i][j] = POINT_VAL; } } infilestream.close(); int M = 1; while (N (1M)) M++; cout M = M endl; // (1) 正变换 FFT_2D(Data, M, 1); // !!!! 第2问与第3问实验需修改下面的代码 !!!! if (0) { #include Q2.cpp // 第二问实验代码 } if (0) { #include Q3.cpp // 第三问实验代码 }

文档评论(0)

1亿VIP精品文档

相关文档