• 数字图像处理实验(二)|图像变换(附实验代码和截图)


    一、实验目的

    1了解图像变换的原理;
    2理解图像变换系数的特点;
    3掌握图像变换的方法及应用;
    4掌握图像的频谱分析方法;
    5了解图像变换在图像数据压缩、图像滤波等方面的应用。

    二、主要仪器设备

    安装了MATLAB软件的台式或笔记本电脑

    三、实验原理

    (一)变换原理

    1.离散傅里叶变换

    对于二维离散信号,Fourier正变换定义为:
    在这里插入图片描述
    二维离散傅立叶逆变换为:
    在这里插入图片描述
    相关函数:fft2; ifft2

    2.离散余弦变换

    正变换公式为:
    在这里插入图片描述
    逆变换公式为:
    在这里插入图片描述
    相关函数:dct2; idct2

    3.频谱平移

    相关函数:fftshift; ifftshift
    例题:
    图像的二维离散傅立叶变换
    I=imread(‘coins.png’); %读入原图像文件
    imshow(I); %显示原图像
    fftI=fft2(I); %二维离散傅立叶变换
    sfftI=fftshift(fftI); %直流分量移到频谱中心
    RR=real(sfftI); % real(A)为取复数A的实部
    II=imag(sfftI); %imag(A)为取复数A的虚部
    A=sqrt(RR.^ 2+II.^2); %计算频谱幅值
    B=abs(sfftI);
    I1=ifft2(fftI); %重建原图像
    figure; %创建窗口
    imshow(uint8(A)); %显示原图像的频谱

    (二)频谱分析原理

    图像变换是能量的重新分配。频率域中低频部分对应的是图像中的平滑部分(灰度变化缓慢的区域,)高频部分对应的是图像中的边缘、细节或噪声部分。
    本实验主要函数:
    fft2; ifft2; dct2; idct2; abs; angle; fftshift; ifftshift; imshow ; subplot; title

    四、实验步骤和内容

    1. 为下面三段程序写出注释并上机运行,将实际运行结果如实记录到实验报告,并分析三段程序的不同之处,并解释第一段程序出现问题的原因。

    (1)f = imread ( ‘pout.tif’);
    F=fft2(f);
    S=abs(F);
    imshow(S);
    f1=ifft2(F);
    figure;imshow(f1);

    (2)f1 = imread (‘pout.tif’);
    f=im2double(f1);
    F=fft2(f);
    S=abs(F);
    imshow(uint8(S));
    f1=ifft2(F);
    figure;imshow(f1);

    (3)f1 = imread (‘pout.tif’);
    f=im2double(f1);
    F=fft2(f);
    S=uint8(abs(F));
    imshow(S);
    S1=fftshift(F);
    figure;imshow(uint8(abs(S1)));
    f11=ifft2(F);
    figure;imshow(f11);

    2.选取一幅标准测试图像实现傅里叶变换。

    (1)读图图像;
    (2)显示原图像;
    (3)进行傅里叶正变换;
    (4)获取其幅度谱和相位谱;
    (5)利用逆变换对图像进行重建。

    3.频谱平移

    选取一幅灰度图像,对其进行傅里叶变换、频谱平移、频谱逆平移、傅里叶逆变换,并在同一窗口中同时显示原图像、傅里叶变换频谱、频谱平移图像、逆平移频谱图像及傅里叶逆变换图像并按上述名称命名。将程序及效果图记录入实验报告。

    4. 选取一幅标准测试图像实现离散余弦变换。

    (1)读图图像;
    (2)显示原图像;
    (3)进行离散余弦正变换;
    (4)利用逆变换对图像进行重建;
    (5)对(3)中的系数进行取舍。
    (6)用(5)中得到的系数矩阵对图像进行重建(逆变换),得到新图像;
    (7)在同一窗口显示原图像、频谱图、直接重建图像、改变系数后的重建图像;
    (8)分析两个重建的图像的图像质量变化以及产生的原因。
    离散余弦变换后,将低频分量其中到了左上角,所以程序中是保留了左上角33*33的小矩阵的信息量,而其他信息都舍弃了,因此重建后的图像变得模糊了。

    5.记录和整理实验报告。

    五、思考题

    1.傅里叶变换有哪些重要的性质?
    可以将低频和高频信号区分开来,将图像的灰度分布函数变换为图像的频率分布函数。
    2.离散余弦变换与傅里叶变化相比有哪些优势?
    离散余弦变换首先低频信号都是集中在左上角,并且相对于傅里叶变换是不用进行频谱搬移的
    3.观察图像变换后的频谱矩阵系数,总结变换后系数分布特点。
    都是双精度,并且落在(-1,1)的区间

    六、实验代码

    %% 1.1
    f = imread ('pout.tif'); 
    f = im2double(f)  %没有对图像进行归一化(为什么进行归一化?)
    F=fft2(f);       
    S=abs(F);      
    imshow(uint8(S)); %没有对复数模值进行[0,255]进行映射          
    f1=ifft2(F);
    figure;imshow(f1);
    
    %% 1.2 
    f1 = imread ('pout.tif'); 
    f=im2double(f1); %将图像转换为双精度(归一化)
    F=fft2(f); % 进行傅里叶变化
    S=abs(F);  % 对复数取模值
    imshow(uint8(S));  % 将数据映射到[0,255](频谱图)并显示
    f1=ifft2(F); % 对傅里叶进行逆变换
    figure;imshow(f1);  % 显示
    
    %% 1.3 
    clc,clear
    close all
    f1 = imread ('pout.tif'); 
    f=im2double(f1); 
    F=fft2(f);
    S=uint8(abs(F));           
    imshow(S);
    S1=fftshift(F); %频谱平移,将直流分量移到频谱中心
    figure;imshow(uint8(abs(S1)));
    f11=ifft2(F);
    figure;imshow(f11);
    
    %% 2
    clc,clear
    close all
    f = imread ('pout.tif');
    f_y = im2double(f);
    f_n = fft2(f);   % 未im2double的傅里叶变换
    f_y = fft2(f_y); % 经过im2double的傅里叶变换
    
    RR_y = real(f_y); %实部
    II_y = imag(f_y); %虚部
    RR_n = real(f_n);
    II_n = imag(f_n);
    
    A_y = sqrt(RR_y.^2+II_y.^2); % 求取距离(频谱)
    B_y = angle(f_y);            % 求取相位
    C_y = abs(f_y);              % 求取距离
    
    A_n = sqrt(RR_n.^2+II_n.^2);
    B_n = angle(f_n);
    C_n = abs(f_n);
    
    S_y = fftshift(f_y);         %频谱平移
    S_n = fftshift(f_n);
    
    
    figure
    subplot(2,3,1);imshow(f);xlabel('原图像')
    subplot(2,3,2);imshow(A_y);xlabel('幅度谱');title('经过im2double处理')
    subplot(2,3,3);imshow(B_y);xlabel('相位谱')
    subplot(2,3,4);imshow(uint8(A_y));xlabel('频谱图')
    subplot(2,3,5);imshow(uint8(abs(S_y)));xlabel('频谱平移图')
    subplot(2,3,6);imshow(ifft2(f_y));xlabel('图像进行重建')
    
    
    % figure
    I_y = ifftshift(S_y);
    I_n = ifftshift(S_n);
    figure
    subplot(1,2,1);imshow(uint8(abs(I_y)));xlabel('y_逆平移')
    subplot(1,2,2);imshow(uint8(abs(I_n)));xlabel('n_逆平移')
    %% 3
    f1 = imread ('pout.tif'); 
    f=im2double(f1); % 0-1变小;
    F=fft2(f1);
    F1 = fft2(f)
    S=uint8(abs(F));           
    S1=fftshift(F); %频谱平移,将直流分量移到频谱中心
    S2=ifftshift(S1);
    f11=ifft2(F);
    figure
    subplot(2,3,1);imshow(f1);xlabel('原图像')
    subplot(2,3,2);imshow(S);xlabel('傅里叶变换频谱')
    subplot(2,3,3);imshow(uint8(abs(S1)));xlabel('频谱平移图像')
    subplot(2,3,4);imshow(uint8(abs(S2)));xlabel('逆平移频谱图像')
    subplot(2,3,5);imshow(uint8(f11));xlabel('傅里叶逆变换图像')
    
    %% 4
    f = imread ('pout.tif');
    f1 = im2double(f);
    f_dct = dct2(f1);
    f_idct = idct2(f_dct);
    Z = zeros(291,240);
    Z(1:33,1:33) = 1;
    f_dct_d = Z.*f_dct;
    f_idct_d = idct2(f_dct_d);
    figure
    subplot(2,2,1);imshow(f);xlabel('原图像')
    subplot(2,2,2);imshow(abs(f_dct));xlabel('频谱图')
    subplot(2,2,3);imshow(f_idct);xlabel('直接重建图像')
    subplot(2,2,4);imshow(f_idct_d);xlabel('改变系数后重建图像') 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101

    七、实验图像

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    八、对于傅里叶变换的相关解释

    可以看我之前写的文章,有对于傅里叶和离散余弦的变换的说明

    数字图像处理——图像变换(二维离散傅里叶正逆变换fft2/fft2、离散余弦正逆变换dct2/idct2、频谱正逆平移fftshift/ifftshift、幅度谱与相位谱)

  • 相关阅读:
    Red Hat 8中安装Python3.8.8和pip3
    WPF 截图控件之移除控件(九)「仿微信」
    【Swift 60秒】47 - Functions:Summary
    Python基础03-深入探索Python字典操作
    图像的几何变换(缩放、平移、旋转)
    ChatGPT全球最大开源平替OpenAssistant:基于Pythia和LLaMA微调而来
    同旺科技 USB TO SPI / I2C适配器读写24LC128--读写
    Controller接收Postman的raw参数时,属性值全部为空
    Latex语法学习08:打通latex、mathml和word公式转换
    《DevOps实践指南》- 读书笔记(六)
  • 原文地址:https://blog.csdn.net/m0_52592798/article/details/128209617