热力学与图像处理

序言
在图像处理方面,我们从自然中汲取了大量灵感,例如射线、重力、水流等等物理学模型。其中最为常用的,似乎还是热力学模型,其抽象而简洁地描述了热传播、热均衡的过程。本文将对热力学模型展开细致讨论,不止揭露数学之美,更有自然之美。

目录

1. 热力学模型

热传递的规律

T(x,t)t=α2T(x,t)2x

热力学模型使用了上述公式对热传递过程进行描述。其中, α 表示热扩散速率,第一个简单系数,由介质材料决定; T(x,t) 函数表示空间 x t 时刻的整个温度分布, x 可以为任意维度的空间。这个简单的公式,建立了温度分布在时间和空间上的直接关系;即空间中某一点的温度随时间的变化趋势由该点在空间中温度分布曲率直接决定。

这里举一个简单的热传递实例。假设 x 为一维空间,且 T(x,t=0)=sin(x) ;即整个系统在初始情况下,温度在空间中正好是正弦分布。那么,整个系统的温度在下一个时刻如何变化呢? T(x,t=0)t=α2T(x,t=0)2x=α2sin(x)2x=α sin(x) ,变化方向正好与现在分布相反。也就是说,当前温度为正的区域温度将会下降,温度为负的区域温度将会上升,而且温度越高或者越低则变化幅度越大;这与我们的生活常识一致。热传递在一些复杂空间和复杂分布的系统中可以变得极其复杂,但是本质上却是非常简单的。

热力迭代

了解热力流动的规律有什么意义呢?掌握了规律,我们就可以对整个热力系统沿时间轴进行推演。所有的热力学模型应用都基于此。

Tnext=Tprevious+ΔT=Tprevious+ΔtTt

热力系统的迭代过程如上式所述。每一个时刻,我们求出热力系统中接下来的温度变化量,从而不停地把整个系统推向下一时刻。这里的温度变化量由时间差 Δt 和温度变化率 Tt 共同决定;前者是一个重要的模拟参数,决定系统迭代的步幅;后者则由之前的热传递公式求出。

标准热力系统

一个标准的系统由3部分构成:

  • Initial Condition
    T(x,t=0)=F(x)

  • Boundary Condition
    T(xboundary)=Φ(x,t)

  • Heat Equation
    T(x,t)t=2T(x,t)2x

也就是说,除了热力学方程外(上述公式传导系数 α 被设为1而消去),我们还需要设置系统的初始状态,以及系统的边界条件。系统的边界条件有很多不同的选择,常用的是Dirichlet条件,就是让系统边界固定在一个温度,如零度上。
总的来说,热力学模型,就是在确定初始热力空间分布以及空间边界条件的情况下,通过热力传递公式,选定合适时间步幅,沿时间轴递推演进热力空间分布的过程。

2. 常见滤镜

热力学在图片上最为常见的俩个应用为:
- isotropic diffusion (各向同性扩散)
- anisotropic diffusion (各向异性扩散)

这都是把图片的intensity(灰度值)视作初始温度,把图片边框的1像素固定为边界,边界温度维持不变;然后在图片上迭代推演热力传递公式,扩散热力,更新各个像素温度。(作为边框的1像素最后将被丢弃)

各向同性扩散与高斯模糊

各向同性扩散完全等价于高斯模糊以及低通滤波。

高斯模糊

高斯模糊是一种常用的去噪或者模糊图片方法,其具体方法是对原始图片和一个高斯模板进行卷积。核心在于高斯模板,这是一个至少3*3的奇数边长的矩阵,从中心点到四周数值呈现各向同性(即convariance matrix为值一致的对角矩阵)高斯分布;另外,模板所有值和为 1(normalize)。本文不作更多讨论。

ITemplate=F1{F(I)F(Template)} ,原图与模板的卷积等效于原图和模板在傅里叶空间中之间相乘并进行傅里叶逆变换;高斯模板在傅里叶空间中仍是一个高斯分布(标准差变倒数),傅里叶空间中的高斯模板将会强化低频信号并滤过高频信号,高斯模糊完全等价于低通滤波。

等价的各向同性扩散

这里我们从数学上来证明这个等价。
首先注意到空间曲率在离散空间上的求解:

T(x) 2T(x) =T(x+1)T(x)1=T(x1)T(x)1=T(x+1)+T(x1)2T(x)
这实际上也是拉普拉斯算子(Laplacian operator),具体展开在二维空间的话:
2T(x,y)=T(x+1,y)+T(x1,y)+T(x,y+1)+T(x,y1)4T(x,y)
所以,各向同性扩散的热力迭代可以展开如下:
T(x,y,t=1)=T(x,y,t=0)+ΔT=T(x,y,t=0)+Δt2T(x,y)=ΔtT(x+1,y)+ΔtT(x1,y)+ΔtT(x,y+1)+ΔtT(x,y1)+(14Δt)T(x,y)
显然,这个迭代式表示的就是原图片与一个3*3的高斯模板进行卷积,其中 Δt 应该小于0.25以确保迭代稳定。

各向异性扩散与美颜滤镜

