图像处理-Ch2-空间域的图像增强
Ch2 空间域的图像增强
文章目录
- Ch2 空间域的图像增强
- Background
- 灰度变换函数(Gray-level Transformation)
- 对数变换(Logarithmic)
- 幂律变换(Power-Law)
- 分段线性变换函数(Piecewise-Linear)
- 对比度拉伸(Contrast-Stretching)
- 灰度级分层(Gray-level Slicing)
- 直方图处理(Histogram Processing)
- 直方图均衡化(Histogram Equalization)
- 直方图匹配(Histogram Matching)
- QA
- 空间滤波(Spatial Filtering)
- 线性移不变系统与卷积
- 强无敌例子说明
- 线性空间滤波(Linear Spatial Filtering)
- Correlation v.s. Convolution
- 非线性空间滤波(Nonlinear Spatial Filtering)
- 锐化(高通)空间滤波器(Sharpening Spatial Filters)
- 拉普拉斯滤波器(Laplacian Filter)
- 钝化掩蔽和高提升滤波(Unsharp masking and high-boost filtering)
The principal objective of enhancement is to proce s s s an image so that the result is more suitable than the original image for a specific application.
图像增强的目的:使图像更适于特定应用。
图像增强分为两大类:
- 空间域方法:对图像中像素直接操作。
- 频率域方法:对图像傅里叶变换进行修改。
Background
空间域处理数学表达:
g ( x , y ) = T [ f ( x , y ) ] g(x,y)=T[f(x,y)] g(x,y)=T[f(x,y)]
- f ( x , y ) f(x,y) f(x,y): 输入图像
- g ( x , y ) g(x,y) g(x,y): 输出图像
- T T T: an operator on f f f, defined over some neighborhood of ( x , y ) (x, y) (x,y). 在 ( x , y ) (x,y) (x,y)一个邻域上定义的对 f f f的算子。
Q: 算子?邻域?
A: 算子可应用于单幅图像的pixels or 一组图像的 pixels.
邻域一般是 ( x , y ) (x,y) (x,y)周边的8个格子( 3 × 3 , ( x , y ) 3\times 3, (x,y) 3×3,(x,y)处于中心)、可能还有矩形或是圆形。
最简单的 T T T是邻域 1 × 1 1\times 1 1×1的(也就是只有本身 ( x , y ) (x,y) (x,y)),称为灰度变换函数。
s = T ( r ) s=T(r) s=T(r)
s , r s,r s,r分别表示 g , f g,f g,f在任意点 ( x , y ) (x,y) (x,y)处的灰度。
灰度变换函数(Gray-level Transformation)
对数变换(Logarithmic)
s = c log ( 1 + r ) s=c\log(1+r) s=clog(1+r)
c c c是常数, r ≥ 0 r\ge 0 r≥0.
对数变换的作用:
- 动态范围压缩:当输入图像的灰度值范围非常宽(例如 0 到 10610^6106),直接显示会丢失暗部细节。通过对数变换,可以将宽动态范围压缩到更可管理的范围。
- 细节增强:低强度值区域的细节被拉伸并增强,因此在频谱图像、医学图像中常用。
对数变换的曲线特性:
- 对数变换的形状固定。此变换的形状类似于 γ \gamma γ曲线,两个尺度上的低值均设置为 0,高值均设置为 1。
- 当 r r r 较小时,输出 s s s增长较快(细节增强)。
- 当 r r r 较大时,输出 s s s 增长减缓(压缩动态范围)。
- 和 Gamma 校正 不同,对数变换的曲线形状不可调。
幂律变换(Power-Law)
s = c r γ s=cr^{\gamma} s=crγ
其中, c , γ c,\gamma c,γ是正常数(positive constants)。
分段线性变换函数(Piecewise-Linear)
对比度拉伸(Contrast-Stretching)
对比度拉伸是一种用于增强图像对比度的强度变换方法。通过对灰度值的拉伸,使暗区域更暗、亮区域更亮,从而增强图像的视觉效果。
对比度拉伸的公式可以定义为:
s = T ( r ) = 1 1 + ( m r ) E s = T(r) = \frac{1}{1 + \left(\frac{m}{r}\right)^E} s=T(r)=1+(rm)E1
- s s s: 输出像素的灰度值。
- r r r: 输入像素的灰度值。
- m m m: 输入图像灰度值的中点(灰度范围的阈值)。
- E E E: 函数的幂次,用于控制拉伸的坡度(陡峭程度)。
对比度拉伸的作用:
- 增强图像细节:使图像中灰度分布更加均匀,提升对比度。
- 突出某些特定灰度值区域:通过调整参数 m m m 和 E E E,可以针对性地增强某些灰度值范围。
- 解决低对比度问题:例如,在过暗或过亮的图像中,灰度值集中在某一小范围内时,拉伸可以增加动态范围,提升视觉效果。
灰度级分层(Gray-level Slicing)
突出图像中的特定灰度区间:
-
method1:(二值图像) 将感兴趣范围内的所有灰度值显示为一个值、将其他所有灰度值显示为另外一个值。
-
method2:基于下图中的变换,使期望的灰度范围变亮(/变暗),但保持图像中其他的灰度级不变。
比特平面分层(Bit-plane slicing): 像素值是由比特组成的整数。8比特图像可以视为8个1比特平面组成,其中plane 1中包含图像中所有图像的最低有效比特、plane 8包含所有像素的最高有效比特。
直方图处理(Histogram Processing)
图像的直方图是一种统计工具,用来描述图像中像素强度(灰度值)的分布情况。
f f f的非归一化直方图定义为:
h ( r k ) = n k , k = 0 , 1 , … , L − 1 h(r_k)=n_k,k=0,1,\dots,L-1 h(rk)=nk,k=0,1,…,L−1
其中, r k r_k rk表示一副 L L L级灰度数字图像 f ( x , y ) f(x,y) f(x,y)的灰度, n k n_k nk表示 f f f中灰度为 r k r_k rk的像素的数量,并且细分的灰度级称为直方图容器。
f f f的归一化直方图定义为:
p ( r k ) = h ( r k ) M N = n k M N p(r_k)=\frac{h(r_k)}{MN}=\frac{n_k}{MN} p(rk)=MNh(rk)=MNnk
其中 M , N M,N M,N分别是图像的行数和列数。(这是书上给出的公式)
或者也可以写成(PPT中给出的公式):
p ( r k ) = h ( r k ) N = n k N N = ∑ k = 0 L − 1 n k , k = 0 , 1 , … , L − 1 p(r_k)=\frac{h(r_k)}{N}=\frac{n_k}{N}\\ N=\sum^{L-1}_{k=0}n_k,\ k=0,1,\dots,L-1 p(rk)=Nh(rk)=NnkN=k=0∑L−1nk, k=0,1,…,L−1
殊途同归。 p ( r k ) p(r_k) p(rk)是对图像中出现的灰度级 r k r_k rk的概率的估计。对k的所有值, p ( r k ) p(r_k) p(rk)的和总是1.
直方图均衡化(Histogram Equalization)
直方图均衡化是一种自动调整图像亮度分布的方法,通过重新分配像素灰度值,使输出图像的灰度直方图尽可能接近均匀分布,从而增强图像的整体对比度。
假设灰度值最初是连续的,令变量 r r r表示待处理图像的灰度。 r = [ 0 , L − 1 ] r=[0,L-1] r=[0,L−1], r = 0 r=0 r=0黑色, r = L − 1 r=L-1 r=L−1白色。对于这些满足条件的 r r r,我们关注如下的灰度映射:
s = T ( r ) , 0 ≤ r ≤ L − 1 s=T(r),\quad 0\le r\le L-1 s=T(r),0≤r≤L−1
对于输入图像中的给定灰度值 r r r, 它将产生一个输出灰度值 s s s。假设:
- T ( r ) T(r) T(r)在区间 [ 0 , L − 1 ] [0,L-1] [0,L−1]上是一个单调递增函数.
- 对 0 ≤ r ≤ L − 1 0\le r\le L-1 0≤r≤L−1, 有 0 ≤ T ( r ) ≤ L − 1 0\le T(r)\le L-1 0≤T(r)≤L−1.
假使我们想从 s s s逆推回 r r r, 那么就是 T T T的逆变换。如果想这个倒推成立,那么就需要是严格递增函数,不然自变量与因变量就不是一一对应的关系。
直方图均衡化基于概率密度函数(PDF:probability density function),产生一个随机变量。
连续变量 r , s r,s r,s
p s ( s ) = p r ( r ) ∣ d r d s ∣ = p r ( r ) ∣ 1 ( L − 1 ) p r ( r ) = 1 L − 1 , 0 ≤ s ≤ L − 1 p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert=p_r(r)\vert\frac 1 {(L-1)p_r(r)}=\frac 1{L-1},\quad 0\le s\le L-1 ps(s)=pr(r) dsdr =pr(r)∣(L−1)pr(r)1=L−11,0≤s≤L−1
其中 p r ( r ) , p s ( s ) p_r(r), p_s(s) pr(r),ps(s)分别表示两幅不同图像中灰度值 r , s r,s r,s的概率密度函数(PDF). p p p的下标表明 p r , p s p_r,p_s pr,ps是不同的函数。可见 p s ( s ) p_s(s) ps(s)是均匀(uniform)PDF, T ( r ) T(r) T(r)取决于 p r ( r ) p_r(r) pr(r), 但 p s ( s ) p_s(s) ps(s)永远是均匀的。
**概率论基本结论:**若已知 p r ( r ) , T ( r ) p_r(r),T(r) pr(r),T(r), 且 T ( r ) T(r) T(r)是连续的且在感兴趣的值域上是可微的,则变换侯的变量 s s s的PDF是:
p s ( s ) = p r ( r ) ∣ d r d s ∣ p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert ps(s)=pr(r) dsdr
累计分布函数(CDF: cumulative distribution function):由于PDF总为正,且函数的积分是函数下方的面积,因此可以证明 s = T ( r ) s=T(r) s=T(r)是单调递增函数。
s = T ( r ) = ∫ 0 r p r ( w ) d w s=T(r)=\int^r_0 p_r(w)dw s=T(r)=∫0rpr(w)dw
计算微分:
d s d r = d T ( r ) d r = d [ ∫ 0 r p r ( w ) d w ] d r = p r ( r ) p s ( s ) = p r ( r ) ∣ d r d s ∣ = p r ( r ) ∗ 1 p r ( r ) = 1 , 0 ≤ s ≤ 1 \frac{ds}{dr}=\frac{dT(r)}{dr}=\frac{d\left[\int^r_0 p_r(w)dw\right]}{dr}=p_r(r)\\ p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert=p_r(r)*\frac{1}{p_r(r)}=1,\quad 0\le s\le 1 drds=drdT(r)=drd[∫0rpr(w)dw]=pr(r)ps(s)=pr(r) dsdr =pr(r)∗pr(r)1=1,0≤s≤1
假如说 0 ≤ s ≤ L − 1 0\le s\le L-1 0≤s≤L−1,则有:
p s ( s ) = p r ( r ) ∣ d r d s ∣ = p r ( r ) ∗ 1 ( L − 1 ) p r ( r ) = 1 L − 1 , 0 ≤ s ≤ L − 1 p_s(s)=p_r(r)\left\vert\frac{dr}{ds}\right\vert=p_r(r)*\frac{1}{(L-1)p_r(r)}=\frac 1 {L-1}, \quad 0\le s\le L-1 ps(s)=pr(r) dsdr =pr(r)∗(L−1)pr(r)1=L−11,0≤s≤L−1
离散变量 r , s r,s r,s
在离散的条件下有, 下列数学表达。需要注意,第一个是书上给出、第二个是PPT中给出,二者没什么大的差别。灰度级 r k r_k rk在一副图像中出现的概率是:
p r ( r k ) = h ( r k ) M N = n k M N p r ( r k ) = n k N , k = 0 , 1 , … , L − 1 p_r(r_k)=\frac{h(r_k)}{MN}=\frac{n_k}{MN} \\ p_r(r_k)=\frac{n_k}{N},\quad k=0,1,\dots,L-1 pr(rk)=MNh(rk)=MNnkpr(rk)=Nnk,k=0,1,…,L−1
灰度映射函数是:
s = T ( r k ) = ∑ j − 0 k p r ( r j ) = ∑ j − 0 k n k M N s = T ( r k ) = ∑ j − 0 k p r ( r j ) = ∑ j = 0 k n j N s=T(r_k)=\sum^k_{j-0}p_r(r_j)=\sum^k_{j-0}\frac{n_k}{MN}\\ s=T(r_k)=\sum^k_{j-0}p_r(r_j)=\sum^k_{j=0}\frac{n_j}{N} s=T(rk)=j−0∑kpr(rj)=j−0∑kMNnks=T(rk)=j−0∑kpr(rj)=j=0∑kNnj
使用这个函数可以将输入图像中灰度级为 r k r_k rk的每个像素映射到输出图像中灰度级为 s k s_k sk的对应像素,这称为直方图均衡化/直方图线性化变换。
直方图匹配(Histogram Matching)
直方图均衡化产生一个变换函数,试图生成一副具有均匀直方图的输出图像。但有时候不适用,有时候需要规定待处理图像的直方图形状。用于生成具有规定直方图图像的方法,称为直方图匹配或是直方图均衡化。
令 r , z r,z r,z是PDF p r ( r ) , p z ( Z ) p_r(r),p_z(Z) pr(r),pz(Z)的随机变量。 r , z r,z r,z分别表示输入图像和输出图像的灰度级。 p z ( z ) p_z(z) pz(z)是规定的PDF,是我们希望输出图像具有的。
计算直方图匹配三步走:
- 计算输入图像的直方图 p r ( r ) p_r(r) pr(r), 得到 s k s_k sk
- 计算 G ( z q ) = ( L − 1 ) ∑ i = 0 q p z ( z i ) G(z_q)=(L-1)\sum^q_{i=0}p_z(z_i) G(zq)=(L−1)∑i=0qpz(zi), p z ( z ) p_z(z) pz(z)是规定直方图的所有值。
- 计算 G ( z q ) = s k G(z_q)=s_k G(zq)=sk, 求 G − 1 G^{-1} G−1, 找到对应的 z q z_q zq的对应值,匹配,形成直方图规定化后的图像。
连续变量 r , s , z r,s,z r,s,z
令 s s s是一个具有如下性质的随机变量:
s = T ( r ) = ( L − 1 ) ∫ 0 r p r ( w ) d w s=T(r)=(L-1)\int^r_0p_r(w)dw s=T(r)=(L−1)∫0rpr(w)dw
定义关于变量 z z z的一个函数 G G G, 它具有如下的性质:
G ( z ) = ( L − 1 ) ∫ 0 z p z ( v ) d v = s G(z)=(L-1)\int^z_0p_z(v)dv=s G(z)=(L−1)∫0zpz(v)dv=s
由这两个公式可知: G ( z ) = s = T ( r ) G(z)=s=T(r) G(z)=s=T(r), 因此 z z z必定满足条件:
z = G − 1 ( s ) = G − 1 [ T ( r ) ] z=G^{-1}(s)=G^{-1}[T(r)] z=G−1(s)=G−1[T(r)]
使用输入图像算出 p r ( r ) p_r(r) pr(r)后,就可以得到 s s s, 有了 s s s, 就能得到 p z ( z ) p_z(z) pz(z)
离散变量 r , s , z r,s,z r,s,z
s k = T ( r k ) = ( L − 1 ) ∑ j = 0 k p r ( r j ) , k = 0 , 1 , … , L − 1 G ( z q ) = ( L − 1 ) ∑ i = 0 q p z ( z i ) = s k z q = G − 1 ( s k ) s_k=T(r_k)=(L-1)\sum^k_{j=0}p_r(r_j),\quad k=0,1,\dots,L-1\\ G(z_q)=(L-1)\sum^q_{i=0}p_z(z_i)=s_k\\ z_q=G^{-1}(s_k) sk=T(rk)=(L−1)j=0∑kpr(rj),k=0,1,…,L−1G(zq)=(L−1)i=0∑qpz(zi)=skzq=G−1(sk)
QA
Q: 离散情况下,通常直方图均衡并不能产生绝对平坦的输出直方图?
A:–
- 离散累计映射并不能保证该映射是单调递增的,只能保证是单调不减的;
- 累计映射的输出值需要转化成整型的灰度级,转化的过程中出现多对一的关系,这是造成输出直方图不平坦的重要原因。
直方图均衡只能使用一次,多次使用没有效果;直方图均衡时直方图匹配的一个特例。
空间滤波(Spatial Filtering)
- 在空间滤波(相对于频域滤波)中,输出图像是通过对输入图像的像素进行简单计算直接计算得出的。
- 空间滤波可以是线性的,也可以是非线性的。
- 对于每个输出像素,计算中都会用到输入像素的某个邻域。(空间滤波通过把每个pixel的值替换为该pixel及其邻域的函数值来修改图像)
线性移不变系统与卷积
线性系统 H H H: 满足加法和数乘=线性
- 可叠加性: H [ f 1 ( x , y ) + f 2 ( x , y ) ] = H [ f 1 ( x , y ) ] + H [ f 2 ( x , y ) ] H[f_1(x,y)+f_2(x,y)]=H[f_1(x,y)]+H[f_2(x,y)] H[f1(x,y)+f2(x,y)]=H[f1(x,y)]+H[f2(x,y)]
- 伸缩性: H [ a f ( x , y ) ] = a H [ f ( x , y ) ] H[af(x,y)]=aH[f(x,y)] H[af(x,y)]=aH[f(x,y)]
移不变系统 H H H: 规律不会随着移动进行改变。比如时不变:不会随着时间改变而改变。
- 移不变性: H [ f ( x , y ) ] = g ( x , y ) , H [ f ( x − a , y − b ) ] = g ( x − a , y − b ) H[f(x,y)]=g(x,y),H[f(x-a,y-b)]=g(x-a,y-b) H[f(x,y)]=g(x,y),H[f(x−a,y−b)]=g(x−a,y−b)
对一个线性移不变系统而言:它的单位脉冲响应=系统的响应特性。
即,只要知道了这个系统的单位脉冲响应,我就能推断处这个系统对任何输入的响应。
卷积时用于计算线性移不变系统输入与输出的数学模型:如果知道该系统的单位脉冲响应 h ( x , y ) h(x,y) h(x,y),则该系统的输入 f ( x , y ) f(x,y) f(x,y)与输出 g ( x , y ) g(x,y) g(x,y)之间可以表示为: g ( x , y ) = f ( x , y ) ∗ h ( x , y ) g(x,y)=f(x,y)* h(x,y) g(x,y)=f(x,y)∗h(x,y).
强无敌例子说明
首先
z [ t ] = x [ t ] ∗ y [ t ] = [ 1 ] ∗ [ 2 0 − 2 ] = [ 2 0 − 2 ] z[t] = x[t] * y[t] = [1] * [2 \ 0 \ -2] = [2 \ 0 \ -2] z[t]=x[t]∗y[t]=[1]∗[2 0 −2]=[2 0 −2]
一般地当输入 (单位脉冲响应$)
x [ t ] = [ 1 ] , x[t] = [1], x[t]=[1],
有
z [ t ] = x [ t ] ∗ y [ t ] = y [ t ] z[t] = x[t] * y[t] = y[t] z[t]=x[t]∗y[t]=y[t]
现在有输入:
x [ t ] = [ 1 2 3 ] = 1 ⋅ [ 1 0 0 ] + 2 ⋅ [ 0 1 0 ] + 3 ⋅ [ 0 0 1 ] x[t] = [1 \ 2 \ 3] = 1 \cdot [1 \ 0 \ 0] + 2 \cdot [0 \ 1 \ 0] + 3 \cdot [0 \ 0 \ 1] x[t]=[1 2 3]=1⋅[1 0 0]+2⋅[0 1 0]+3⋅[0 0 1]
信号 | 响应 |
---|---|
x 0 = 1 ⋅ [ 1 0 0 ] x_0 = 1 \cdot [1 \ 0 \ 0] x0=1⋅[1 0 0] | z 0 = [ 1 ⋅ 2 1 ⋅ 0 1 ⋅ ( − 2 ) 0 0 0 ] z_0 = [1 \cdot 2 \ 1 \cdot 0 \ 1 \cdot (-2) \ 0 \ 0 \ 0] z0=[1⋅2 1⋅0 1⋅(−2) 0 0 0] |
x 1 = 2 ⋅ [ 0 1 0 ] x_1 = 2 \cdot [0 \ 1 \ 0] x1=2⋅[0 1 0] | z 1 = [ 0 2 ⋅ 2 2 ⋅ 0 2 ⋅ ( − 2 ) 0 ] z_1 = [0 \ 2 \cdot 2 \ 2 \cdot 0 \ 2 \cdot (-2) \ 0] z1=[0 2⋅2 2⋅0 2⋅(−2) 0] |
x 2 = 3 ⋅ [ 0 0 1 ] x_2 = 3 \cdot [0 \ 0 \ 1] x2=3⋅[0 0 1] | z 2 = [ 0 0 3 ⋅ 2 3 ⋅ 0 3 ⋅ ( − 2 ) ] z_2 = [0 \ 0 \ 3 \cdot 2 \ 3 \cdot 0 \ 3 \cdot (-2)] z2=[0 0 3⋅2 3⋅0 3⋅(−2)] |
当我们把信号 x 0 , x 1 , x 2 x_0, x_1, x_2 x0,x1,x2 叠加起来刺激系统时,有响应变成对应响应的叠加:
z [ t ] = z 0 + z 1 + z 2 = [ 2 , 4 , 4 , − 4 , − 6 ] z[t] = z_0 + z_1 + z_2 = [2, 4, 4, -4, -6] z[t]=z0+z1+z2=[2,4,4,−4,−6]
线性空间滤波(Linear Spatial Filtering)
对一幅图像 f M × N f_{M\times N} fM×N, 大小为 m × n m\times n m×n的线性滤波器掩码为:
g ( x , y ) = ∑ s = − a a ∑ t = − b b w ( s , t ) f ( x + s , y + t ) a = m − 1 2 , b = n − 1 2 g(x,y)=\sum^a_{s=-a}\sum^b_{t=-b}w(s,t)f(x+s,y+t)\\ a=\frac{m-1}{2},b=\frac{n-1}2 g(x,y)=s=−a∑at=−b∑bw(s,t)f(x+s,y+t)a=2m−1,b=2n−1
上式称为相关。Filter masks(滤波器掩码)有时也叫做卷积掩码/卷积核。
Correlation v.s. Convolution
-
相关运算:在图像上移动核的中心,并且在每个位置计算乘积之和。
( f ⋆ g ) ( τ ) = ∫ − ∞ ∞ f ∗ ( t ) g ( t + τ ) ( f ⋆ g ) [ n ] = ∑ m = − ∞ ∞ f [ m ] g [ m + n ] \begin{align} (f\star g)(\tau)&=\int^\infty_{-\infty}f^*(t)g(t+\tau)\\ (f\star g)[n]&=\sum^{\infty}_{m=-\infty}f[m]g[m+n] \end{align} (f⋆g)(τ)(f⋆g)[n]=∫−∞∞f∗(t)g(t+τ)=m=−∞∑∞f[m]g[m+n] -
卷积运算:将相关运算的核旋转180°。
( f ∗ g ) ( τ ) = ∫ − ∞ ∞ f ( t ) g ( − t + τ ) ( f ∗ g ) [ n ] = ∑ m = − ∞ ∞ f [ m ] g [ − m + n ] \begin{align} (f* g)(\tau)&=\int^\infty_{-\infty}f(t)g(-t+\tau)\\ (f* g)[n]&=\sum^{\infty}_{m=-\infty}f[m]g[-m+n] \end{align} (f∗g)(τ)(f∗g)[n]=∫−∞∞f(t)g(−t+τ)=m=−∞∑∞f[m]g[−m+n]
对于这个例子,
- “same” correlation res: 08242100
- “same” convolution res:01242800
书中给出的二维定义:
convolution: ( w ∗ f ) ( x , y ) = ∑ s = − a a ∑ t = − b b w ( s , t ) f ( x − s , y − t ) correlation: ( w ⋆ f ) ( x , y ) = ∑ s = − a a ∑ t = − b b w ( s , t ) f ( x + s , y + t ) \text{convolution:}(w*f)(x,y)=\sum^a_{s=-a}\sum^b_{t=-b} w(s,t)f(x-s,y-t)\\ \text{correlation:}(w\star f)(x,y)=\sum^a_{s=-a}\sum^b_{t=-b} w(s,t)f(x+s,y+t) convolution:(w∗f)(x,y)=s=−a∑at=−b∑bw(s,t)f(x−s,y−t)correlation:(w⋆f)(x,y)=s=−a∑at=−b∑bw(s,t)f(x+s,y+t)
性质 | 卷积(Convolution) | 相关(Correlation) |
---|---|---|
交换性 | f ∗ g = g ∗ f f*g=g*f f∗g=g∗f | — |
结合性 | f ∗ ( g ∗ h ) = ( f ∗ g ) ∗ h f*(g*h)=(f*g)*h f∗(g∗h)=(f∗g)∗h | — |
分配性 | f ∗ ( g + h ) = f ∗ g + f ∗ h f*(g+h)=f*g+f*h f∗(g+h)=f∗g+f∗h | f ⋆ ( g + h ) = f ⋆ g + f ⋆ h f\star (g+h)=f\star g+f\star h f⋆(g+h)=f⋆g+f⋆h |
平滑核:让相邻的像素越来越像、求均值。
- 盒式核(box kernel):直接求均值。
- 高斯核(Gaussian kernel):中间的均值最大,更加考虑自己,所以平滑作用没有盒式核那么大。
非线性空间滤波(Nonlinear Spatial Filtering)
- 非线性空间过滤通常也使用邻域,但会使用一些其他数学运算。例如,让每个中心点的响应等于其邻域中的最大像素值是一种非线性过滤操作。
- 另一个基本区别是,掩码的概念在非线性处理中并不那么普遍。
给定一个大小为 M × N M\times N M×N的输入图像 f f f和一个大小为 m × n m\times n m×n的邻域,函数 colfilt 生成一个最大大小为 m n × M N mn × MN mn×MN 的矩阵,称为 A: 每列对应于以图像中某个位置为中心的邻域所包含的像素。
锐化(高通)空间滤波器(Sharpening Spatial Filters)
平滑称为低通滤波、锐化称为高通滤波。就是图像的边缘处强度发生较大变化。
- 锐化目的:是突显图像中的精细细节或增强模糊的细节。
- 锐化通常通过空间微分来实现。
数字函数的导数以差分/差值的形式定义。
对于一阶导数,我们要求它必须满足:(如 Sobel 算子,适合边缘检测)
∂ f ∂ x = f ( x + 1 ) − f ( x ) \frac{\partial f}{\partial x}=f(x+1)-f(x) ∂x∂f=f(x+1)−f(x)
-
在平坦段(灰度值恒定的区域)必须为零 。
-
在灰度阶跃或斜坡的开始处必须非零。
-
沿斜坡必须非零 。
对于二阶导数,我们要求它必须满足:(如 Laplacian 算子,可以增强图像细节,但可能放大噪声。)
∂ 2 f ∂ x 2 = f ( x + 1 ) + f ( x − 1 ) − 2 f ( x ) \frac{\partial^2 f}{\partial x^2}=f(x+1)+f(x-1)-2f(x) ∂x2∂2f=f(x+1)+f(x−1)−2f(x)
- 在平坦段(灰度值恒定的区域)必须为零。
- 在灰度阶跃或斜坡的开始和结束处必须非零。
- 沿斜率恒定的斜坡必须为零
(a) 图像中水平扫描线的一段,显示斜坡和阶梯边缘以及恒定段。
(b) 扫描线及其导数的值。
© 导数图,显示零交叉。在 (a) 和 © 中,为了便于视觉显示,各点用虚线连接起来。
从这个图中,我们可以看到:
- 一阶导数:有一个比较突出的值:0 5 0
- 二阶导数:必过0点:0 5 -5 0
拉普拉斯滤波器(Laplacian Filter)
最简单的各向同性导数算子(核)是拉普拉斯,对于两个变量的函数图像 d ( x , y ) d(x,y) d(x,y), 它定义为:
∂ 2 f ∂ x 2 = f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) ∂ 2 f ∂ y 2 = f ( x , y + 1 ) + f ( x , y − 1 ) − 2 f ( x , y ) ∇ 2 f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 = [ f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) ] − 4 f ( x , y ) \begin{align} \frac{\partial^2 f}{\partial x^2}&=f(x+1,y)+f(x-1,y)-2f(x,y)\\ \frac{\partial^2 f}{\partial y^2}&=f(x,y+1)+f(x,y-1)-2f(x,y)\\ \nabla^2 f& = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}\\ &= [f(x+1, y) + f(x-1, y) + f(x, y+1) + f(x, y-1)] - 4f(x, y) \end{align} ∂x2∂2f∂y2∂2f∇2f=f(x+1,y)+f(x−1,y)−2f(x,y)=f(x,y+1)+f(x,y−1)−2f(x,y)=∂x2∂2f+∂y2∂2f=[f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)]−4f(x,y)
这个公式可以使用下面的核进行卷积运算来实现。因此,图像锐化的滤波原理类似于低通滤波,只是使用的系数不同。
边缘有很强的脉冲(正负信号都有):勾画边缘处、增强。
使用拉普拉斯核进行图像增强: g ( x , y ) = f ( x , y ) − ∇ 2 f ( x , y ) g(x,y)=f(x,y)-\nabla^2 f(x,y) g(x,y)=f(x,y)−∇2f(x,y)
(a)模糊后的月球北极图像。
(b)使用上述(a)核得到的拉普拉斯图像。
©使用公式 g ( x , y ) = f ( x , y ) − ∇ 2 f ( x , y ) , c = − 1 g(x,y)=f(x,y)-\nabla^2 f(x,y), c=-1 g(x,y)=f(x,y)−∇2f(x,y),c=−1得到的锐化后的图像。
(d)重复相同过程但使用上述(b)核得到的结果。
拉普拉斯图像往往是黑色的、无特征的。
钝化掩蔽和高提升滤波(Unsharp masking and high-boost filtering)
钝化掩蔽和高提升滤波是图像锐化的重要技术,主要用于增强图像细节,通过放大图像的高频成分(如边缘和纹理)来突出细节部分。
钝化掩蔽三步走:
钝化掩蔽通过从原图像中减去模糊化版本来实现锐化。
f s ( x , y ) = f ( x , y ) − f ˉ ( x , y ) f_s(x, y) = f(x, y) - \bar{f}(x, y) fs(x,y)=f(x,y)−fˉ(x,y)
其中 f s ( x , y ) f_s(x, y) fs(x,y) 表示锐化后图像, f ˉ ( x , y ) \bar{f}(x, y) fˉ(x,y) 是图像 f ( x , y ) f(x, y) f(x,y)的模糊版本。
- 模糊原图像
- 从原图像减去模糊后图像(产生的差称为模板)
- 将模板与原图像相加

