数字图像处理频域增强
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国地质大学(武汉)
数字图像处理上机实习
(第三专题)
学生姓名:
班级:
学号:
指导老师:
实验内容
一图计算图象的傅氏变换频谱函数
要求(1-6):设计图象f6(x,y) 为3*30*30/256*256,居中垂直排列,选用Matlab函数直接调用实现,重点观察空域图象和频域频谱的对应关系;
补充完成:设计120*30/256*256,观察空域图象和频域频谱的对应关系。
1.算法设计
2.程序代码
%观察空域图象和频域频谱的对应关系
%设计图象f6(x,y) 为3*30*30/256*256
f=zeros(256,256);
f([30:60],[113:143])=1;
f([90:120],[113:143])=1;
f([150:180],[113:143])=1;
subplot(221);imshow(f);
% 设计图象f2(x,y)为120*30/256*256,并作fft变换
f2 = zeros(256,256);
f2(114:143,69:188) = ones(30,120);
subplot(223);imshow(f2);
%二维傅里叶变换
F=fft2(f);
F2 = fft2(f2);
%绘制fft图
subplot(222);imshow(fftshift(log(abs(F))));
%title('频谱图')
subplot(224);imshow(fftshift(log(abs(F2))));
%title('频谱图(量化)')
figure
subplot(121);mesh(fftshift(abs(F)));
subplot(122);mesh(fftshift(abs(F2)));
3.结果分析
(1)空域图象和频域频谱对比
(2)频谱图(量化)对比
二计算显示图象的频谱函数
要求(2-6):对f6(x,y)的离散余弦变换,显示其频谱函数
补充完成:实现离散傅立叶变换、离散余弦变换、Walsh变换和Hadamard变换,比较四种变换所得到的频谱。
1.程序代码
clc;
clear;
f=zeros(256,256);
f([30:60],[113:143])=1;
f([90:120],[113:143])=1;
f([150:180],[113:143])=1;
subplot(232);imshow(f);
title('原图像')
f1 = double(f);
F1 = fft2(f1); %fft
F2 = dct2(f1); %DCT
F3 = (1/256) * hadamard(256)*f1*hadamard(256); %hadamard
F4 = (1/256) * walsh(256)*f1*walsh(256); %walsh
subplot(2,4,5);imshow(uint8(abs(F1)));title('fft变换图像')
subplot(2,4,6);imshow(abs(F2));title('dct变换图像')
subplot(2,4,7);imshow(abs(F3));title('hadamard变换图像')
subplot(2,4,8);imshow(abs(F4));title('walsh变换图像')
离散余弦变换函数:
function b=dct2(arg1,mrows,ncols)
[m, n] = size(arg1);
if (nargin == 1),
if (m > 1) && (n > 1),
b = dct(dct(arg1).').';
return;
else
mrows = m;
ncols = n;
end
end
% Padding for vector input.
a = arg1;
if nargin==2, ncols = mrows(2); mrows = mrows(1); end
mpad = mrows; npad = ncols;
if m == 1 && mpad > m, a(2, 1) = 0; m = 2; end
if n == 1 && npad > n, a(1, 2) = 0; n = 2; end
if m == 1, mpad = npad; npad = 1; end% For row vector.
b = dct(a, mpad);
if m > 1 && n > 1, b = dct(b.', npad).'; end
2.运行结果
(1)离散余弦变换,显示其频谱函数
(2)实现离散傅立叶变换、离散余弦变换、Walsh变换和Hadamard变换,比较四种变换所得到的频谱
三设计图象的频域滤波
要求(3-6):根据窗函数法设计一个高通滤波器,对图象f6(x,y)进行低通滤波,观察分析空域图象和频谱分布的变化(设计2个截止频率)。
1.算法设计
2.程序代码
f=zeros(256,256);
f([30:60],[113:143])=1;
f([90:120],[113:143])=1;
f([150:180],[113:143])=1;
%subplot(221);imshow(f);
F1 = fft2(f);
F1_shift = fftshift(F1);
%高通滤波
F2 = imhp1(f,200);
F2_shift = fftshift(F2);
g = abs(j);
subplot(2,3,1);imshow(f);title('原图像')
subplot(2,3,4);imshow(uint8(F1_shift));title('原频谱')
subplot(2,3,2);imshow(g);title('高通处理 D1=200')
subplot(2,3,5);imshow(uint8(F2_shift));title('高通后的频谱')
F2 = imhp1(f,100);
F2_shift = fftshift(F2);
g = abs(j);
subplot(2,3,3);imshow(g);title('高通处理 D1=100')
subplot(2,3,6);imshow(uint8(F2_shift));title('高通后的频谱')
相关函数:
function g= imhp1(f,D0)
% 高通滤波
% f为输入图像
F=fftshift(fft2(f));
[W,L] = size(F);
x0=floor(W/2);
y0=floor(L/2); %设置图像的中心点
for i=1:W
for j=1:L
D=sqrt((i-x0)^2+(j-y0)^2); %计算图像中距中心点的距离
if D<=D0
F(i,j)=0;
else
%若大于阈值D0,不作处理
end
end
end