Anisotropic diffusion(各向异性扩散)是常用的图片加强算法。它在各向同性扩散的基础上前进了一步,在模糊图片的同时保持住图片中的边缘锐度,达到有选择的模糊。这一方法常见于美颜相机中,它可以保持住脸部的线条同时通过模糊消除斑点,让皮肤看起来整洁、细腻、柔和。另外,也是非常好的图片去噪方法。

算法原理

算法的关键是在扩散中保护边缘信息(即图片中物体的轮廓)。轮廓往往和其周围环境是有强烈对比度的,这种时候,其温度的空间梯度 T(x,t)x 将是一个较大的值。所以我们利用这一点来构造各向异性扩散,抑制高温差之间的热传递,以保护高温差代表的轮廓信息。

这里我们使用一个函数求取扩散抑制系数:

k(x) g(x) =g(T(x))=ex2q2
x 为空间二维向量;g(x)是一个值域 (0,1] 的单调递减函数,所以温差越高,扩散系数 k 越小。这里还有一个抑制敏感度参数 q q 越小,函数就对温差越敏感,即使很小的温差也触发明显的抑制;q 越大,则越迟钝。我们的温度范围是 [0,255] ,所以 q 参数一般是[10,100]。

基于上一节推导的拉普拉斯算子,进行变化:

2T(x,y) 2T(x,y) Gn Gs Gw Ge =T(x+1,y)+T(x1,y)+T(x,y+1)+T(x,y1)4T(x,y)=Gn+Gs+Gw+Ge=T(x)=T(x1,y)T(x,y)=T(x)=T(x+1,y)T(x,y)=T(y)=T(x,y1)T(x,y)=T(y)=T(x,y+1)T(x,y)

最终,各向异性扩散的热力迭代可以展开如下:

T(x,y,t=1)=T(x,y,t=0)+ΔT=T(x,y,t=0)+Δt2T(x,y)=T(x,y,t=0)+Δt{k(Gn)Gn+k(Gs)Gs+k(Gw)Gw+k(Ge)Ge}

Python代码实现

def anisotropic(image, time_gap=0.15, iterations=20, q=10):
    img = image.copy().astype(np.int)
    deno = q ** 2
    s = img.shape
    tmp = np.zeros(s, img.dtype)
    for i in range(iterations):
        for x in range(1, s[0] - 1):
            for y in range(1, s[1] - 1):
                NI = img[x - 1, y] - img[x, y]
                SI = img[x + 1, y] - img[x, y]
                WI = img[x, y - 1] - img[x, y]
                EI = img[x, y + 1] - img[x, y]
                cN = math.exp(-NI ** 2 / deno)
                cS = math.exp(-SI ** 2 / deno)
                cW = math.exp(-WI ** 2 / deno)
                cE = math.exp(-EI ** 2 / deno)
                tmp[x, y] = img[x, y] + time_gap * (cN * NI + cS * SI + cE * EI + cW * WI)
        img = tmp
    return img

3 图像分割

热力学还有着更为复杂和有趣的应用,特别是在图像分割上,这一点后续再做整理

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python 有许多图形处理库和图像处理库,这些库之间有很多差异和相似之处。下面是一些常见的 Python 图形处理库和图像处理库的异同点: 1. OpenCV:OpenCV 是一个开源的计算机视觉库,支持图像处理、计算机视觉和机器学习等领域。它主要用于处理实时视频流和图像处理。OpenCV 提供了许多函数和类,可以用于图像处理、特征提取、目标跟踪、人脸检测和识别等。 2. Pillow:Pillow 是 Python 中一个流行的图像处理库,是 PIL(Python Imaging Library)的一个分支。它提供了基本的图像操作,如打开、保存、裁剪、缩放、旋转和转换格式等。 3. Matplotlib:Matplotlib 是一个用于绘制二维图形的 Python 库。它提供了许多绘图选项,如线图、散点图、条形图、饼图和等高线图等。 4. Seaborn:Seaborn 是一个基于 Matplotlib 的 Python 数据可视化库,它提供了更高级的统计图形,如分布图、热力图、时间序列图和多变量图等。 5. Pygame:Pygame 是一个用于制作游戏和多媒体应用程序的 Python 库。它提供了音频、图像和视频处理等功能,可以用于制作基于 Python 的游戏和交互式应用程序。 这些 Python 图形处理库和图像处理库之间的异同点主要包括以下方面: 1. 功能:每个库都有其独特的功能和应用场景。例如,OpenCV 主要用于计算机视觉和实时视频流处理,而 Pillow 更适合于简单的图像处理和格式转换。 2. 学习曲线:每个库的学习曲线不同。有些库可能更容易上手,而有些则需要更多的学习和实践。 3. 依赖关系:一些库可能依赖于其他库或模块。例如,Matplotlib 和 Seaborn 都依赖于 NumPy 和 Pandas。 4. 性能:不同的库可能在性能方面有所不同。一些库可能更适合于处理大型数据集,而另一些则更适合于处理实时视频流。 总之,选择哪个库主要取决于你的需求和应用场景。在选择之前,需要考虑功能、学习曲线、依赖关系和性能等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值