高提升滤波
然后,将加权后的模板与原图像相加, 得到 f h b ( x , y ) f_{hb}(x, y) fhb(x,y):
f h b ( x , y ) = A f ( x , y ) − f ˉ ( x , y ) f_{hb}(x, y) = A f(x, y) - \bar{f}(x, y) fhb(x,y)=Af(x,y)−fˉ(x,y)
其中 A ≥ 1 A \geq 1 A≥1, f ˉ ( x , y ) \bar{f}(x, y) fˉ(x,y)是 f ( x , y ) f(x, y) f(x,y)的模糊版本。.
更近一步,还能得到:
f h b ( x , y ) = ( A − 1 ) f ( x , y ) + f ( x , y ) − f ˉ ( x , y ) f h b ( x , y ) = ( A − 1 ) f ( x , y ) + f s ( x , y ) f_{hb}(x, y) = (A - 1)f(x, y) + f(x, y) - \bar{f}(x, y)\\ f_{hb}(x, y) = (A - 1)f(x, y) + f_s(x, y) fhb(x,y)=(A−1)f(x,y)+f(x,y)−fˉ(x,y)fhb(x,y)=(A−1)f(x,y)+fs(x,y)
使用拉普拉斯算子进行锐化:当使用 ∇ 2 f ( x , y ) \nabla^2f(x, y) ∇2f(x,y)来计算锐化图像 f s ( x , y ) f_s(x, y) fs(x,y),高提升滤波的公式变为:
f h b ( x , y ) = ( A − 1 ) f ( x , y ) − ∇ 2 f ( x , y ) or f h b ( x , y ) = ( A − 1 ) f ( x , y ) + ∇ 2 f ( x , y ) f_{hb}(x, y) = (A - 1)f(x, y) - \nabla^2f(x, y)\\ \text{or}\ f_{hb}(x, y) = (A - 1)f(x, y) + \nabla^2f(x, y) fhb(x,y)=(A−1)f(x,y)−∇2f(x,y)or fhb(x,y)=(A−1)f(x,y)+∇2f(x,y)
其中拉普拉斯算子用于检测图像的快速灰度变化区域(边缘和细节),这使得锐化能够更直接地基于边缘信息进行。
**
然后,将加权后的模板与原图像相加, 得到 f h b ( x , y ) f_{hb}(x, y) fhb(x,y):
f h b ( x , y ) = A f ( x , y ) − f ˉ ( x , y ) f_{hb}(x, y) = A f(x, y) - \bar{f}(x, y) fhb(x,y)=Af(x,y)−fˉ(x,y)
其中 A ≥ 1 A \geq 1 A≥1, f ˉ ( x , y ) \bar{f}(x, y) fˉ(x,y)是 f ( x , y ) f(x, y) f(x,y)的模糊版本。.
更近一步,还能得到:
f h b ( x , y ) = ( A − 1 ) f ( x , y ) + f ( x , y ) − f ˉ ( x , y ) f h b ( x , y ) = ( A − 1 ) f ( x , y ) + f s ( x , y ) f_{hb}(x, y) = (A - 1)f(x, y) + f(x, y) - \bar{f}(x, y)\\ f_{hb}(x, y) = (A - 1)f(x, y) + f_s(x, y) fhb(x,y)=(A−1)f(x,y)+f(x,y)−fˉ(x,y)fhb(x,y)=(A−1)f(x,y)+fs(x,y)
使用拉普拉斯算子进行锐化:当使用 ∇ 2 f ( x , y ) \nabla^2f(x, y) ∇2f(x,y)来计算锐化图像 f s ( x , y ) f_s(x, y) fs(x,y),高提升滤波的公式变为:
f h b ( x , y ) = ( A − 1 ) f ( x , y ) − ∇ 2 f ( x , y ) or f h b ( x , y ) = ( A − 1 ) f ( x , y ) + ∇ 2 f ( x , y ) f_{hb}(x, y) = (A - 1)f(x, y) - \nabla^2f(x, y)\\ \text{or}\ f_{hb}(x, y) = (A - 1)f(x, y) + \nabla^2f(x, y) fhb(x,y)=(A−1)f(x,y)−∇2f(x,y)or fhb(x,y)=(A−1)f(x,y)+∇2f(x,y)
其中拉普拉斯算子用于检测图像的快速灰度变化区域(边缘和细节),这使得锐化能够更直接地基于边缘信息进行。
相关文章:

