用matlab实现对图像的面积测量_图像处理的MATLAB实现(3)

数字图像处理的MATLAB实现(3)

1.查看图像的频率谱和相位谱(一个例子)

I=imread('lichao.jpg');I=rgb2gray(I);

subplot(2,3,1);imshow(I);title('原始图像');

F=fft2(I);S=abs(F);

subplot(2,3,2);imshow(S,[]);title('图像的频谱图像');

Fc=fftshift(F);

subplot(2,3,3);imshow(abs(Fc),[]);title('移频后的频谱图像');

s2=log(1+abs(Fc));

subplot(2,3,4);imshow(s2,[]);title('log增强后的频谱图');

r=real(F);i=imag(F);

s1=log(1+abs(F));phase=angle(F)*180/pi;

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

r1=real(Fc);i1=imag(Fc);

phase2=angle(Fc)*180/pi;

subplot(2,3,6);imshow(phase2);title('位移后相位谱图');

%% 如果不对频率谱图像做log增强,得到的会几乎是全黑的图。因为二维傅里叶变换之后低频分量值非常大,那个地方才对应着白色,其他的高频分量相比之下都是非常小的值,因此如果显示出图像之后都是几乎全黑的。

%% 频率谱需要位移,将移到中间点

705149c15da8a803bf21bdf13281ded9.png

2.输入图片,输出图片频率谱的函数

% 从原始图像到频率谱(没有用log增强算子)

function X = Frequency_Spectrum(A)

X = fftshift(fft2(A));

end

3.输入频率谱,输出频率谱所对应的原始图像的函数

% 从频率谱返回到原始图像(没有用log增强算子)

function A = Inverse_Frequency_Spectrum(X)

A = ifft2(fftshift(X));

end

4.输入图片,输出图片的相位谱的函数

% 从原始图像到相位谱(用了log增强算子)

function [s1,phase] = Image_Spectrum(A)

F = fftshift(fft2(A));

r = real(F);i=imag(F);

s1 = log(1+abs(F));

phase = angle(F)*180/pi;

end

5.一个小实验:频率谱和相位谱中,相位谱对图像本身的视觉影响更大(一个例子)

%% 读入图像(图像可以自己换)

x = imread('lichao.jpg');

y = imread('yongjian.jpg');

%% 注意两幅图像的大小要相同

x = imresize(x,[500,500]);

y = imresize(y,[500,500]);

%% 傅里叶变换

xf=fft2(double(x));

yf=fft2(double(y));

%% 取幅度和相位

xf1=abs(xf);xf2=angle(xf);

yf1=abs(yf);yf2=angle(yf);

%% 画图

figure(1);

subplot(2,4,1),imshow(x),title('源图像x');

subplot(2,4,2),imshow(xf1,[]),title('x图像频谱');

subplot(2,4,3),imshow(uint8(xf1),[]),title('x图像幅度谱');

subplot(2,4,4),imshow(xf2,[]),title('x图像相位谱');

subplot(2,4,5),imshow(y),title('源图像y');

subplot(2,4,6),imshow(yf1,[]),title('y图像频谱');

subplot(2,4,7),imshow(uint8(yf1),[]),title('y图像幅度谱');

subplot(2,4,8),imshow(yf2,[]),title('y图像相位谱');

%% 交换相位

xfr = xf1.*cos(yf2)+xf1.*sin(yf2).*i;

yfr = yf1.*cos(xf2)+yf1.*sin(xf2).*i;

%% 傅里叶反变换

xr=abs(ifft2(xfr));

yr=abs(ifft2(yfr));

%% 显示

figure(2);subplot(2,2,1);imshow(x);title('x原图');

subplot(2,2,2);imshow(y);title('y原图');

subplot(2,2,3);imshow(uint8(xr),[]);title('x 幅度谱与y相位谱');

subplot(2,2,4);imshow(uint8(yr),[]);title('y 幅度谱与x相位谱');

运行结果(两张图片的频率谱、幅度谱和相位谱):

e0cfeff08c4a4e6fd72c1721343db3d7.png

一个图像中的幅度谱和另一个图像中的相位谱叠加:

559ea7721484810724d44a4dbda6437d.png

6.理想低通滤波器的函数实现

function E = ILP(A,banjing)

[u_max,v_max] = size(A);

U=0:u_max-1;V=0:v_max-1;% 定义坐标的范围

center_u = ceil(u_max/2);center_v = ceil(v_max/2);% 计算中心的坐标

HL=zeros(u_max, v_max);% 初始化

for u=1:u_max

for v=1:v_max

dist = sqrt((U(u) - center_u)^2 + (V(v) - center_v)^2);

HL(u,v) = dist < banjing;

end

end

B = fftshift(fft2(A));

D = B .* HL;

E = uint8(ifft2(fftshift(D)));

end

7.理想低通滤波器的图像低通滤波运行效果

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值