分形编码流程理解

23.08.01

对分形编码流程及大概方案进行简单介绍

关于分形编码

        在自然图像中,往往存在不同区域子块之间的跨尺度相似性,因此,我们可以使用一个使图像近似不变的压缩仿射变换参数进行表达。

        而解码可以通过快速迭代完成,每次迭代都会产生更精细尺度下的细节,因此,从理论上来说可以具有任意分辨率下的细节。

        Jacquin 提出了一种基于分块迭代函数系统的分形块编码算法,在 Jacquin 的论文中,将图像分为大小两类子块,对于每个小方块在图像中搜索与之最仿射相似的大方块,每个小块就可以根据大方块通过仿射变换来近似。

        对于R块,分形编码中通过对D块进行灰度级调整、灰度平移与八种变换来构成码本。即对D块进行压缩至R块尺寸后,依次通过等距变换、亮度调整、亮度偏移,进而得到R块的近似块。

分形编码算法

1. 图像子块划分:

        首先将图像分割为R块图集与D块图集。

        对于R块图集,通常以4为子块长度,4为步长,对图像进行不重叠划分,如256×256的灰度图像,即可划分为4096个4×4 R块。

        对于D块图集,一般为R块的2倍,即8×8大小,步长为4,对图像以8×8的窗口,以4 为步长进行不断滑动取块,对于256×256的灰度图像,最终形成2844个8×8 D块。

2. 码本构成

        划分子块后,对D块进行降采样至R块尺寸,一般采用四邻与平方,即通过对于相邻4个像素进行均值计算,最终8×8的D块变为4×4D块,由降采样后的D块构成的子块图集称之为码本。

3. 等距变换

为增加码本质量,将D块进行八种等距变换,分别为:

  1. 恒等变换

  2. 垂直对称

  3. 水平对称

  4. 主对角对称

  5. 次对角对称

  6. 逆时针旋转90度

  7. 逆时针旋转180度

  8. 逆时针旋转270度

4. 误差度量

        分形编码中,为了确定两子块之间相似性,选择使用峰值信噪比,即 PSNR 对两块进行度量,对于PSNR的理解并不复杂,相关代码参考另一篇文章。峰值信噪比常用于量化编码前以及解码后的两幅图像相似度。

PSNR计算通过两步完成:

1. 首先计算均方误差,即mse。以灰度图像举例,均方误差即为两图像对应像素灰度之差平方,在根据图像的像素数量进行均值计算,公式如下:

                                        MSE = \left \| I(m, n, c) - GT(m, n, c) \right \|^{2}

2. 后通过mse计算得出两图像之间psnr值。以灰度图像举例,PSNR为像素中最大值的平方除以均方误差后求其以10为底的对数,最后乘以20,化简后公式如下:

                                                PSNR = 20 * \log_{10}(\frac{MAX_{pixel}}{\sqrt mse})

        其中,m,n 为图像尺寸,灰度图像时,可去掉c的部分。MAXpixel为图像中像素的最大值,如每个像素为8位二进制时,则为255。

5. 编码过程

        编码过程简单来说就是在所有对比块(D块即八种等距变换)中找到一最优对比快,使最优亮度变换之间的差异最小,并将相关参数进行存储,包括对比度与亮度的调整因子,对比快包括降采样后所有D块以及相关8种等距变换。

        通过对比度调节因子s,与亮度调节因子o,对D块进行运算,在与R块做差,可得到最优亮度变换与R块之间的差异,所有对比块中该差异最小块即为目标块。

        函数f(s, o)是变量s,o的二元多项式,为对该式求最小值,对s,o进行求偏导数,并使偏导数为0,化简该线性方程组,分别得到通过R、D计算s的公式与通过s,R,D计算o的公式,以及最后通过s,o,R,D计算最小误差h的公式。

        其中,对于s,我们得到公式:

s = \frac{n\sum_{i=1}^{n}d_{i}r_{i} - (\sum_{i=1}^{n}d_{i})(\sum_{i=1}^{n}r_{i})} {n\sum_{i=1}^{n}d_{i}^{2} - (\sum_{i=1}^{n}d_{i})^{2}}

        其中,对于o,我们得到公式:

o = \frac{(\sum_{i=1}^{n}d_{i}^{2})(\sum_{i=1}^{n}r_{i}) - (\sum_{i=1}^{n}d_{i})(\sum_{i=1}^{n}r_{i}d_{i})} {n\sum_{i=1}^{n}d_{i}^{2} - (\sum_{i=1}^{n}d_{i})^{2}} = \frac{1}{n}(\sum_{i=1}^{n}r_{i} - s\sum_{i=1}^{n}d_{i})

        最后,我们得到关于最小误差h的公式:

h = \frac{1}{n}[\sum_{i=1}^{n}r_{i}^{2} + s(s\sum_{i=1}^{n}d_{i}^{2} - 2\sum_{i=1}^{n}d_{i}r_{i} + 2*o\sum_{i=1}^{n}d_{i})+o(o*n - 2\sum_{i=1}^{n}r_{i})]

        根据该公式,通过遍历D块以及相关等距变换,获取当h最小时的相关参数,将D块索引、等距变换序号、s、t四个参数存储为该R块编码信息。

6. 解码过程

        解码过程相对简单,为迭代计算。

        创建与原图像相同大小的随机图像后,对于每个R块获取其编码信息,对其对应D块位置信息进行相应的等距变换后乘以对比度调节因子后与亮度调节因子相加,对创建图像进行迭代5次后一般可获得psnr较高解码图像。

注:本文只为对于分形编码流程初步理解进行撰写,其中一些细节部分并未涉及,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值