图像处理-Ch2-空间域的图像增强

Ch2 空间域的图像增强

文章目录

  • Ch2 空间域的图像增强
    • Background
    • 空间滤波(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 r0.

对数变换的作用

  • 动态范围压缩:当输入图像的灰度值范围非常宽(例如 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)。

image-20241220104929919

分段线性变换函数(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:基于下图中的变换,使期望的灰度范围变亮(/变暗),但保持图像中其他的灰度级不变。

    image-20241220105449485

比特平面分层(Bit-plane slicing): 像素值是由比特组成的整数。8比特图像可以视为8个1比特平面组成,其中plane 1中包含图像中所有图像的最低有效比特、plane 8包含所有像素的最高有效比特。

image-20241220111120761

直方图处理(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,,L1

其中, 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=0L1nk, k=0,1,,L1
殊途同归。 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,L1], r = 0 r=0 r=0黑色, r = L − 1 r=L-1 r=L1白色。对于这些满足条件的 r r r,我们关注如下的灰度映射:
s = T ( r ) , 0 ≤ r ≤ L − 1 s=T(r),\quad 0\le r\le L-1 s=T(r),0rL1
对于输入图像中的给定灰度值 r r r, 它将产生一个输出灰度值 s s s。假设:

  • T ( r ) T(r) T(r)在区间 [ 0 , L − 1 ] [0,L-1] [0,L1]上是一个单调递增函数.
  • 0 ≤ r ≤ L − 1 0\le r\le L-1 0rL1, 有 0 ≤ T ( r ) ≤ L − 1 0\le T(r)\le L-1 0T(r)L1.

假使我们想从 s s s逆推回 r r r, 那么就是 T T T的逆变换。如果想这个倒推成立,那么就需要是严格递增函数,不然自变量与因变量就不是一一对应的关系

image-20241220165317323

直方图均衡化基于概率密度函数(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)(L1)pr(r)1=L11,0sL1

其中 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,0s1
假如说 0 ≤ s ≤ L − 1 0\le s\le L-1 0sL1,则有:
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)(L1)pr(r)1=L11,0sL1

离散变量 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,,L1
灰度映射函数是:
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)=j0kpr(rj)=j0kMNnks=T(rk)=j0kpr(rj)=j=0kNnj
使用这个函数可以将输入图像中灰度级为 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,是我们希望输出图像具有的。

计算直方图匹配三步走

  1. 计算输入图像的直方图 p r ( r ) p_r(r) pr(r), 得到 s k s_k sk
  2. 计算 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)=(L1)i=0qpz(zi) p z ( z ) p_z(z) pz(z)是规定直方图的所有值。
  3. 计算 G ( z q ) = s k G(z_q)=s_k G(zq)=sk, 求 G − 1 G^{-1} G1, 找到对应的 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)=(L1)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)=(L1)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=G1(s)=G1[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)=(L1)j=0kpr(rj),k=0,1,,L1G(zq)=(L1)i=0qpz(zi)=skzq=G1(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(xa,yb)]=g(xa,yb)

对一个线性移不变系统而言:它的单位脉冲响应=系统的响应特性。

即,只要知道了这个系统的单位脉冲响应,我就能推断处这个系统对任何输入的响应。

卷积时用于计算线性移不变系统输入与输出的数学模型:如果知道该系统的单位脉冲响应 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=[12 10 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 22 20 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 32 30 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=aat=bbw(s,t)f(x+s,y+t)a=2m1,b=2n1
上式称为相关。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} (fg)(τ)(fg)[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} (fg)(τ)(fg)[n]=f(t)g(t+τ)=m=f[m]g[m+n]

image-20241220224250812

对于这个例子,

  • “same” correlation res: 08242100
  • “same” convolution res:01242800

image-20241220233119440

书中给出的二维定义:
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:(wf)(x,y)=s=aat=bbw(s,t)f(xs,yt)correlation:(wf)(x,y)=s=aat=bbw(s,t)f(x+s,y+t)

