图像处理-Ch7-图像金字塔和其他变换
Ch7 小波变换&其他图像变换
文章目录
- Ch7 小波变换&其他图像变换
- 背景知识(bk)
- 图像金字塔(Image Pyramid)
- 子带编码(Sub-band Coding)
- Z - 变换(线性变换)
- 完美重建滤波器组(PCFB, Perfect Construction Filter Banks)
- 有限脉冲响应(FIR)滤波器
- 双正交性(biorthogonality)
- 通解
- 哈尔变换(Haar Transform)

绿色:考、红色:不考、黄色:可看。
个人博客!无广告观看,因为这节内容太多了,有点放不下
Q: 为什么我们需要小波变换?
A: 那当然是因为傅里叶变换有缺陷。时域(空域)上的函数经过傅里叶变换之后,得到频域上对应的函数。当然二者是等价的,但是频域上的函数只含有频域信息、时域上的函数也只含有时域信息。
这就导致了一个问题:我们没法根据 F ( u , v ) F(u,v) F(u,v)还原出原始的具有时间信息的时域函数(就是在一段时间内:存在固定频率的波形、经过不同顺序的排列:显然它们的时域函数不同、但是得到的频域函数确实完全一致的)。这说明傅里叶变换的时候丢失了时间的信息。
这也和测量不准性一致(海森堡定理):时域和频域就像跷跷板的两端,我们没法都做到最好、要么取极端、要么取中庸。
在量子力学中,海森堡不确定性原理指出,我们不能同时精确地测量粒子的位置和动量,类似地,在傅里叶分析中,我们不能同时在时域和频域中获得完全精确的信息。
Q: 小波变换的优势?
A: 1. 弥补傅里叶变换丢失时域信息
2. 具有多分辨率分析的能力,能够在不同尺度下对信号进行分析(可以在不同分辨率下提取特征).
背景知识(bk)
图像金字塔(Image Pyramid)
一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。
下图是拉普拉斯金字塔的构建:
- 图(a)建立了一个简单的图像金字塔系统。 j − 1 j-1 j−1级的近似输出用来建立近似值金字塔,包括原始图像的一个or多个近似值。
- 图(b)表明:近似值和预测残差金字塔都是以一种迭代的方式进行计算的。 2 ↑ 2\uparrow 2↑:上采样(插值)、 2 ↓ 2\downarrow 2↓:下采样。
下图中:上图表示高斯金字塔、下图表示拉普拉斯金字塔。分辨率:512\256\128\64
若要生成拉普拉斯金字塔,必须先生成高斯金字塔。拉普拉斯金字塔首先从 64 × 64 64\times 64 64×64大小的近似图像开始,预测( 插值or滤波实现 ) 128 × 128 128\times 128 128×128的高斯图像。对应的拉普拉斯金字塔图像=原始图像-上采样预测图像( 得到的插值 )。
子带编码(Sub-band Coding)
子带编码:一副图像被分解为一系列带限分量的集合,称为子带,它们可以重组在一起无失真地重建原始图像。每个子带可以通过带通滤波得到;因为得到的子带带宽比原始图像带宽小,因此子带可以无损地下采样( 奈奎斯特定理 )。原始图像的重建可以通过插值、滤波、叠加单个子带来完成。

