⽤matlab实现对图像的⾯积测量_图像处理的MATLAB实现
(3)
的MATLAB实现(3)
1.查看图像的频率谱和相位谱(⼀个例⼦)
I=imread('lichao.jpg');I=rgb2gray(I);
subplot(2,3,1);(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增强,得到的会⼏乎是全⿊的图。因为⼆维傅⾥叶变换之后低频分量值⾮常⼤,那个地⽅才对应着⽩⾊,其他的⾼频分量相⽐之下都是⾮常⼩的值,因此如果显⽰出图像之后都是⼏乎全⿊的。
%% 频率谱需要位移,将移到中间点
2.输⼊图⽚,输出图⽚频率谱的函数matlab傅里叶变换的幅度谱和相位谱
% 从原始图像到频率谱(没有⽤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)
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相位谱');
运⾏结果(两张图⽚的频率谱、幅度谱和相位谱):
⼀个图像中的幅度谱和另⼀个图像中的相位谱叠加:
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.理想低通滤波器的图像低通滤波运⾏效果
A = imread('lichao.jpg');
A = rgb2gray(A);
figure(1);
subplot(2,4,1);imshow(A);title('原始图⽚');
subplot(2,4,2);B1 = ILP(A,100);imshow(B1);title('理想低通滤波器,半径=100'); subplot(2,4,3);B2 = IL
P(A,50);imshow(B2);title('理想低通滤波器,半径=50'); subplot(2,4,4);B3 = ILP(A,20);imshow(B3);title('理想低通滤波器,半径=20'); subplot(2,4,5);B4 = ILP(A,10);imshow(B4);title('理想低通滤波器,半径=10');
subplot(2,4,6);B5 = ILP(A,5);imshow(B5);title('理想低通滤波器,半径=5'); subplot(2,4,7);B6 = ILP(A,2);imshow(B6);title('理想低通滤波器,半径=2'); subplot(2,4,8);B7 = ILP(A,1);imshow(B7);title('理想低通滤波器,半径=1');
8.理想低通滤波器的运⾏效果以及它的频谱图
figure(2);
subplot(2,4,1);imshow(A);title('原始图⽚');
subplot(2,4,2);B1 = ILP(A,100);imshow(B1);title('理想低通滤波器,半径=100'); subplot(2,4,3);B2 = ILP(A,50);imshow(B2);title('理想低通滤波器,半径=50'); subplot(2,4,4);B3 = ILP(A,20);imshow(B3);title('理想低通滤波器,半径=20');
F1=fft2(A) ;Fc1=fftshift(F1);Fd1=log(1+abs(Fc1));
F2=fft2(B1);Fc2=fftshift(F2);Fd2=log(1+abs(Fc2));
F3=fft2(B2);Fc3=fftshift(F3);Fd3=log(1+abs(Fc3));
F4=fft2(B3);Fc4=fftshift(F4);Fd4=log(1+abs(Fc4));
subplot(2,4,5);imshow(abs(Fd1),[]);title('图1的频谱图像');
subplot(2,4,6);imshow(abs(Fd2),[]);title('图2的频谱图像');
subplot(2,4,7);imshow(abs(Fd3),[]);title('图3的频谱图像');
subplot(2,4,8);imshow(abs(Fd4),[]);title('图4的频谱图像');
9.巴特沃斯低通滤波器的函数实现
function E = BLP(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) = 1/(1+(dist/D)^(2*n));
end
end
B = fftshift(fft2(A));
D = B .* HL;
E = uint8(ifft2(fftshift(D)));
end
10.巴特沃斯低通滤波器的图像低通滤波运⾏效果
A = imread('lichao.jpg');
A = rgb2gray(A);
figure(1);
subplot(2,4,1);imshow(A);title('原始图⽚');
subplot(2,4,2);B1 = BLP(A,20,2);imshow(B1);
title('巴特沃斯低通滤波器,半径=20,阶数=2');
subplot(2,4,3);B2 = BLP(A,20,5);imshow(B2);
title('巴特沃斯低通滤波器,半径=20,阶数=5');
subplot(2,4,4);B3 = BLP(A,20,10);imshow(B3);
title('巴特沃斯低通滤波器,半径=20,阶数=10');
subplot(2,4,5);B4 = BLP(A,100,2);imshow(B4);
title('巴特沃斯低通滤波器,半径=100,阶数=2');
subplot(2,4,6);B5 = BLP(A,50,2);imshow(B5);
title('巴特沃斯低通滤波器,半径=50,阶数=2');
subplot(2,4,7);B6 = BLP(A,10,2);imshow(B6);
title('巴特沃斯低通滤波器,半径=10,阶数=2');
subplot(2,4,8);B7 = BLP(A,5,2);imshow(B7);
title('巴特沃斯低通滤波器,半径=5,阶数=2');
11.巴特沃斯低通滤波器的运⾏效果以及它的频谱图
A = imread('lichao.jpg');
A = rgb2gray(A);
figure(1);
subplot(2,4,1);imshow(A);title('原始图⽚');
subplot(2,4,2);B1 = BLP(A,100,2);imshow(B1);
title('巴特沃斯低通滤波器,半径=100,阶数2');
subplot(2,4,3);B2 = BLP(A,100,5);imshow(B2);
title('巴特沃斯低通滤波器,半径=100,阶数5');
subplot(2,4,4);B3 = BLP(A,20,5);imshow(B3);
title('巴特沃斯低通滤波器,半径=20,阶数5');
F1=fft2(A) ;Fc1=fftshift(F1);Fd1=log(1+abs(Fc1));
F2=fft2(B1);Fc2=fftshift(F2);Fd2=log(1+abs(Fc2));
F3=fft2(B2);Fc3=fftshift(F3);Fd3=log(1+abs(Fc3));
F4=fft2(B3);Fc4=fftshift(F4);Fd4=log(1+abs(Fc4)); subplot(2,4,5);imshow(abs(Fd1),[]);title('图1的频谱图像'); subplot(2,4,6);imshow(abs(Fd2),[]);title('图2的频谱图像'); subplot(2,4,7);imshow(abs(Fd3),[]);title('图3的频谱图像'); subplot(2,4,8);imshow(abs(Fd4),[]);title('图4的频谱图像');
12.⾼斯低通滤波器的函数实现
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论