性质卷积(Convolution)相关(Correlation)
交换性 f ∗ g = g ∗ f f*g=g*f fg=gf
结合性 f ∗ ( g ∗ h ) = ( f ∗ g ) ∗ h f*(g*h)=(f*g)*h f(gh)=(fg)h
分配性 f ∗ ( g + h ) = f ∗ g + f ∗ h f*(g+h)=f*g+f*h f(g+h)=fg+fh f ⋆ ( g + h ) = f ⋆ g + f ⋆ h f\star (g+h)=f\star g+f\star h f(g+h)=fg+fh

平滑核:让相邻的像素越来越像、求均值。

  • 盒式核(box kernel):直接求均值。
  • 高斯核(Gaussian kernel):中间的均值最大,更加考虑自己,所以平滑作用没有盒式核那么大。

image-20241220233253937

非线性空间滤波(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) xf=f(x+1)f(x)

  1. 在平坦段(灰度值恒定的区域)必须为零 。

  2. 在灰度阶跃或斜坡的开始处必须非零。

  3. 沿斜坡必须非零 。

    sobel算子

对于二阶导数,我们要求它必须满足:(如 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) x22f=f(x+1)+f(x1)2f(x)

  1. 在平坦段(灰度值恒定的区域)必须为零。
  2. 在灰度阶跃或斜坡的开始和结束处必须非零。
  3. 沿斜率恒定的斜坡必须为零

image-20241220234426807

(a) 图像中水平扫描线的一段,显示斜坡和阶梯边缘以及恒定段。
(b) 扫描线及其导数的值。
© 导数图,显示零交叉。在 (a) 和 © 中,为了便于视觉显示,各点用虚线连接起来。

从这个图中,我们可以看到:

  1. 一阶导数:有一个比较突出的值:0 5 0
  2. 二阶导数:必过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} x22fy22f2f=f(x+1,y)+f(x1,y)2f(x,y)=f(x,y+1)+f(x,y1)2f(x,y)=x22f+y22f=[f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)]4f(x,y)
这个公式可以使用下面的核进行卷积运算来实现。因此,图像锐化的滤波原理类似于低通滤波,只是使用的系数不同。

image-20241220235220715

边缘有很强的脉冲(正负信号都有):勾画边缘处、增强。

使用拉普拉斯核进行图像增强 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)

image-20241220235333869

(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)的模糊版本。

  1. 模糊原图像
  2. 从原图像减去模糊后图像(产生的差称为模板)
  3. 将模板与原图像相加
image-20241221093414873

高提升滤波

然后,将加权后的模板与原图像相加, 得到 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 A1, 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)=(A1)f(x,y)+f(x,y)fˉ(x,y)fhb(x,y)=(A1)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)=(A1)f(x,y)2f(x,y)or fhb(x,y)=(A1)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 A1, 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)=(A1)f(x,y)+f(x,y)fˉ(x,y)fhb(x,y)=(A1)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)=(A1)f(x,y)2f(x,y)or fhb(x,y)=(A1)f(x,y)+2f(x,y)
其中拉普拉斯算子用于检测图像的快速灰度变化区域(边缘和细节),这使得锐化能够更直接地基于边缘信息进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux | Ubuntu零基础安装学习cURL文件传输工具

目录 介绍 检查安装包 下载安装 手册 介绍 ‌cURL是一个利用URL语法在命令行下工作的文件传输工具,首次发行于1997年‌‌12。cURL支持多种协议,包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…

cesium通过经纬度获取3dtiles 得feature信息

找到这里3dtiles的两种访问方式: 1.1 3DTileContent#getFeature 这里涉及3DTile 数据结构,暂不了解3DTile 数据结构,因此暂不使用。 1.2 scene.pick 本次使用 scene表示虚拟场景中所有 3D 图形对象和状态的容器;scene中…

内置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的带有ALC(自动电平控制)的前置音频放大器芯片,最初产品为单声道/立体声收录机及盒式录音机而开发,作为录音/回放的磁头放大器使用;由于产品的高增益、低噪声及ALC外部可调的特性&…

基于SSM的“快递管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“快递管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登陆页面 注册页面 快递员页面 派单员订单管理页面 派单员订单添…

frp(s) 内网穿透 Liunx环境双端Docker部署

