• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: GS算法  

资源简介

学习GS算法时的一点小收获,希望可以帮助大家。这篇代码包含了GS算法的思想和应用

资源截图

代码片段和文件信息

iterative=300;           %设迭代次数为300次吧
imagename=‘test.jpg‘;    %你想要提取相位的图像名称
phaseimage=‘phase.png‘;  %要保存的相位图像名称


%空域输入图像的幅度(是已知的,也就是清晰的图像,它的灰度就是幅值)和相位图像(待恢复)
known_abs_spatial=imread(imagename);           %作为输入图像的幅度,是已知的
known_abs_spatial =rgb2gray(known_abs_spatial);%注意要用单通道图像做实验,如果你读取的是彩色图像,那就吧这行取消注释变成灰度图像吧
known_abs_spatial=im2double(known_abs_spatial); %将图像灰度映射到0~1

unknown_phase=known_abs_spatial;                %Peppers图像作为输入图像的相位,也即为待恢复的数据,
                                                %要求它和known_abs_spatial大小一致,所以这里直接赋值就好了
unknown_phase=im2double(unknown_phase);         %将图像灰度映射到0~1
unknown_phase2=unknown_phase*2*pi;              %相位范围映射到0-2*pi
unknown_phase2(unknown_phase2>pi)=unknown_phase2(unknown_phase2>pi)-2*pi;%进一步映射至[-pi+pi]

[widthlength]=size(known_abs_spatial);         %获取Lena图像的大小
input=known_abs_spatial.*exp(1i*unknown_phase2); %最终输入图像:幅度*e^(i*相位角度),它是复数图像
known_abs_fourier=abs(fft2(input));             %先将input图像进行傅立叶变换,然后取模,就是傅氏变换后的幅度
%以下开始迭代求相位
phase_estimate=pi*rand(widthlength);           %这是生成了一副大小为(width*length)的图像
                                      

评论

共有 条评论