Q: 得到的经过上下采样后的 g 0 ( n ) g_0(n) g0(n)与原始信号 h 0 ( n ) h_0(n) h0(n)一致吗?
A:通常来是不等的。上采样:插0.
Z - 变换(线性变换)
傅里叶变换是Z - 变换的一个特例。当 z z z取复平面上单位圆上的一个点 e j w e^{jw} ejw的时候,就是离散傅里叶变换的形式。
X ( z ) = ∑ n = − ∞ ∞ x ( n ) z − n X ( k ) = ∑ n = − ∞ ∞ x ( n ) e − j w n = ∑ n = − ∞ ∞ x ( n ) e − j 2 π N k n , k = 0 , 1 , … , N − 1 X(z)=\sum_{n =-\infty}^{\infty}x(n)z^{-n}\\ X(k)=\sum_{n =-\infty}^{\infty}x(n)e^{-jwn}=\sum_{n =-\infty}^{\infty}x(n)e^{-j\frac{2\pi}{N}kn},\ k=0,1,\dots,N-1 X(z)=n=−∞∑∞x(n)z−nX(k)=n=−∞∑∞x(n)e−jwn=n=−∞∑∞x(n)e−jN2πkn, k=0,1,…,N−1
其中: x ( n ) x(n) x(n)是时域信号, z z z是复变量。
e.g. x ( n ) = ( 1 3 5 7 ) x(n)=\begin{pmatrix}1&3&5&7\end{pmatrix} x(n)=(1357),角标是 [ − 1 , 0 , 1 , 2 ] [-1,0,1,2] [−1,0,1,2]
那么 x ( z ) = 1 ⋅ z + 3 + 5 ⋅ z − 1 + 7 ⋅ z − 2 x(z)=1·z+3+5·z^{-1}+7·z^{-2} x(z)=1⋅z+3+5⋅z−1+7⋅z−2,可见Z-变换是将时域信号转换为一个多项式函数。
-
信号下采样Z-变换:
x d o w n ( n ) = x ( 2 n ) X d o w n ( z ) = 1 2 [ X ( z 1 2 ) + X ( − z 1 2 ) ] \begin{align} x_{down}(n)&=x(2n)\\ X_{down}(z)&=\frac{1}{2}[X(z^{\frac{1}{2}})+X(-z^{\frac{1}{2}})] \end{align} xdown(n)Xdown(z)=x(2n)=21[X(z21)+X(−z21)] -
信号上采样Z-变换:(上采样中间填充0)
x u p ( n ) = { x ( n / 2 ) , n = 0 , 2 , 4 , ⋯ 0 , otherwise X u p ( z ) = X ( z 2 ) \begin{align} x_{up}(n)&=\begin{cases}x(n/2),&n = 0,2,4,\cdots\\0,&\text{otherwise}\end{cases}\\ X_{up}(z)&=X(z^{2}) \end{align} xup(n)Xup(z)={x(n/2),0,n=0,2,4,⋯otherwise=X(z2)
结合下采样和上采样,得到:
X ^ ( z ) = 1 2 [ X ( z ) + X ( − z ) ] s . t . { x ^ ( n ) = Z − 1 [ X ^ ( z ) ] Z − 1 [ X ^ ( − z ) ] = ( − 1 ) n x ^ ( n ) \hat{X}(z)=\frac{1}{2}[X(z)+X(-z)]\\\\ s.t.\begin{cases} \hat{x}(n)=Z^{-1}[\hat{X}(z)]\\ Z^{-1}[\hat{X}(-z)]=(-1)^{n}\hat{x}(n) \end{cases} X^(z)=21[X(z)+X(−z)]s.t.{x^(n)=Z−1[X^(z)]Z−1[X^(−z)]=(−1)nx^(n)
一个双子带编码和解码系统可表示为:
X ^ ( z ) = 1 2 G 0 ( z ) [ H 0 ( z ) X ( z ) + H 0 ( − z ) X ( − z ) ] + 1 2 G 1 ( z ) [ H 1 ( z ) X ( z ) + H 1 ( − z ) X ( − z ) ] \hat{X}(z)=\frac{1}{2}G_{0}(z)[H_{0}(z)X(z)+H_{0}(-z)X(-z)]+\\ \frac{1}{2}G_{1}(z)[H_{1}(z)X(z)+H_{1}(-z)X(-z)] X^(z)=21G0(z)[H0(z)X(z)+H0(−z)X(−z)]+21G1(z)[H1(z)X(z)+H1(−z)X(−z)]
其中滤波器 h 0 ( n ) h_{0}(n) h0(n)的输出由变换对定义:
h 0 ( n ) ∗ x ( n ) = ∑ k h 0 ( n − k ) x ( k ) ⇔ H 0 ( z ) X ( z ) h_{0}(n)*x(n)=\sum_{k}h_{0}(n - k)x(k)\Leftrightarrow H_{0}(z)X(z) h0(n)∗x(n)=k∑h0(n−k)x(k)⇔H0(z)X(z)
因为Z-变换是线性变换。重新排列上述方程中的项,得到 :
X ^ ( z ) = 1 2 [ H 0 ( z ) G 0 ( z ) + H 1 ( z ) G 1 ( z ) ] X ( z ) + 1 2 [ H 0 ( − z ) G 0 ( z ) + H 1 ( − z ) G 1 ( z ) ] X ( − z ) \hat{X}(z)=\frac{1}{2}[H_{0}(z)G_{0}(z)+H_{1}(z)G_{1}(z)]X(z)\\+\frac{1}{2}[H_{0}(-z)G_{0}(z)+H_{1}(-z)G_{1}(z)]X(-z) X^(z)=21[H0(z)G0(z)+H1(z)G1(z)]X(z)+21[H0(−z)G0(z)+H1(−z)G1(z)]X(−z)
我最终想要的结果是 X ^ ( z ) = X ( z ) \hat X(z)=X(z) X^(z)=X(z), 为了无误差地重建输入,施加以下条件:
H 0 ( z ) G 0 ( z ) + H 1 ( z ) G 1 ( z ) = 2 H 0 ( − z ) G 0 ( z ) + H 1 ( − z ) G 1 ( z ) = 0 H_{0}(z)G_{0}(z)+H_{1}(z)G_{1}(z)=2\\ H_{0}(-z)G_{0}(z)+H_{1}(-z)G_{1}(z)=0 H0(z)G0(z)+H1(z)G1(z)=2H0(−z)G0(z)+H1(−z)G1(z)=0
它们可以合并为单个矩阵表达式:
[ G 0 ( z ) G 1 ( z ) ] H m ( z ) = [ 2 0 ] H m ( z ) = [ H 0 ( z ) H 0 ( − z ) H 1 ( z ) H 1 ( − z ) ] [G_{0}(z)\quad G_{1}(z)]H_{m}(z)=[2\quad0]\\ H_{m}(z)=\begin{bmatrix}H_{0}(z)&H_{0}(-z)\\H_{1}(z)&H_{1}(-z)\end{bmatrix} [G0(z)G1(z)]Hm(z)=[20]Hm(z)=[H0(z)H1(z)H0(−z)H1(−z)]
其中 H m ( z ) H_m(z) Hm(z)是分析调制矩阵。
假设 H m ( z ) H_{m}(z) Hm(z)是非奇异(可逆),我们可以得到(此处就是非常普通的求解方程 A T x = b A^Tx=b ATx=b):
[ G 0 ( z ) G 1 ( z ) ] = 2 det ( H m ( z ) ) [ H 1 ( − z ) − H 0 ( − z ) ] \begin{bmatrix}G_{0}(z)\\G_{1}(z)\end{bmatrix}=\frac{2}{\text{det}(H_{m}(z))}\begin{bmatrix}H_{1}(-z)\\-H_{0}(-z)\end{bmatrix} [G0(z)G1(z)]=det(Hm(z))2[H1(−z)−H0(−z)]
上述方程表明 G 0 ( z ) G_{0}(z) G0(z)是 H 1 ( − z ) H_{1}(-z) H1(−z)的函数, G 1 ( z ) G_{1}(z) G1(z)是 H 0 ( − z ) H_{0}(-z) H0(−z)的函数。所以分析和合成滤波器是交叉调制的。

完美重建滤波器组(PCFB, Perfect Construction Filter Banks)
有限脉冲响应(FIR)滤波器
Q: 有限脉冲响应(FIR)滤波器?
A: 一种能够按照设计好的规则处理信号,并且它对脉冲信号的响应在一段时间后会结束的工具。
- 脉冲响应:当你给一个滤波器一个很特殊的输入,就像用小锤子敲一下(在信号里叫脉冲信号),滤波器会输出一个信号,这个输出信号就叫脉冲响应。
- 有限:对于 FIR 滤波器,它的脉冲响应在一段时间后就会变成零。通俗来讲,就像是你敲了一下小锤子,滤波器 “响” 了一会儿,然后就安静下来了,这个 “响” 的时间是有限的。
Q: 纯延迟?
A: 当一个信号通过这个系统时,其输出信号在时间轴上会向后移动一定的时间单位。如果把信号看作是一系列随时间变化的数值,那么经过这个系统后,每个数值出现的时间会推迟,而数值本身的大小等其他特性不变。
例子:例如,你对着山谷呼喊,声音传播到山谷对面再反射回来,你听到回声的过程就类似于一个延迟。声音本身除了延迟出现之外,没有其他变化。
对于有限脉冲响应(FIR)滤波器,分析调制矩阵 H m ( z ) H_{m}(z) Hm(z)的行列式是纯延迟:
det ( H m ( z ) ) = α z − ( 2 k + 1 ) \text{det}(H_{m}(z))=\alpha z^{-(2k + 1)} det(Hm(z))=αz−(2k+1)
z − ( 2 k + 1 ) z^{-(2k+1)} z−(2k+1)项可以被认为是任意的,因为它只是改变了滤波器的整体延迟。忽略延迟,令 α = 2 \alpha = 2 α=2并取逆 Z Z Z变换,得到:
g 0 ( n ) = ( − 1 ) n h 1 ( n ) g 1 ( n ) = ( − 1 ) n + 1 h 0 ( n ) \begin{align} &g_{0}(n)=(-1)^{n}h_{1}(n)\\ &g_{1}(n)=(-1)^{n + 1}h_{0}(n) \end{align} g0(n)=(−1)nh1(n)g1(n)=(−1)n+1h0(n)
如果 α = − 2 \alpha=-2 α=−2,得到的表达式符号反转,即:
g 0 ( n ) = ( − 1 ) n + 1 h 1 ( n ) g 1 ( n ) = ( − 1 ) n h 0 ( n ) \begin{align} &g_{0}(n)=(-1)^{n+1}h_{1}(n)\\ &g_{1}(n)=(-1)^{n}h_{0}(n) \end{align} g0(n)=(−1)n+1h1(n)g1(n)=(−1)nh0(n)
因此,FIR合成滤波器是分析滤波器的交叉调制版本,有且只有一个与分析滤波器方向相反。
双正交性(biorthogonality)
现在展示分析和合成滤波器的另一个重要特性:双正交性。
令 P ( z ) P(z) P(z)为低通分析和合成滤波器传递函数的乘积,得到:
P ( z ) = G 0 ( z ) H 0 ( z ) = 2 det ( H m ( z ) ) H 0 ( z ) H 1 ( − z ) P(z)=G_{0}(z)H_{0}(z)=\frac{2}{\text{det}(H_{m}(z))}H_{0}(z)H_{1}(-z) P(z)=G0(z)H0(z)=det(Hm(z))2H0(z)H1(−z)
由于 det ( H m ( z ) ) = − det ( H m ( − z ) ) \text{det}(H_{m}(z))=-\text{det}(H_{m}(-z)) det(Hm(z))=−det(Hm(−z)),乘积 G 1 ( z ) H 1 ( z ) G_{1}(z)H_{1}(z) G1(z)H1(z)可类似地定义为:
G 1 ( z ) H 1 ( z ) = − 2 det ( H m ( z ) ) H 0 ( − z ) H 1 ( z ) = P ( − z ) ∴ G 1 ( z ) H 1 ( z ) = P ( − z ) = G 0 ( − z ) H 0 ( − z ) G_{1}(z)H_{1}(z)=\frac{-2}{\text{det}(H_{m}(z))}H_{0}(-z)H_{1}(z)=P(-z)\\ \therefore G_{1}(z)H_{1}(z)=P(-z)=G_{0}(-z)H_{0}(-z) G1(z)H1(z)=det(Hm(z))−2H0(−z)H1(z)=P(−z)∴G1(z)H1(z)=P(−z)=G0(−z)H0(−z)
将其代入完美构建方程的约束条件,得到:
∵ H 0 ( z ) G 0 ( z ) + H 1 ( z ) G 1 ( z ) = 2 ∴ G 0 ( z ) H 0 ( z ) + G 0 ( − z ) H 0 ( − z ) = 2 \begin{align} &\because H_{0}(z)G_{0}(z)+H_{1}(z)G_{1}(z)=2\\ &\therefore G_{0}(z)H_{0}(z)+G_{0}(-z)H_{0}(-z)=2 \end{align} ∵H0(z)G0(z)+H1(z)G1(z)=2∴G0(z)H0(z)+G0(−z)H0(−z)=2
对 G 0 ( z ) H 0 ( z ) + G 0 ( − z ) H 0 ( − z ) = 2 G_{0}(z)H_{0}(z)+G_{0}(-z)H_{0}(-z)=2 G0(z)H0(z)+G0(−z)H0(−z)=2两边取逆 Z Z Z变换 { x ^ ( n ) = Z − 1 [ X ^ ( z ) ] Z − 1 [ X ^ ( − z ) ] = ( − 1 ) n x ^ ( n ) \begin{cases}\hat{x}(n)=Z^{-1}[\hat{X}(z)]\\ Z^{-1}[\hat{X}(-z)]=(-1)^{n}\hat{x}(n)\end{cases} {x^(n)=Z−1[X^(z)]Z−1[X^(−z)]=(−1)nx^(n),得:
∑ k g 0 ( k ) h 0 ( n − k ) + ( − 1 ) n ∑ k g 0 ( k ) h 0 ( n − k ) = 2 δ ( n ) δ ( n ) = { 1 , n = 0 0 , n ≠ 0 \sum_{k}g_{0}(k)h_{0}(n - k)+(-1)^{n}\sum_{k}g_{0}(k)h_{0}(n - k)=2\delta(n)\\ \delta{(n)}=\begin{cases}1 ,&n=0\\0, &n\neq 0\end{cases} k∑g0(k)h0(n−k)+(−1)nk∑g0(k)h0(n−k)=2δ(n)δ(n)={1,0,n=0n=0
δ ( n ) \delta(n) δ(n)是单位脉冲序列,由于奇数索引项抵消, 偶数项有两倍,抵消 2 δ ( n ) 2\delta(n) 2δ(n)中的2倍,进一步简化得到:
∑ k g 0 ( k ) h 0 ( 2 n − k ) = ⟨ g 0 ( k ) , h 0 ( 2 n − k ) ⟩ = δ ( n ) \sum_{k}g_{0}(k)h_{0}(2n - k)=\langle g_{0}(k),h_{0}(2n - k)\rangle=\delta(n) k∑g0(k)h0(2n−k)=⟨g0(k),h0(2n−k)⟩=δ(n)
类似地,可以证明:
⟨ g 1 ( k ) , h 1 ( 2 n − k ) ⟩ = δ ( n ) ⟨ g 0 ( k ) , h 1 ( 2 n − k ) ⟩ = 0 ⟨ g 1 ( k ) , h 0 ( 2 n − k ) ⟩ = 0 \begin{align} &\langle g_{1}(k),h_{1}(2n - k)\rangle=\delta(n)\\ &\langle g_{0}(k),h_{1}(2n - k)\rangle = 0\\ &\langle g_{1}(k),h_{0}(2n - k)\rangle = 0 \end{align} ⟨g1(k),h1(2n−k)⟩=δ(n)⟨g0(k),h1(2n−k)⟩=0⟨g1(k),h0(2n−k)⟩=0
可以建立更一般的表达式 :
⟨ h i ( 2 n − k ) , g j ( k ) ⟩ = δ ( i − j ) δ ( n ) i , j ∈ { 0 , 1 } \langle h_{i}(2n - k),g_{j}(k)\rangle=\delta(i - j)\delta(n)\quad i,j\in\{0,1\} ⟨hi(2n−k),gj(k)⟩=δ(i−j)δ(n)i,j∈{0,1}
滤波器组满足此条件,即双正交性。 (每一行:自己和自己内积=1,不同行内积=0,i与j )
结论:所有两频段实系数的完美构建滤波器组的分析和合成滤波器脉冲响应都受双正交性约束。
通解
- QMF(Quadrature Mirror Filter,正交镜像滤波器):是一种在数字信号处理中用于子带编码的滤波器。它的特点是低通滤波器和高通滤波器的频率响应是彼此的镜像关系,且满足一定的正交性条件。
- CQF(Conjugate Quadrature Filter,共轭正交滤波器):也是一种用于数字信号处理的滤波器。
- Orthonormal, 正交滤波器
- 被用于后续的快速小波变换的开发。
重要特性
- 双正交性(Biorthogonality) - 每种滤波器类型都满足双正交性要求,但它们的生成方式不同,从而定义了不同类别的完美重构滤波器。
- 原型滤波器(Prototype Filter) - 对于每一类,都有一个“原型”滤波器是按照特定规格设计的,其余的滤波器则是从这个原型滤波器计算得出的。
除了双正交性,完美重构滤波器组的正交性还定义为:
⟨ g i ( n ) , g j ( n + 2 m ) ⟩ = δ ( i − j ) δ ( m ) , i , j = { 0 , 1 } \langle g_i(n), g_j(n + 2m) \rangle=\delta(i - j)\delta(m),\ i, j = \{0, 1\} ⟨gi(n),gj(n+2m)⟩=δ(i−j)δ(m), i,j={0,1}
可以看到, G 1 G_1 G1与低通合成滤波器 G 0 G_0 G0通过调制、时域反转和奇数平移相关。此外, H 1 H_1 H1和 H 0 H_0 H0分别是对应合成滤波器 G 1 G_1 G1和 G 0 G_0 G0的时域反转。
Z-变化其他两个重要性质:
x ( − n ) ⟺ X ( z − 1 ) x ( n − k ) ⟺ z − k X ( z ) x(-n)\iff X(z^{-1})\\ x(n-k)\iff z^{-k}X(z) x(−n)⟺X(z−1)x(n−k)⟺z−kX(z)
正交滤波器的逆Z变换
Filter | Orthonormal |
---|---|
H 0 ( z ) H_0(z) H0(z) | G 0 ( z − 1 ) G_0(z^{-1}) G0(z−1) |
H 1 ( z ) H_1(z) H1(z) | G 1 ( z − 1 ) G_1(z^{-1}) G1(z−1) |
G 0 ( z ) G_0(z) G0(z) | G 0 ( z ) G 0 ( z − 1 ) + G 0 ( − z ) G 0 ( − z − 1 ) = 2 G_0(z)G_0(z^{-1})+G_0(-z)G_0(-z^{-1})=2 G0(z)G0(z−1)+G0(−z)G0(−z−1)=2 |
G 1 ( z ) G_1(z) G1(z) | − z − 2 K + 1 G 0 ( − z − 1 ) -z^{-2K+1}G_0(-z^{-1}) −z−2K+1G0(−z−1) |
对表格正交滤波器的适当项取逆Z变换,可以得到:
h 0 ( n ) = g 0 ( − n ) , h 1 ( n ) = g 1 ( − n ) h i ( n ) = g i ( 2 K − 1 − n ) , i = { 0 , 1 } g 1 ( n ) = ( − 1 ) n g 0 ( 2 K − 1 − n ) h_0(n)=g_0(-n),h_1(n)=g_1(-n)\\ h_i(n)=g_i(2K - 1 - n), i = \{0, 1\}\\\\ g_1(n)=(-1)^n g_0(2K - 1 - n)\\ h0(n)=g0(−n),h1(n)=g1(−n)hi(n)=gi(2K−1−n),i={0,1}g1(n)=(−1)ng0(2K−1−n)
这里 h 0 h_0 h0、 h 1 h_1 h1、 g 0 g_0 g0、 g 1 g_1 g1是定义的正交滤波器的脉冲响应。
可以看到式(1)与式(2)差了一个 2 K − 1 2K-1 2K−1,也就是说将 g i g_i gi推迟了 2 K − 1 2K-1 2K−1个时刻发生。这个对应前面的”有限脉冲响应(FIR)滤波器,分析调制矩阵 H m ( z ) H_{m}(z) Hm(z)的行列式是纯延迟“。
**加上2K-1的目的:**延迟操作可以用来控制信号在时间轴上的位置,确保滤波器的不同部分(如分析滤波器和合成滤波器)在时间上正确对齐。
哈尔变换(Haar Transform)
Haar变换(Haar [1910])的基函数是最古老且最简单的已知正交小波。Haar变换本身既是可分离的又是对称的,并且可以表示为矩阵形式:
T = H F H T T = HFH^{T} T=HFHT
其中 F F F是一个 N × N N\times N N×N矩阵, H H H是一个 N × N N\times N N×N变换矩阵, T T T是一个结果 N × N N\times N N×N变换。
变换矩阵 H H H包含在区间 z ∈ [ 0 , 1 ] z\in[0,1] z∈[0,1]上定义的Haar基函数 h k ( z ) h_{k}(z) hk(z),对于 k = 0 , ⋯ , N − 1 k = 0,\cdots,N - 1 k=0,⋯,N−1,其中 N = 2 n N = 2^{n} N=2n。
为了生成 H H H,我们定义整数 k k k, k = 2 p + q − 1 k = 2^{p}+q - 1 k=2p+q−1,其中 0 ≤ p ≤ n − 1 0\leq p\leq n - 1 0≤p≤n−1.
- 对于 p = 0 p = 0 p=0: q = 0 / 1 q = 0/1 q=0/1
- 对于 p ≠ 0 p\neq0 p=0: 1 ≤ q ≤ 2 p 1\leq q\leq 2^{p} 1≤q≤2p
举例说明:
k/10进制 k/2进制 p q 11 1011 3 4 21 10101 4 6 0 0 0 0 1 1 0 1
Haar基函数是( z ∈ [ 0 , 1 ] z\in[0,1] z∈[0,1]):
h 0 ( z ) = h 00 ( z ) = 1 N h k ( z ) = h p q ( z ) = 1 N { 2 p / 2 , ( q − 1 ) / 2 p ≤ z ≤ ( q − 0.5 ) / 2 p − 2 p / 2 , ( q − 0.5 ) / 2 p ≤ z ≤ q / 2 p 0 , otherwise h_{0}(z)=h_{00}(z)=\frac{1}{\sqrt{N}}\\ h_{k}(z)=h_{pq}(z)=\frac{1}{\sqrt{N}}\begin{cases}2^{p/2},&(q - 1)/2^{p}\leq z\leq (q - 0.5)/2^{p}\\-2^{p/2},&(q - 0.5)/2^{p}\leq z\leq q/2^{p}\\0,&\text{otherwise} \end{cases} h0(z)=h00(z)=N1hk(z)=hpq(z)=N1⎩ ⎨ ⎧2p/2,−2p/2,0,(q−1)/2p≤z≤(q−0.5)/2p(q−0.5)/2p≤z≤q/2potherwise
q决定正脉冲起始位置、p决定脉冲宽窄。
当 N = 8 N = 8 N=8时,对应的 k k k、 q q q、 p p p值,给出了一个表格:
k k k | 0 0 0 | 1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | 5 5 5 | 6 6 6 | 7 7 7 |
---|---|---|---|---|---|---|---|---|
p p p | 0 0 0 | 0 0 0 | 1 1 1 | 1 1 1 | 2 2 2 | 2 2 2 | 2 2 2 | 2 2 2 |
q q q | 0 0 0 | 1 1 1 | 1 1 1 | 2 2 2 | 1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 |
H 8 H_{8} H8矩阵 :当 N = 8 N = 8 N=8时, H 8 H_{8} H8矩阵为:
H 8 = 1 8 [ 1 1 1 1 1 1 1 1 1 1 1 1 − 1 − 1 − 1 − 1 2 2 − 2 − 2 0 0 0 0 0 0 0 0 2 2 − 2 − 2 2 − 2 0 0 0 0 0 0 0 0 2 − 2 0 0 0 0 0 0 0 0 2 − 2 0 0 0 0 0 0 0 0 2 − 2 ] H_{8}=\frac{1}{\sqrt{8}}\begin{bmatrix} 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & -1 & -1 & -1 & -1 \\ \sqrt{2} &\sqrt{2} & -\sqrt{2}& -\sqrt{2} & 0 & 0 & 0 & 0\\ 0 & 0 &0 & 0 & \sqrt{2} &\sqrt{2} & -\sqrt{2}& -\sqrt{2}\\ 2 & -2 & 0 & 0 &0&0&0&0\\ 0 & 0 & 2 & -2 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 2 & -2 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 2 & -2 \\ \end{bmatrix} H8=81 112020001120−200011−20020011−200−2001−10200201−10200−201−10−200021−10−2000−2
哈尔矩阵:第一行永远是1,第二行永远一半1一半-1.
反正算就完事了。
相关文章:
图像处理-Ch7-图像金字塔和其他变换
Ch7 小波变换&其他图像变换 文章目录 Ch7 小波变换&其他图像变换背景知识(bk)图像金字塔(Image Pyramid)子带编码(Sub-band Coding)Z - 变换(线性变换)完美重建滤波器组(PCFB, Perfect Construction Filter Banks)有限脉冲响应(FIR)滤波器双正交…...
解决在vue3+vite+element-plus 中echarts在el-dialog无法正常显示问题
核心:在dom加载完成后调用echarts实例 的resize()方法 这里是一个例子 这里封装一个echarts <template><div class"container" ref"container"></div> </template> <script lang"ts" setup> import {…...
SQL进阶技巧:如何计算摆动的序列?| LeetCode 376.-摆动序列
目录 0 摆动序列 1 数据准备 2 问题分析 3 小结 0 摆动序列 原题链接:376. 摆动序列 - 力扣(LeetCode) 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的…...
告别卡顿:探索 Java FGC 的根源与高效解决方案
Java Full Garbage Collection (FGC) 的产生原因及解决办法 引言 在Java应用程序的生命周期中,垃圾回收(Garbage Collection, GC)是确保内存有效管理的关键机制。然而,当发生Full Garbage Collection(FGC)…...
MySQL索引为什么是B+树
MySQL索引为什么是B树 索引是帮助MySQL高效获取数据的数据结构,在数据之外,数据库还维护着满足特定查找算法的数据结构B树,这些数据结果以某种特定的方式引用数据,这样就可以在这些数据结构上实现高级查找算法,提升数据…...
准备考试:解决大学入学考试问题
引言 在编程竞赛和算法挑战中,我们经常会遇到各种类型的组合问题。这些问题不仅考验我们的逻辑思维能力,还要求我们熟练掌握数据结构和算法。在这篇文章中,我们将探讨一个有趣的问题——“准备考试”,这个问题来自于一个虚构的情…...
vue3中如何自定义插件
英译汉插件 i18n.ts export default {install: (app: any, options: any) > {// 注入一个全局可用的$translate()方法app.config.globalProperties.$translate (key: string) > {// 获取options对象的深层属性// 使用key作为索引return key.split(".").redu…...
Linux应用软件编程-多任务处理(进程)
多任务:让系统具备同时处理多个事件的能力。让系统具备并发性能。方法:进程和线程。这里先讲进程。 进程(process):正在执行的程序,执行过程中需要消耗内存和CPU。 进程的创建:操作系统在进程创…...
PyCharm专项训练5 最短路径算法
一、实验目的 本文的实验目的是通过编程实践,掌握并应用Dijkstra(迪杰斯特拉)算法和Floyd(弗洛伊德)算法来解决图论中的最短路径问题。 二、实验内容 数据准备: 使用邻接表的形式定义两个图graph_dijkstra…...
“AI+Security”系列第4期(一)之“洞” 见未来:AI 驱动的漏洞挖掘新范式
在数字化浪潮下,安全漏洞问题日益严峻,成为各行业发展的重大挑战。近日,“AISecurity” 系列第 4 期线下活动于北京成功举办,聚焦 “洞” 见未来:AI 驱动的漏洞挖掘新范式,汇聚了安全领域的众多专家。 本次…...
安卓蓝牙扫描流程
目录 系统广播 流程图 源码跟踪 系统广播 扫描开启广播:BluetoothAdapter.ACTION_DISCOVERY_STARTED "android.bluetooth.adapter.action.DISCOVERY_STARTED";扫描关闭广播:BluetoothAdapter.ACTION_DISCOVERY_FINISHED "android.b…...
【视觉惯性SLAM:对极几何】
对极几何(Epipolar Geometry)介绍 对极几何是立体视觉中的核心内容之一,它描述了两个相机在观察同一个三维场景时,成像平面之间的几何关系。对极几何能够约束图像中对应点的位置关系,是双目立体匹配、三维重建、以及位…...
Stream `Collectors.toList()` 和 `Stream.toList()` 的区别(Java)
Stream Collectors.toList() 和 Stream.toList() 的区别 问题背景 在以下代码中: Test void test() {JSONArray nodes new JSONArray();String[] names {"df1", "df2", "df3"};for (String name : names) {JSONObject obj new …...
【Python知识】Python面向对象编程知识
Python面向对象编程知识 概述1. 类(Class)2. 对象(Object)3. 封装(Encapsulation)4. 继承(Inheritance)5. 多态(Polymorphism)6. 抽象(Abstractio…...
安卓帧率获取
背景 性能优化,经常用到一些指标,诸如帧率、功耗等。对于普通app来讲, 之前一直使用gfxinfo指令获取丢帧率。但是这个指令无法获取游戏的帧率,查阅资料,发现SurfaceFlinger可以获取游戏帧率。 帧率获取原理 获取当前f…...
shell脚本(全)
shell脚本概述 第一个shell脚本 shell注释 shell变量 shell位置参数 shell字符串 shell内置命令 shell命令替换 输出 流程控制IF export命令 退出脚本 运行Shell脚本 实例导航 shell脚本概述 在说什么是shell脚本之前,先说说什么是shell。 从程序员的…...
Flask-----SQLAlchemy教程
存session session[username] username # 存储数据到 session 取session username session.get(username) render_template return render_template(index.html, usernameAlice),渲染一个包含 username 变量的模板。 redirect return redirect(url_for(profil…...
【C++11】可变模板参数
目录 可变模板的定义方式 参数包的展开方式 递归的方式展开参数包 STL中的emplace相关接口函数 STL容器中emplace相关插入接口函数 编辑 模拟实现:emplace接口 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比 C9…...
.NET开发人员学习书籍推荐
作为一名.NET开发人员,掌握相关技术是提升开发能力和拓展职业发展的关键。无论你是刚入门的新人,还是希望精进技术的资深开发者,选择合适的学习资源至关重要。下面是一些经典且实用的学习书籍推荐,帮助你在C#、SQL、前端开发等方面…...
jupyter切换内核方法配置问题总结
下面这个博客总结了3种不同的方法,很有调理,推荐尝试 【最全指南】如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境? !!! 注意使用上面介绍的ipykernel方法2, 要在每一个希望被jupyter识别到的环境内【分别】安装ipykernel以及添加配置 …...
SVM理论推导
本文介绍支持向量机(SVM)的理论推导。 一、SVM 的基本思想 SVM 的目标是找到一个最优超平面,将样本分为不同的类别,并最大化类别间的间隔。 1. 线性可分情况下: 在特征空间中找到一个超平面,使得&#…...
如何永久解决Apache Struts文件上传漏洞
Apache Struts又双叒叕爆文件上传漏洞了。 自Apache Struts框架发布以来,就存在多个版本的漏洞,其中一些漏洞涉及到文件上传功能。这些漏洞可能允许攻击者通过构造特定的请求来绕过安全限制,从而上传恶意文件。虽然每次官方都发布补丁进行修…...
【Java数据结构与算法】第10-14章
第10章 树结构的基础部分 10.1 二叉树 10.1.1 为什么需要树这种数据结构 10.1.2 树示意图 10.1.3 二叉树的概念 10.1.4 二叉树遍历的说明 10.1.5 二叉树遍历应用实例(前序,中序,后序) 10.1.6 二叉树-查找指定节点 思路图解 10.1.7 二叉树-删除节点 package com.atguigu.tree;…...
MacOS M3源代码编译Qt6.8.1
编译时间过长,如果不想自己编译,可以通过如果网盘进行下载: 链接: https://pan.baidu.com/s/17lvF5jQ-vR6vE-KEchzrVA?pwdts26 提取码: ts26 在macOS上编译Qt 6需要一些前置步骤和工具。以下是编译Qt 6的基本步骤: 安装Xcode和…...
3.银河麒麟V10 离线安装Nginx
1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖,前往 官网下载 pcre2依赖下载,前往Git下载 zlib依赖下载,前往Git下载 下载完成后完整的包如下: 如果网速下载不到请使用网盘下载 通过网盘分享的文件…...
实现 QTreeWidget 中子节点勾选状态的递归更新功能只影响跟节点的状态父节点状态不受影响
在 Qt 开发中,QTreeWidget 提供了树形结构的显示和交互功能。为了实现某个子节点勾选或取消勾选时,只影响当前节点及其子节点的状态,同时递归更新父节点的状态以正确显示 Qt::PartiallyChecked 或 Qt::Checked,我们可以借助 Qt 的…...
ubuntu24.04使用opencv4
ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...
R语言数据分析案例46-不同区域教育情况回归分析和探索
一、研究背景 教育是社会发展的基石,对国家和地区的经济、文化以及社会进步起着至关重要的作用。在全球一体化进程加速的今天,不同区域的教育发展水平呈现出多样化的态势。这种差异不仅体现在教育资源的分配上,还表现在教育成果、教育投入与…...
flink sink doris
接上文:一文说清flink从编码到部署上线 网上关于flink sink drois的例子较多,大部分不太全面,故本文详细说明,且提供完整代码。 flink doris版本对照表 1.添加依赖 <!--doris cdc--><!-- 参考:"https…...
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
在当今大数据与人工智能蓬勃发展的时代,Apache Spark MLlib 作为强大的机器学习库,与广泛应用的 Java 语言相结合,为数据科学家和开发者们提供了丰富的可能性。那么,Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...
Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法
官方文档 https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Text/Find-and-replace-text-on-PDF-document-in-C.html C# 在 PDF 中查找替换文本 原文件如下图,替换第一行的新编码,把41230441044替换为41230441000 替换代码如下ÿ…...
Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)
数据的存储是基于 主题(Topic) 和 分区(Partition) 的 Kafka是一个高可靠性的分布式消息系统,广泛应用于大规模数据处理和实时, 为了更方便地管理和监控Kafka集群,开发人员和运维人员经常需要使用可视化工具…...
青少年编程与数学 02-004 Go语言Web编程 21课题、应用部署
青少年编程与数学 02-004 Go语言Web编程 21课题、应用部署 一、应用部署二、GoWeb部署到WINDOWS系统中1. 安装Go环境2. 创建并编写Go Web应用3. 初始化Go模块4. 编译Go Web应用5. 配置和运行Nginx6. 运行Go Web应用7. 访问应用总结 三、GoWeb部署到LINUX系统中1. 准备Linux服务…...
009-spring-bean的实例化流程
1 spring容器初始化时,将xml配置的bean 信息封装在 beandefinition对象 2 所有的beandefinition存储在 beandefinitionMap的map集合中 3 spring对map进行遍历,使用反射创建bean实例对象 4 创建好的bean存在名为singletonObjects的map集合中 5 调用ge…...
Timsort算法
Timsort算法是一种混合、稳定且高效的排序算法,源自归并排序和插入排序。它通过将已识别的子序列(称为“run”)与现有run合并直到满足某些条件来完成排序。以下是对Timsort算法的详细解释及举例说明: Timsort算法概述 混合性&…...
uniapp+vue 前端防多次点击表单,防误触多次请求方法。
最近项目需求写了个uniappvue前端H5,有个页面提交表单的时候发现会有用户乱点导致数据库多条重复脏数据。故需要优化,多次点击表单只请求一次。 思路: 直接调用uni.showToast,点完按钮跳一个提交成功的提示。然后把防触摸穿透mask设置成true就行&#…...
八、Hbase
Hbase 一、NoSQL非关系型数据库简介1.NoSQL 的起因2.NoSQL 的特点3.NoSQL 面临的挑战4.NoSQL 的分类 二、HBase数据库概述1.HBase数据库简介2.HBase数据模型简介3.HBase数据模型基本概念4.Hbase概念视图(逻辑视图)5.Hbase物理视图6.Hbase主要组件7.Hbase安装8.Hbase的数据读写流…...
ubuntu安装sublime安装与免费使用
1. ubuntu安装sublime 参考官网: Linux Package Manager Repositories 2. 破解过程 打开如下网址,打开/opt/sublime_text/sublime_text https://hexed.it/ 3. 替换在hexed打开的文件中查找并替换: 4180激活方法 使用二进制编辑器 8079 0500 0f94 c2替换为 c641 05…...
Onedrive精神分裂怎么办(有变更却不同步)
Onedrive有时候会分裂,你在本地删除文件,并没有同步到云端,但是本地却显示同步成功。 比如删掉了一个目录,在本地看已经删掉,onedrive显示已同步,但是别的电脑并不会同步到这个删除操作,在网页版…...
图像裁剪与批量推理:解决分割和变化检测中的大图处理问题
引言 在分割、变化检测等任务中,我们经常会遇到一个问题:模型的输入尺寸是固定且较小的(如256256或512512)。当需要处理分辨率较高的大图时,直接输入到模型中显然是不切实际的。那么,如何高效地解决这个问…...
第4章 函数
2024年12月25日一稿 4.1 函数的定义 4.1.1 函数和像 4.1.2 函数的性质 4.1.3 常用函数 4.2 复合函数和反函数 4.2.1 复合函数 4.2.2 反函数 4.3 特征函数与模糊子集 4.4 基数的概念 4.4.1 后继与归纳集 4.4.2 自然数,有穷集,无穷集 4.4.3 基数 4.5 可数…...
【JavaEE进阶】Spring传递请求参数
目录 🎍序言 🌴传递单个参数 🍀传递多个参数 🎄传递对象 🌳后端参数重命名(后端参数映射) 🚩ReuqestParam注解 🎍序言 访问不同的路径,就是发送不同的请求.在发送…...
在跨平台开发环境中构建高效的C++项目:从基础到最佳实践20241225
在跨平台开发环境中构建高效的C项目:从基础到最佳实践 引言 在现代软件开发中,跨平台兼容性和高效开发流程是每个工程师追求的目标。尤其是对于 C 开发者,管理代码的跨平台构建以及调试流程可能成为一项棘手的挑战。在本文中,我…...
无人零售及开源 AI 智能名片 S2B2C 商城小程序的深度剖析
摘要:本文聚焦无人零售这一新兴零售模式及其发展浪潮中崛起的开源 AI 智能名片 S2B2C 商城小程序。深入阐述无人零售的发展态势,细致剖析其驱动因素、现存问题,全面详细介绍小程序的功能特性、应用优势以及对无人零售的潜在价值,旨…...
PCL点云库入门——PCL库点云滤波算法之直通滤波(PassThrough)和条件滤波(ConditionalRemoval)
0、滤波算法概述 PCL点云库中的滤波算法是处理点云数据不可或缺的一部分,它们能够有效地去除噪声、提取特征或进行数据降维。例如,使用体素网格滤波(VoxelGrid)可以减少点云数据量,同时保留重要的形状特征。此外&#…...
v语言介绍
V 语言是一种多用途的编程语言,可以用于前端开发、后端开发、系统编程、游戏开发等多个领域。它的设计哲学是提供接近 C 语言的性能,同时简化开发过程并提高代码的安全性和可读性。接下来我会详细介绍 V 在前后端开发中的应用,并给出一个具体…...
GPT-O3:简单介绍
GPT-O3:人工智能领域的重大突破 近日,OpenAI发布了其最新的AI模型GPT-O3,这一模型在AGI评估中取得了惊人的成绩,展现出强大的能力和潜力。GPT-O3的出现标志着人工智能领域的重大进步,预计将在2025年实现更大的突破。 …...
重温设计模式--适配器模式
文章目录 适配器模式(Adapter Pattern)概述适配器模式UML图适配器模式的结构目标接口(Target):适配器(Adapter):被适配者(Adaptee): 作用…...
API部署大模型
由于生产测试环境的服务器配置较低 不能够支撑大模型运行的配置 所以需要将大模型封装部署在A服务器上 在B服务器上进行调用 封装时可以使用FastAPI与Websocket两种通信方式进行通信 Websocket 在A服务器端部署大模型(服务端) import asyncio import …...
Linux -- 同步与条件变量
目录 同步 条件变量 pthread_cond_t pthread_cond_init(初始化条件变量) pthread_cond_destroy(销毁条件变量) pthread_cond_wait(线程等待条件变量) 重要提醒 pthread_cond_boardcast(…...