数字图像处理-图像增强(2)

1 实验一

1.1 实验题目

使用高频强调滤波进行图像增强。

1.2 程序源代码

Matlab 复制代码
clc;
clear;
f=imread('timu3.jpg'); %读入图像
subplot(1,2,1);
imshow(f)
title('原始图像')
%高斯高通滤波
I=double(f);
g=fft2(I);
g=fftshift(g);
[M,N]=size(g);%读取图像的长度和宽度
%D0=40,并令 k1=0.5,k2=0.75
D0=40;
m=fix(M/2);n=fix(N/2);
for i=1:M
for j=1:N
D=sqrt((i-m)^2+(j-n)^2);%计算两点之间的距离
H=exp(-(D.^2)./(2*(D0^2))); %高斯低通滤波器
result(i,j)=(1-H)*g(i,j);
end
end
result=ifftshift(result);%傅里叶反变换
J1=ifft2(result);
J2=uint8(real(J1));
%高频强调滤波
F=0.5+0.75*(1-H);%根据给定的 k1\k2 两个系数对传递函数进行修改
G=F*g;
result2=ifftshift(G);%傅里叶反变换
J3=ifft2(result2);
J4=uint8(real(J3));
subplot(1,2,2)
imshow(J4)
title('高频强调滤波后的图像')

2 实验二

2.1 实验题目

使用陷波滤波器对下图进行图像增强,给出傅里叶频谱,并分析陷波滤波器尺寸的影响。给出关键步骤的输入输出数据大小)

2.2 程序源代码

Matlab 复制代码
close all
clear all;
clc;
f = imread('timu4.jpg');%读取图像
f = mat2gray(f,[0 255]);
%图像填充
[M,N] = size(f);%读取图像宽度和高度
P = 2*M;
Q = 2*N;
fc = zeros(M,N);
%频域中心化
for x = 1:1:M
for y = 1:1:N
fc(x,y) = f(x,y) * (-1)^(x+y);
end
end
F = fft2(fc,P,Q);%二维傅里叶变换
%陷波滤波算法
H_NF = ones(P,Q);%为了方便后面的累乘,所以用 ones,如果是累加就用 zeros
for x = (-P/2):1:(P/2)-1
for y = (-Q/2):1:(Q/2)-1
D = 30;
v_k = 59; u_k = 77;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = 59; u_k = 159;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = -54; u_k = 84;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
v_k = -54; u_k = 167;
D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
end
end
%傅里叶逆变换
G_1 = H_NF .* F;
g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);
for x = 1:1:M
for y = 1:1:N
g_1(x,y) = g_1(x,y) * (-1)^(x+y);
end
end
close all;
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('原图像');
subplot(1,2,2);
imshow(log(1 + abs(F)),[ ]);%图像幅度谱,加 log 便于显示
xlabel('原图像的傅里叶频谱');
figure();
subplot(1,2,2);
imshow(log(1 + abs(G_1)),[ ]);%图像幅度谱,加 log 便于显示
xlabel('滤波后图像的傅里叶频谱');
subplot(1,2,1);
imshow(g_1,[0 1]);
xlabel('陷波滤波后图像');

2.3 参数影响

陷波滤波器的尺寸会对图像的清晰度和图像的质量造成影响,尺寸越大,对图像 滤波处理的效果越好,图像质量越好。

3 实验三

3.1 实验题目

简述数字图像处理中的频率域滤波步骤,并给出适用的图像范围。

3.2 题目解答

频率域滤波是数字图像处理中一种常用的图像增强和去噪方法,它通过对图像进行傅里叶变换,将图像从空间域转换到频率域,然后对频率域图像进行滤波操作,最 后再进行逆傅里叶变换将图像转换回空间域。频率域滤波的步骤如下:

(1)将原始图像进行灰度化处理,得到灰度图像。

(2)对灰度图像进行零均值化,即减去图像的平均灰度值。

(3)对零均值化后的图像进行二维傅里叶变换(DFT),得到频率域图像。

(4)在频率域中选择合适的滤波函数,如低通滤波器、高通滤波器或带通滤波器等。

(5)将选择的滤波函数应用于频率域图像,得到滤波后的频率域图像。

(6)对滤波后的频率域图像进行逆傅里叶变换(IDFT),得到空间域中的滤波后图像。

(7)对滤波后的图像进行反零均值化,即加上原始图像的平均灰度值。

(8)最后可以对滤波后的图像进行进一步的后处理,如灰度拉伸、对比度调整等。

频率域滤波适用于各种类型的图像,包括但不限于自然图像、医学图像、卫星图像等。它可以用于图像增强、去噪、边缘检测、纹理分析等应用领域。

相关推荐
AndrewHZ37 分钟前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
safestar20121 小时前
n8n 架构深度解构:从设计哲学到企业级实践
人工智能·ai编程
蓝牙先生1 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
喵手1 小时前
AI在自动化与机器人技术中的前沿应用
人工智能·机器人·自动化
一只乔哇噻1 小时前
java后端工程师+AI大模型进修ing(研一版‖day55)
人工智能
小毅&Nora2 小时前
【AI微服务】【Spring AI Alibaba】② Agent 深度实战:构建可记忆、可拦截、可流式的智能体系统
人工智能·微服务·spring-ai
东荷新绿2 小时前
MATLAB 2018a 安装教程:30分钟搞定安装
开发语言·matlab·matlab2018a
陈天伟教授2 小时前
基于学习的人工智能(7)机器学习基本框架
人工智能·学习
千里念行客2403 小时前
昂瑞微正式启动科创板IPO发行
人工智能·科技·信息与通信·射频工程
撸码猿3 小时前
《Python AI入门》第10章 拥抱AIGC——OpenAI API调用与Prompt工程实战
人工智能·python·aigc