FRP(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于内网穿透、负载均衡和反向代理等多种场景。它能够将内网中的服务暴露给公网,实现远程访问。此外,FRP还可以用于接收类似GitHub或第三方提供的Webhook请求。在微服务架构中,FRP可以作为服务调用的反向代理,提…

STM32F103RCT6学习之五:ADC

1.ADC基础 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V&#xff…

实现类似gpt 打字效果

1. css的动画(animation) css中实现动画有两种方式:transition过渡动画、 animation自定义动画。 具体的可以看MDN链接:https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…

微软远程桌面APP怎么用

微软远程桌面(Remote Desktop)客户端(RD Client)是一款由微软开发的应用程序,允许用户通过网络连接远程访问和控制另一台计算机。同时,微软远程桌面RD Client支持多种设备和操作系统,包括Window…

Unity3d UGUI如何优雅的实现Web框架(Vue/Rect)类似数据绑定功能(含源码)

前言 Unity3d的UGUI系统与Web前端开发中常见的数据绑定和属性绑定机制有所不同。UGUI是一个相对简单和基础的UI系统,并不内置像Web前端(例如 Vue.js或React中)那样的双向数据绑定或自动更新UI的机制。UGUI是一种比较传统的 UI 系统&#xff…

10分钟掌握项目管理核心工具:WBS、甘特图、关键路径法全解析

一、引言 在项目管理的广阔天地里,犹如一场精心编排的交响乐演奏,每个乐器、每个音符都需精准配合才能奏响美妙乐章。而 WBS(工作分解结构)、甘特图、关键路径法无疑是这场交响乐中的关键乐章,它们从不同维度为项目管…

代码思想之快慢路径

处理业务代码的过程中,对业务代码有了一些调整,后续发现这是一种代码思想 在一段复杂的逻辑里,我把查询redis操作写在了前面, 业务逻辑: 如果需要不打压就退出本次处理 查询redis拿到商品需要打压的次数 如果次数 …

纯 HTML+CSS+JS 实现一个炫酷的圣诞树动画特效

纯 HTMLCSSJS 实现一个炫酷的圣诞树动画特效 前言 圣诞节快到了,今天给大家带来一个简单但是效果不错的圣诞树动画特效。这个特效完全使用原生 HTML、CSS 和 JavaScript 实现,包含闪烁的星星、随机彩灯等元素,非常适合节日气氛!…

【RAG实战】语言模型基础

语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术,通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地,语言模型可根据上下文中已出现的词序列,使用概率推断来预测接…

富芮坤FR800X系列之PWM输出程序应用设计

文章目录 前言1.设计背景2.简介3.如何设计控制调光的接口呢4.硬件设计5.软件设计5.1.软件流程图5.2.软件代码 6.小结 前言 版权归作者所有、未经允许、请勿转载。 读者对象: 本文档主要适用以下工程师: 嵌入式系统工程师 单片机软件工程师 IOT固…

Ftrans数据摆渡系统 搭建安全便捷跨网文件传输通道

一、专业数据摆渡系统对企业的意义 专业的数据摆渡系统对企业具有重要意义,主要体现在以下几个方面‌: 1、‌数据安全性‌:数据摆渡系统通过加密传输、访问控制和审计日志等功能,确保数据在传输和存储过程中的安全性。 2、‌高…

EasyPoi 使用$fe:模板语法生成Word动态行

1 Maven 依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version> </dependency> 2 application.yml spring:main:allow-bean-definition-over…

python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况

目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了&#xff0c;如果这个不知道&#xff0c;就可以…

使用 Webpack 优雅的构建微前端应用❕

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

Boost之log日志使用

不讲理论&#xff0c;直接上在程序中可用代码&#xff1a; 一、引入Boost模块 开发环境&#xff1a;Visual Studio 2017 Boost库版本&#xff1a;1.68.0 安装方式&#xff1a;Nuget 安装命令&#xff1a; #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

【Python】使用匿名函数Lambda解析html源码的任意元素(Seleinium ,BeautifulSoup皆适用)

一直都发现lambda函数非常好用&#xff0c;它可以用简洁的方式编写小函数&#xff0c;无需写冗长的过程就可以获取结果。干脆利落&#xff01; 它允许我们定义一个匿名函数&#xff0c;在调用一次性的函数时非常有用。 最近整理了一些&#xff0c;lambda函数结合BeautifulSou…