全变分

https://blog.csdn.net/hanlin_tan/article/details/52448803

 

 

全变分(Total variation),也称为全变差,是图象复原中常用的一个名词。本文简要介绍全变分的概念以及在图象去噪中的应用。

一维信号的全变分和去噪

一维连续函数的全变分

一维连续实函数f(x)f(x)在区间[a,b]⊂R[a,b]⊂R上的全变分定义为参数曲线x→f(x),x∈[a,b]x→f(x),x∈[a,b]的弧长。其表达式为

Vba(f)=∫ba|f′(x)|dx
Vab(f)=∫ab|f′(x)|dx
说白了,所谓的“变分”就是|f(x+Δx)−f(x)||f(x+Δx)−f(x)|,对于连续函数Δx→0Δx→0。而全变分是对函数定义的区间而言的,就是将“变分”在区间上累加起来。

一维离散信号的全变分

从上面连续实函数的全变分,我们可以很容易想到它的离散形式。给出信号序列{yi},i=1,..,n{yi},i=1,..,n,它的全变分定义为

V(y)=∑i=1n|yi+1−yi|
V(y)=∑i=1n|yi+1−yi|
用一句话来概括,全变分是前后项之差的绝对值之和。

一维信号去噪

当我们得到观察信号xixi,希望xixi变得平滑,也就是对xixi去噪。一种很直观的想法就是让信号的全变分变小。全变分对应的物理意义就是输入信号的平滑度。设得到的恢复信号为yiyi,它应该满足两个条件:

yiyi与观察信号xixi的差距不大。这个差距的常用数学表达式就是
E(x,y)=12∑i(xi−yi)2
E(x,y)=12∑i(xi−yi)2
yiyi的全变分不大。
将物理约束转化为数学模型,求解yy等价于求解下面这个优化问题:

minyE(x,y)+λV(y)
minyE(x,y)+λV(y)
其中参数λλ是正常数,用于调节两个约束的作用大小。注意到E(x,y)E(x,y)和V(y)V(y)都是凸函数,这是一个无约束凸优化问题,有很多经典方法可以求解。

二维离散信号(图象)的全变分和去噪

图象是典型的二维离散信号,Rudin在1992年将其全变分定义为

V(y)=∑i,j|yi+1,j−yi,j|2+|yi,j+1−yi,j|2−−−−−−−−−−−−−−−−−−−−−−−√
V(y)=∑i,j|yi+1,j−yi,j|2+|yi,j+1−yi,j|2
这个函数是各项同性的,但是不可微,也并不是凸函数。非凸函数的优化求解难度、速度和稳定性都无法与凸函数相比。因此二维全变分有另一种常用定义 
V(y)=∑i,j|yi+1,j−yi,j|2−−−−−−−−−−−√+|yi,j+1−yi,j|2−−−−−−−−−−−√=∑i,j|yi+1,j−yi,j|+|yi,j+1−yi,j|
V(y)=∑i,j|yi+1,j−yi,j|2+|yi,j+1−yi,j|2=∑i,j|yi+1,j−yi,j|+|yi,j+1−yi,j|
这个函数是凸函数了。

仿照一维信号的去噪,基于全变分的图象去噪可以看成求解优化问题

minyE(x,y)+λV(y)
minyE(x,y)+λV(y)
其中E(x,y)E(x,y)作为数据误差项定义为

E(x,y)=12∑i,j(xi,j−yi,j)2
E(x,y)=12∑i,j(xi,j−yi,j)2
当VV有凸函数形式时,问题变为无约束凸优化问题,从而容易求解。
--------------------- 
作者:TomHeaven 
来源:CSDN 
原文:https://blog.csdn.net/hanlin_tan/article/details/52448803 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
全变分(Total Variation,简称TV)在图像处理中是一种常用的图像去噪方法。其基本思想是通过最小化图像的不连续性(具体指图像中亮度的变化)来消除噪声。 在Matlab中,有两种方法可以实现全变分去噪。一种是使用内置函数,另一种是手动编写代码实现。 使用内置函数可以大大简化全变分去噪的过程。在Matlab中,可以使用`imdenoise`函数实现全变分去噪。该函数接受图像的灰度矩阵作为输入,并返回去噪后的图像。可以通过调整参数来控制去噪的程度。例如,可以使用以下代码对图像进行全变分去噪: ```matlab img = imread('image.jpg'); % 读取灰度图像 denoised_img = imdenoise(img); % 全变分去噪 imshow(img); % 显示原始图像 imshow(denoised_img); % 显示去噪后的图像 ``` 另一种方法是手动编写代码实现全变分去噪。这需要用到一些数值优化算法,例如梯度下降(Gradient Descent)或共轭梯度(Conjugate Gradient)。具体实现的步骤如下: 1. 将图像转化为灰度矩阵,对其进行初始化。 2. 计算图像的总变差,并将其定义为目标函数。 3. 使用梯度下降或共轭梯度等优化算法,根据目标函数进行优化,减小图像的总变差。 4. 迭代多次,直到达到收敛条件。 以下是一个简化的伪代码示例: ```matlab img = imread('image.jpg'); % 读取灰度图像 init_img = double(img); % 将图像转化为灰度矩阵 denoised_img = tv_denoise(init_img); % 手动实现的全变分去噪函数 imshow(img); % 显示原始图像 imshow(denoised_img); % 显示去噪后的图像 function denoised_img = tv_denoise(init_img) % 初始化步骤省略 % 计算总变差,并定义为目标函数 tv = sum(sum(sqrt((Dx*img).^2 + (Dy*img).^2))); % 使用优化算法进行优化 while not_converged % 进行一次优化步骤的代码省略 end denoised_img = img; % 返回去噪后的图像 end ``` 总体来说,Matlab提供了多种实现全变分去噪的方法,可以根据个人需求选择适合的方法。使用内置函数可以快速简单地实现全变分去噪,而手动编写代码则可以更灵活地控制去噪的过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值