以下内容原创首发,如需转载请注明来源!
实验题目:
选取5个尺度,36个方向共180个二维模板对一幅图像分别做二维卷积,得到180幅滤波结果图像,以此作为基准Gabor滤波结果。由于这个基准算法处理速度很慢,故请试着对该方法进行改进,改进方法在要求得到同样180个卷积的结果图像的前提下,尽量提高其处理速度。
实验算法:
基本算法:
在图像处理中主要应用的是对gabor滤波的实部公式,其表达式如下:
g
(
x
,
y
;
λ
,
θ
,
ψ
,
σ
,
γ
)
=
e
x
p
(
−
x
′
2
+
γ
2
y
′
2
2
σ
2
)
c
o
s
(
2
π
x
′
λ
+
ψ
)
(
1
)
g(x,y;\lambda,\theta,\psi,\sigma,\gamma) = exp(-\frac{x^{\prime2}+\gamma^2y^{\prime2}}{2\sigma^2})cos(2\pi\frac{x^\prime}{\lambda}+\psi) (1)
g(x,y;λ,θ,ψ,σ,γ)=exp(−2σ2x′2+γ2y′2)cos(2πλx′+ψ)(1)
其中
x
′
=
x
c
o
s
θ
+
y
s
i
n
θ
;
y
′
=
−
x
s
i
n
θ
+
y
c
o
s
θ
x^{\prime}=xcos{\theta}+ysin{\theta};y^\prime=-xsin{\theta}+ycos{\theta}
x′=xcosθ+ysinθ;y′=−xsinθ+ycosθ
上述公式的常规代码实现为二重循环,对于每一项计算的时间复杂度均为
O
(
n
2
)
O(n^2)
O(n2),当其kernel取值较大时,计算效率较低。本实验主要通过对公式的正交与非正交两种方法进行分解,使其复杂乘方的计算时间复杂度仅为O(2n),仅需执行
O
(
n
2
)
O(n^2)
O(n2)次的乘法与加法运算即可。
具体步骤:
(1)式的计算复杂度主要体现在幂方运算上,且
x
′
与
y
′
x^\prime与y^\prime
x′与y′分别与x,y都相关,所以无法直接分解计算,即对
x
′
与
y
′
x^\prime与y^\prime
x′与y′的计算必须使用二重循环,这样无疑提升了时间复杂度。因此,如果能够实现对(1)式的分解,使用数组存储x与y的n次计算结果,再在最后进行赋值就可以降低时间复杂度;下文提供正交与非正交两种方法进行分解。
正交分解:
观
察
(
1
)
式
,
当
γ
=
1
时
,
x
′
2
+
γ
2
y
′
2
=
x
2
+
y
2
观察(1)式,当\gamma=1时,x^{\prime2}+\gamma^2y^{\prime2}=x^2+y^2
观察(1)式,当γ=1时,x′2+γ2y′2=x2+y2,此时即可以对(1)式进行正交分解:
g ( x , y ; λ , θ , ψ , σ , γ ) = e x p ( − x 2 + y 2 2 σ 2 ) c o s ( 2 π x ′ λ + ψ ) g(x,y;\lambda,\theta,\psi,\sigma,\gamma)=exp(-\frac{x^2+y^2}{2\sigma^2})cos(2\pi\frac{x^\prime}{\lambda}+\psi) g(x,y;λ,θ,ψ,σ,γ)=exp(−2σ2x2+y2)cos(2πλx′+ψ)
对 x ′ x^\prime x′展开,可得(由于 ψ \psi ψ是常数,为方便公式推导,这里取0):
g ( x , y ; λ , θ , ψ , σ , γ ) = e x p ( − x 2 + y 2 2 σ 2 ) c o s ( 2 π λ ( x c o s θ + y s i n θ ) ) g(x,y;\lambda,\theta,\psi,\sigma,\gamma)=exp(-\frac{x^2+y^2}{2\sigma^2})cos(\frac{2\pi}{\lambda}(xcos\theta+ysin\theta)) g(x,y;λ,θ,ψ,σ,γ)=exp(−2σ2x2+y2)cos(λ2π(xcosθ+ysinθ))
继续展开可得:
e x p ( − x 2 2 σ 2 ) e x p ( − y 2 2 σ 2 ) ( c o s ( 2 π λ x c o s θ ) c o s ( 2 π λ y s i n θ ) − s i n ( 2 π λ x c o s θ ) s i n ( 2 π λ y s i n θ ) ) exp\left(-\frac{x^2}{2\sigma^2}\right)exp\left(-\frac{y^2}{2\sigma^2}\right)\left(cos{\left(\frac{2\pi}{\lambda}xcos\theta\right)}cos\left(\frac{2\pi}{\lambda}ysin\theta\right)-sin\left(\frac{2\pi}{\lambda}xcos\theta\right)sin\left(\frac{2\pi}{\lambda}ysin\theta\right)\right) exp(−2σ2x2)exp(−2σ2y2)(cos(λ2πxcosθ)cos(λ2πysinθ)−sin(λ2πxcosθ)sin(λ2πysinθ))
对x,y分别构造函数有:
f
1
(
x
)
=
e
x
p
(
−
x
2
2
σ
2
)
cos
(
2
π
λ
x
c
o
s
θ
)
;
f
2
(
x
)
=
e
x
p
(
−
x
2
2
σ
2
)
sin
(
2
π
λ
x
c
o
s
θ
)
f_1\left(x\right)=exp\left(-\frac{x^2}{2\sigma^2}\right)\cos{\left(\frac{2\pi}{\lambda}xcos\theta\right)};f_2\left(x\right)=exp\left(-\frac{x^2}{2\sigma^2}\right)\sin{\left(\frac{2\pi}{\lambda}xcos\theta\right)}
f1(x)=exp(−2σ2x2)cos(λ2πxcosθ);f2(x)=exp(−2σ2x2)sin(λ2πxcosθ)
g
1
(
y
)
=
e
x
p
(
−
y
2
2
σ
2
)
c
o
s
(
2
π
λ
y
s
i
n
θ
)
;
g
2
(
y
)
=
e
x
p
(
−
y
2
2
σ
2
)
s
i
n
(
2
π
λ
y
s
i
n
θ
)
g_1\left(y\right)=\ exp\left(-\frac{y^2}{2\sigma^2}\right)cos\left(\frac{2\pi}{\lambda}ysin\theta\right);g_2\left(y\right)=\ exp\left(-\frac{y^2}{2\sigma^2}\right)sin\left(\frac{2\pi}{\lambda}ysin\theta\right)
g1(y)= exp(−2σ2y2)cos(λ2πysinθ);g2(y)= exp(−2σ2y2)sin(λ2πysinθ)
则gabor核的计算公式可化为:
k ( x , y ) = f 1 ( x ) g 1 ( y ) − f 2 ( x ) g 2 ( y ) k(x,\ y)=f_1\left(x\right)g_1\left(y\right)-f_2\left(x\right)g_2\left(y\right) k(x, y)=f1(x)g1(y)−f2(x)g2(y)
伪代码:
for x in kernel_size:
f1(x),f2(x)
for y in kernel_size:
g1(y),g2(y)
for x in kernel_size:
for y in kernel_size:
k(x,y)=f1(x)g1(y)-f2(x)g2(y)
此时,复杂的幂方与三角函数的计算只需进行O(n)次,而简单的乘法与加法运算才需进行
O
(
n
2
)
O(n^2)
O(n2)次。
非正交分解:
上述分解仅适用于
γ
=
1
\gamma=1
γ=1,对于
γ
\gamma
γ任意取值的更普遍情况,实验使用非正交分解。对,分别沿着
x
,
,
y
,
x^,{,y}^,
x,,y,与直线
t
:
y
−
x
t
a
n
α
=
0
t:y-xtan\alpha=0
t:y−xtanα=0进行分解,得到坐标变换
x
→
x
+
c
o
s
α
;
y
→
t
t
a
n
α
x\rightarrow x+cos\alpha;y\rightarrow ttan\alpha
x→x+cosα;y→ttanα与新元表示
σ
x
=
1
c
o
s
θ
2
+
s
i
n
θ
2
γ
2
;
σ
t
=
σ
c
o
s
θ
2
γ
2
+
s
i
n
θ
2
;
α
=
a
r
c
t
a
n
(
c
o
s
θ
2
γ
2
+
s
i
n
θ
2
(
1
−
1
r
2
)
c
o
s
θ
s
i
n
θ
)
\sigma_x=\frac{1}{{cos\theta}^2+{sin\theta}^2\gamma^2};\sigma_t=\sigma\sqrt{\frac{{cos\theta}^2}{\gamma^2}+{sin\theta}^2};\alpha=arctan(\frac{\frac{{cos\theta}^2}{\gamma^2}+{sin\theta}^2}{(1-\frac{1}{r^2})cos\theta sin\theta})
σx=cosθ2+sinθ2γ21;σt=σγ2cosθ2+sinθ2;α=arctan((1−r21)cosθsinθγ2cosθ2+sinθ2)将上述变换及新元表达式带入(1)式分解得:
f 1 ( x ) = e x p ( − x 2 2 σ x 2 ) cos ( 2 π λ x c o s θ ) ; f 2 ( x ) = e x p ( − x 2 2 σ x 2 ) sin ( 2 π λ x c o s θ ) f_1\left(x\right)=exp\left(-\frac{x^2}{2{\sigma_x}^2}\right)\cos{\left(\frac{2\pi}{\lambda}xcos\theta\right)};f_2\left(x\right)=exp\left(-\frac{x^2}{2{\sigma_x}^2}\right)\sin{\left(\frac{2\pi}{\lambda}xcos\theta\right)} f1(x)=exp(−2σx2x2)cos(λ2πxcosθ);f2(x)=exp(−2σx2x2)sin(λ2πxcosθ)
g 1 ( t ) = e x p ( − t 2 2 σ t 2 ) c o s ( 2 π λ t c o s ( θ − α ) ) ; g 2 ( t ) = e x p ( − t 2 2 σ t 2 ) s i n ( 2 π λ t c o s ( θ − α ) ) g_1\left(t\right)=\ exp\left(-\frac{t^2}{2{\sigma_t}^2}\right)cos\left(\frac{2\pi}{\lambda}tcos(\theta-\alpha)\right);g_2\left(t\right)=\ exp\left(-\frac{t^2}{2{\sigma_t}^2}\right)sin\left(\frac{2\pi}{\lambda}tcos(\theta-\alpha)\right) g1(t)= exp(−2σt2t2)cos(λ2πtcos(θ−α));g2(t)= exp(−2σt2t2)sin(λ2πtcos(θ−α))
则gabor核的计算公式可化为:
k
(
x
,
y
)
=
f
1
(
x
)
g
1
(
t
)
−
f
2
(
x
)
g
2
(
t
)
k(x,\ y)=f_1\left(x\right)g_1\left(t\right)-f_2\left(x\right)g_2\left(t\right)
k(x, y)=f1(x)g1(t)−f2(x)g2(t)
实验结果:
实 验 选 取 的 5 个 尺 度 为 [ 3 , 11 , 33 , 77 , 111 ] , 36 个 方 向 为 ( s t a r t = 0 , e n d = π , s t r i d e = π / 36 ) , 滤 波 参 数 为 : λ = π / 2 ; γ = 1 ; ψ = 0 。 样 例 图 片 的 大 小 为 ( h e i g h t = 675 , w i d t h = 1200 ) , 经 过 10 次 实 验 三 种 滤 波 方 式 的 平 均 时 间 花 费 如 下 : 实验选取的5个尺度为[3, 11, 33, 77, 111],36个方向为(start = 0, end = \pi, stride = \pi/36),滤波参数为:\lambda=\pi/2;\gamma=1;\psi=0。样例图片的大小为(height = 675, width = 1200),经过10次实验三种滤波方式的平均时间花费如下: 实验选取的5个尺度为[3,11,33,77,111],36个方向为(start=0,end=π,stride=π/36),滤波参数为:λ=π/2;γ=1;ψ=0。样例图片的大小为(height=675,width=1200),经过10次实验三种滤波方式的平均时间花费如下:
加速方式 | 花费时间(s) |
---|---|
无加速 | 11.076 |
正交分解加速 | 3.153 |
非正交分解加速 | 3.129 |