Fractal image compression

Fractal image compression 是一个振奋人心的分形理论应用,特别是在图像压缩方面。

说明说明

使用此应用程序, 您可以 :

  • 使用此分形法压缩图像
  • 将先前压缩的图像降为不同格式

利用该平台的图书馆,其中包括以下特征:

  • 多种语言
  • 可配置多分辨率缩放
  • 暗模式选项
  • 新版本通知


专业:

  • 如果设计得当,它的运作独立于图像分辨率
  • 这是一种独特的压缩方法
  • 让你在前进时学习


关节 :

  • 压缩过程极慢
  • 你没有达到非常高的压缩比率(至少按照我所用的参数)

代码描述

这是执行这个计划fractal image compression 算法(400)在我的大学时代发表在IEEEE上

该应用程序利用Delaunay增量三角测量图书馆,该图书馆也用于软体申请


高级算法 :

  • 压缩 :
    • 分形压缩的重点是存储图像区域之间的关系,而不是实际的像素值,具体而言,是三角关系之间的关系。
    • 图像分为三角网格,由多个三角形组成,形成三角域。
    • 该图像又细分为一套新的三角图,其中含有指定用于代码簿的较大三角形。
    • 三角匹配是动态的, 分裂和合并算法根据三角像素的差异来应用。
    • 一旦确定代码簿的三角图, 就会选择最有代表性的 2n 三角形组成代码簿。 n 的值会显著影响压缩时间, 而对压缩比例和所实现的质量有轻微影响 。
    • 对于每个域三角形,将使用最小平均平方差错(MSE)标准,对每个域三角形进行代码手册中三角形的最佳绘图
    • 三角形之间的最佳映射图通过下列组合得到:
      • 顶顶的变换(6种可能性)
      • 确定冲抵数额的冲抵额
      • 查找 0 和 1 之间的比例比值系数,适用于偏离平均值的情况。这个比例系数应保持在 0 和 1 之间,以防止迭代降压过程中出现差异
      此外,这些参数应使用数量有限的比特进行量化,以确保压缩时间和比率合理,并符合预期质量。
  • 每个频道压缩文件中的存储信息 :
    • 复制两个三角图的信息:
      • 每个迭代中分裂的三角形
      • 由于合并(在完成分割迭代后)而删除的顶点
    • 选择代码簿的 2n 三角形
    • 每个域三角形的最佳映射图 :
      • 用于映射( nbets) 的代码簿三角形
      • 最佳顶层变异( 6个组合, 3 位元)
      • 冲抵(提交人指出,冲抵实际上代表了6位数)
      • 比额表(作者表示该比额表有6位数有效表示)
  • 降压( 每个频道) :
    • 两个三角形的三角形是获得的。
    • 代码簿三角被获取 。
    • 这一进程将重复进行,直至实现趋同:
      • 绘制所有域域三角形与代码簿三角形的最佳对应


在获得人造智能硕士学位后, 我设想创新如何通过应用 K 类成像来获得代码簿中最重要的三角形。

我不确定创新是否会改善或阻碍算法, 但这让我不用自己编程, 起初似乎很复杂。


图像处理分为频道,通常是RGB。

它利用多处理,每个频道都有一条线。


在V1.1版本中,增加了与图像IO标准兼容的读者。

因此,您可以用应用程序打开压缩图像(.dfc),只需做:

BufferedImage image = ImageIO.read("image.dfc");

视窗窗

Fractal image compression v1.1 (2026)

下载下载

版本版本

image

应用程序采用了我大学时代IEEE论文中描述的算法fractal image compression,以Delaunay三角勘测和块码为基础。

在Teleco Teleco Television(巴塞罗那64计划)最后一期实习期间,我与一名大学同学合作开发了这一算法的初始版本。

互联网仍处于早期阶段,任何进展几乎完全依赖个人努力和实物文件。

我记得我们开发了一个相当不错的Delaunay三角图,并成功实施了分裂和合并方法,这包括计算最具代表性的三角和在编码过程中找到最佳绘图方法。 然而,尽管进行了三个月的密集开发,我们从未完成应用。

25年后的今天,我向大家介绍这个新的算法实施过程。 这个算法在创纪录的两周时间里完全完善和完成。

显然,25年后会有所改进。 此外,这次还增加了处理三角形的功能支持,我已经为减速效果应用设计了程序。

这次使用由专业人士编程的Delaunay三角图书馆。

很明显,当你不用自己做砖块的时候, 你就能越快地建造墙壁...


示范视频

