数字图像处理频域增强

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档