数字图像处理作业3
第一问:
第一问要求使用一阶的Butterworth低通滤波器进行频域滤波,Butterworth其实是在截止低通滤波器的一个改进,它消除了明显截止带来的急剧不连续性。
H ( u , v ) = 1 1 + [ D ( u , v ) / D 0 ] 2 n H(u, v)=\frac{1}{1+\left[D(u, v) / D_0\right]^{2 n}} H(u,v)=1+[D(u,v)/D0]2n1
使用这种方法也可以让生成的图片不会有明显的振铃现象,因为它在低频和高频之间平滑的过度了。
Butterworth函数:
function H = Butterworth( D0, height, width )
for i = 1 : height
x = i - (height / 2);
for j = 1 : width
y = j - (width / 2);
H(i, j) = 1 / (1 + (D0^2) / (x^2 + y^2));
end
end
end
中心函数
function mat = Centralize( mat )
[height, width] = size(mat);
for i = 1 : height
for j = 1 : width
if mod(i + j, 2) == 1
mat(i, j) = -mat(i, j);
end
end
end
end
优化后的巴特沃斯函数
function H = Butterworth(D0, height, width, n)
% 参数说明:
% D0: 截止频率(标量)
% height: 滤波器高度
% width: 滤波器宽度
% n: 阶数(默认1)
if nargin < 4, n = 1; end
% 生成网格坐标(向量化)
[Y, X] = meshgrid(1:width, 1:height);
X_centered = X - floor(width/2) - 1; % 中心对称坐标
Y_centered = Y - floor(height/2) - 1;
% 计算距离矩阵
D = sqrt(X_centered.^2 + Y_centered.^2);
D(D == 0) = eps; % 避免除以零
% 巴特沃斯公式(修正分母)
H = 1 ./ (1 + (D ./ D0).^(2*n)); % 低通滤波器
end
优化后的频域中心化函数
function mat = Centralize(mat)
% 参数说明:
% mat: 输入矩阵(需中心化的频域数据)
% 生成(-1)^(i+j) 的掩膜矩阵(向量化)
[i_idx, j_idx] = meshgrid(1:size(mat,2), 1:size(mat,1));
mask = (-1).^(i_idx + j_idx);
% 中心化操作
mat = mat .* mask;
end
指标 | 原代码 | 优化后代码 |
---|---|---|
时间复杂度 | O ( N 2 ) \mathrm{O}\left(\mathrm{N}^2\right) O(N2)(双重循环) | O ( 1 ) \mathrm{O}(1) O(1)(矩阵运算) |
1000 × 1000 矩阵 \mathbf{1 0 0 0 \times 1 0 0 0 \text { 矩阵 }} 1000×1000 矩阵 | ∼ 1.2 \sim 1.2 ∼1.2 秒 | ∼ 0.02 \sim 0.02 ∼0.02 秒 |
可读性 | 低(手动坐标计算) | 高(数学公式直译) |
功能扩展性 | 固定阶数 | 支持任意阶数 |
函数空间域的卷积的傅里叶变换是函数傅里叶变换的乘积。对应地,频率域的卷积与空间域的乘积存在对应关系。
f ( x , y ) ∗ g ( x , y ) ⇔ F ( u , v ) H ( u , v ) f ( x , y ) g ( x , y ) ⇔ F ( u , v ) ∗ H ( u , v ) \begin{aligned} & f(x, y) * g(x, y) \Leftrightarrow F(u, v) H(u, v) \\ & f(x, y) g(x, y) \Leftrightarrow F(u, v) * H(u, v) \end{aligned} f(x,y)∗g(x,y)⇔F(u,v)H(u,v)f(x,y)g(x,y)⇔F(u,v)∗H(u,v)
在空域上,滤波后的空域图像会减少高频噪声,也就是对于原图像进行了平滑操作,平滑了变化剧烈的部分,其实就相当于使用平滑滤波器进行了一个卷积操作。DO的大小选择也决定了图像本身的高频成分丢失情况,D0取得越小,图像丢失的细节越多。
在频域上,进行过中心变换的频域图像的中心是低频部分,这样就可以用高斯滤波器的模版来过滤掉高频成分了。越往外的高频部分就越会被过滤掉,这样滤波后,频域图像内容基本就集中在中心附近了。
问题二
第二问要求我们使用一个同态滤波来增强图像的细节。
对于一幅由物理过程产生的图像
f
(
x
,
y
)
f(x, y)
f(x,y) ,可以表示为照射分量
i
(
x
,
y
)
i(x, y)
i(x,y) 和反射分量
r
(
x
,
y
)
r(x, y)
r(x,y) 的乘积。
0
<
i
(
x
,
y
)
<
∞
0<i(x, y)<\infty
0<i(x,y)<∞ ,
0
<
r
(
x
,
y
)
<
1
0<r(x, y)<1
0<r(x,y)<1 。
i
(
x
,
y
)
i(x, y)
i(x,y) 描述景物的照明,变化缓慢,处于低频成分。
r
(
x
,
y
)
r(x, y)
r(x,y) 描述景物的细节,变化较快,处于高频成分。
因为该性质是乘性的,所以不能直接使用傅里叶变换对
i
(
x
,
y
)
i(x, y)
i(x,y) 和
r
(
x
,
y
)
r(x, y)
r(x,y) 进行控制,因此可以先对
f
(
x
,
y
)
f(x, y)
f(x,y) 取对数,分离
i
(
x
,
y
)
i(x, y)
i(x,y) 和
r
(
x
,
y
)
r(x, y)
r(x,y) 。令
z
(
x
,
y
)
=
ln
f
(
x
,
y
)
=
ln
i
(
x
,
y
)
+
ln
r
(
x
,
y
)
z(x, y)=\ln f(x, y)=\ln i(x, y)+\ln r(x, y)
z(x,y)=lnf(x,y)=lni(x,y)+lnr(x,y) 。在这个过程中,由于
f
(
x
,
y
)
f(x, y)
f(x,y) 的取值范围为
[
0
,
L
−
1
]
[0, L-1]
[0,L−1] ,为了避免出现
ln
(
0
)
\ln (0)
ln(0) 的情况,故采用
ln
(
f
(
x
,
y
)
+
1
)
\ln (f(x, y)+1)
ln(f(x,y)+1) 来计算。
接着我们就可以进行傅立叶变换,再和对数频域滤波器进行点乘:
H ( u , v ) = ( γ H − γ L ) [ 1 − e − c [ D 2 ( u , v ) / D 0 2 ] ] + γ L H(u, v)=\left(\gamma_H-\gamma_L\right)\left[1-e^{-c\left[D^2(u, v) / D_0^2\right]}\right]+\gamma_L H(u,v)=(γH−γL)[1−e−c[D2(u,v)/D02]]+γL
最后输出的结果进行 exp和取real等反变换,最后进行maxmin操作将灰度值变回到0-255之间。