image

版本 v1.1 中的新特征是在应用程序中添加一个与图像IO 兼容的折形压缩图像阅读器。

因此,您可以用以下应用程序阅读压缩图像(.dfc):


BufferedImage image = ImageIO.read("image.dfc");


用.jpg 格式和应用程序的.dfc 格式比较图像时,可以看到质量比.jpg 的要差一些,而且它需要略大一点的文件(如预期的那样)。

但结果并不坏

然而,鉴于压缩需要较长的处理时间,这种压缩及其在申请中的实施只涉及学术利益。


04/05/2026 - 04/12/2026 。在恢复了该应用程序的进化后,我提议用真实图像进行测试,然后用“4,000 x 3000”像素之一进行测试。

我遇到很多问题:

  • 这个过程在分裂迭代中需要永远的时间(由于三角形的广度高达400,000个三角形,而且每个迭代中的所有三角形都重复了分割状况检查) 。
  • 记忆在达到我的系统23GB的极限后就耗尽了。因为:
    • 拆分和合并迭代的结果存储在布林列表中( 大约 16 个迭代 x 2 种三角对调 x 3 个通道 x 3 个通道 x 400 000 元件!!!!!! ) 。 这使得总共 约 4 000 000 000 元元素, 仍然可以接受 ) 。
    • 此外,选择最有代表性的三角形(设为256个)的书时使用了K型类动物(超过400,000个元素)(我认为该算法使用的内存是O(n)2),现在它失控了...)
    • 而对于更多的INRI来说,这些计算是同时为三个频道(rgb)进行的!
  • 一旦这些问题得到解决,我设法压缩图像(400x3000),但我看到完成这项工作需要6至8小时。

我提议解决他们:

  • 分裂的永久化 解决方案:
    • 我将三角形的最小大小增加为分裂, 与图像中的像素数量成正比。 导致三角形数量减少。 在用图( 4000 x 3000) 中, 三角形数量除以 4 (我们从大约 400 000 三角形到 大约 100 000 三角形) 。
    • 此外,我还创建了一个三角形的Set, 其三角形不符合分裂标准( 与其像素值的差异相对), 以免在每次迭代中重复这些三角形。 现在飞!!
  • 系统正在耗尽内存。 解决方案 :
    • 在布林列表中保存的拆分和合并结果。 解决方案 :
      • 随着分裂迭代的进展,分裂的三角形数量大大小得多,使用的内存通过存储在 Set 中分割的三角形的索引而保存。
    • K- medoids 的内存( 假定为 O( n% 2) ) 。 解析 :
      • 由于我们把三角形数除以 4, 这个算法所需的内存, 三角形的减缩 意味着用大约 16 系数来分隔内存 。
      • 3个K-米多型平行(每个频道1个) 。 解决方案 :
        • 我们测算三角坐标和选择代码簿中最具代表性的三角形(与K-Medoids)的计算顺序。
      • 我们把48岁K型血型所需的记忆力 分开了!
  • 使用“ 真实” 图像的处理时间需要永远的时间( 示例图像压缩需要6至8小时), 3 条线, 每个频道各一条线 。 解答 :
    • 使线条数可以配置 。 (通过将线条配置为 23 条线( 我的系统有 24 个核心), 处理时间将缩短为 3 个半小时 ) 。
  • 解决办法的效果:
    • 三角形数除以 4 的效果显然导致压缩图像质量的明显下降。 但以如此强烈的分辨率, 这并不重要 。
    • 当三角形数除以 4 时,它也会导致压缩文件的大小被分割,据推测也是按4的顺序划分。

我还力求尽量缩小压缩文件的大小,重新编排要储存的信息。

想法是首先在每个迭代中分裂的三角形的索引列表的编码中显示,这些三角形的原始小编码是每个三角形使用一位数,表明它是否分裂。

我设计了一种算法 尽量缩小存储每一套索引 所需的尺寸

我想它不是浪费 如果你好奇的话 在这个网站上,我告诉各位我所依赖的要点。

虽然也许更值得寻找一个普通的无损压缩机, 比如拉链或7z, 并将其应用到压缩文件的全球性... 也许下一次。


在发送的最后一个版本中,包含一个命令界面应用程序,该应用程序将使用较不优化版本的编码器创建的档案翻译为最新版本的编码器,该版本可能占用的空间较少。

在一对带有原始编码的文件(一个是143x143,另一个是4000x3000)上使用这个小的新应用程序,就是压缩文件的大小减少了约4%。

视频视频

下载下载