图像处理-Ch2-空间域的图像增强
Ch2 空间域的图像增强 文章目录 Ch2 空间域的图像增强Background灰度变换函数(Gray-level Transformation)对数变换(Logarithmic)幂律变换(Power-Law)分段线性变换函数(Piecewise-Linear)对比度拉伸(Contrast-Stretching)灰度级分层(Gray-level Slicing) 直方图处理(Histogram …...
css 编写注意-1-命名约定
编写按照可维护性、性能和可读性规则: 1.代码组织与结构 层次清晰:使用模块化的结构,将样式分块组织。命名规范:采用统一的命名规则(如 BEM、SMACSS)以增强可读性。 /* BEM …...
虚幻引擎反射机制
在虚幻引擎中,反射系统是一种强大的机制,它允许开发者和引擎本身在运行时获取并操作类、对象、属性和方法的元信息。这个系统是基于UObject(Unreal Engine中所有支持反射的对象的基类)构建的,为游戏开发提供了极大的灵…...
Knife4j Swagger
1. 依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2. 配置 第二步配置完成就可以访问:http://localhost…...

Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总
问题1:打包的过程中不断提示 :codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决:打开钥匙串,点击证书---显示简介---信任----改为始终信任 (记住 :不能只修改钥匙的显示简介的…...
卷积神经网络入门指南:从原理到实践
目录 1 CNN的发展历史 2 CNN的基本原理 3 CNN核心组件 3.1 卷积操作基础 3.2 卷积层详解 3.3 高级卷积操作 3.3.1 分组卷积(Group Convolution) 3.3.2 深度可分离卷积(Depthwise Separable Convolution): 3.3 池…...

eNSP安装教程(内含安装包)
通过网盘分享的文件:eNSP模拟器.zip 链接: https://pan.baidu.com/s/1wPmAr4MV8YBq3U5i3hbhzQ 提取码: tefj --来自百度网盘超级会员v1的分享 !!!!解压后有四个文件,先安装Box,第二个安装cap&a…...

VBA技术资料MF244:利用VBA在图表工作表中创建堆积条形图
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...

【计算机网络安全】网络攻击
实验二 网络攻击 实验人员:第五组全体成员 一、实验目的: 1:掌握ARP欺骗的原理,实践ARP欺骗的过程。 2:掌握TCP劫持的原理,实践TCP劫持的过程。 3:掌握DNS欺骗的原理,实践DN…...
20241230 基础数学-线性代数-(1)求解特征值(numpy, scipy)
所有代码实现,基于教程中的理论通过python实现出来的。效率不高,但有代码可以看。 由于scipy/sckitlearn/sparkx 底层的实现都被封装了(小白兔水平有限,fortran代码实在没看懂)这里的实现至少可以和理论公式对应的上。…...

基于图注意力网络的两阶段图匹配点云配准方法
Two-stage graph matching point cloud registration method based on graph attention network— 基于图注意力网络的两阶段图匹配点云配准方法 从两阶段点云配准方法中找一些图匹配的一些灵感。文章提出了两阶段图匹配点云配准网络(TSGM-Net) TSGM-Ne…...

【半导体光电子器件】课后习题答案和知识点汇总
关注作者了解更多 我的其他CSDN专栏 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处…...

Unity命令行传递自定义参数 命令行打包
命令行参数增加位置 -executeMethod 某脚本.某方法 参数1 参数2 参数3 ... 例如执行EditorTest.GetCommandLineArgs方法 增加两个命令行参数 Version=125 CDNVersion=100 -executeMethod EditorTest.GetCommandLineArgs Version=125 CDNVersion=100 Unity测试脚本 需要放在…...

web-worker应用在大文件切片上传
当文件体积过大时,传统的文件上传方式往往会导致页面卡顿,用户体验不佳。为了解决这一问题,我们可以利用Web Worker技术来进行大文件的切片上传。本文将详细介绍如何使用Web Worker进行大文件切片上传,并通过具体的例子来演示其实…...
Django 模板分割及多语言支持案例【需求文档】-->【实现方案】
Django 模板分割及多语言支持案例 这个案例旨在提供一个清晰的示范,展示如何将复杂的页面分解为多个可复用的模板组件,使代码更加模块化和易于管理。希望这篇案例文章对你有所帮助。 概述 在 Django 项目开发中,使用模板分割和多语言支持能…...
C中设计不允许继承的类的实现方法是什么?
在C中,设计不允许继承的类可以通过多种方法实现。以下是详细的方法说明及示例: ### 方法一:将构造函数和析构函数设为私有 这种方法的核心思想是通过将构造函数和析构函数设为私有,使得子类无法调用这些函数,从而无法…...
面对小白的C语言学习方法
这是第20篇文章,不来弄一些技术的,弄一些最近的学习心得,怎么更有效地自学C语言 书籍 书籍可以很有效的告知我们专有函数,使用方法还有一些思考方式,缺点是实操差点意思,还是不太能解决实际问题ÿ…...

使用libgif库解码全过程(C语言)-包括扩展块的处理
我看到的所有例程,都把扩展部分的处理跳过了,而我的动画是有透明度的,这就导致解码后的图像在有透明色的像素部分,呈现了很多的黑点,或者闪白的情况出现。经过调试,终于成功。 文件格式 先了解一下GIF的文…...
blazor实现ASP.NET网站用户批量注册方法
ASP.NET网站用户批量注册是许多使用blazor系统开发遇到的问题,为了解决这个问题,我们提出比较完善的解决方法,通过代码实现了一个批量用户注册功能,用于解析一份用户名列表,并通过后台服务注册用户,同时对成功和失败的注册进行记录和反馈。以下是实现功能的详细工作原理描…...

SpringCloud 入门(4)—— 网关
上一篇:SpringCloud 入门(3)—— Nacos配置中心-CSDN博客 Spring Cloud Gateway 作为 Spring Cloud 生态系统的一部分,主要在微服务架构中充当 API 网关的角色。它提供了统一的入口点来处理所有的 HTTP 请求,并将这些请…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...