【MATLAB】数字图像处理--图像的频域处理-相位谱重构

效果

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

%% 
clc
clear all

dir = 'image/56.jpg';

img = imread(dir);
imggray = rgb2gray(img);%灰度处理
imgf = fft2(imggray);%傅里叶变换

%对频谱进行移动,使得0频率点在中心
imgfshift = fftshift(imgf);

%获得傅里叶变换的幅度谱 
%对数变换,压缩动态范围
imgA = log(1+abs(imgfshift));

%获得傅里叶变换的相位谱
imgPhase = log(angle(imgfshift)*180/pi);

%双谱重构
imgRestructure = ifft2(abs(imgf).*exp(1i*(angle(imgf))));

%% 根据文献得到新方法:
%基于相位谱重构
%设幅度谱为常数C
c1 = 1;
c2 = 5000;
% PhaseCong = imgA .* cos(imgPhase) + imgA .* sin(imgPhase) .* 1i;
% 
% imshow(PhaseCong,[])
% imshow(imgRestructure,[])
% imgPhaseCong = abs(ifft2(PhaseCong));
imgPhaseCong1 = ifft2(abs(c1).*exp(1i*(angle(imgf))));
imgPhaseCong2 = ifft2(abs(c2).*exp(1i*(angle(imgf))));

%%
subplot(2,3,1);
imshow(imggray);
title('原图像');

subplot(2,3,2);
imshow(imgA,[]); %显示图像的幅度谱,参数'[]'是为了将其值线性拉伸
title('图像幅度谱');

subplot(2,3,3);
imshow(imgPhase,[]);
title('图像相位谱');

subplot(2,3,4);
imshow(imgRestructure,[]);
title('双谱重构图');

subplot(2,3,5);
imshow(imgPhaseCong1,[]);
title('相位谱重构图1');

subplot(2,3,6);
imshow(imgPhaseCong2,[]);
title('相位谱重构图2');
  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值