LIC(Line Integral Convolution)

news/2024/10/30 19:30:21/

前言

最近在阅读NPR相关论文时需要用到线积分卷积,因此查阅了一下相关论文以及网上已有的实现方法。本文主要讲解线积分卷积的快速实现版本(SIGGRAPH,1995)。为了便于实验和测试,用Python实现并进行了简单的封装。如果本文讲解部分有任何理解错误,希望明确指出。

线积分卷积原理

首先,我们需要获取一张图像的二维矢量场,基于每个像素点上矢量的方向来构造一条流线。构造流线的方式在最早的论文中使用了DDA算法。通过以下的公式来进行迭代:

P 0 = ( x + 0.5 , y + 0.5 ) P_0 = (x+0.5,y+0.5) P0=(x+0.5,y+0.5)

P i = P i − 1 + V ( P i − 1 ) ∣ V ( P i − 1 ) ∣ ∗ △ s i − 1 P_i = P_{i-1} + \frac{V(P_{i-1})}{|V(P_{i-1})|}*\bigtriangleup{s_{i-1}} Pi=Pi1+V(Pi1)V(Pi1)si1

此处 V ( P i − 1 ) V(P_{i-1}) V(Pi1)代表的是矢量场 P i − 1 P_{i-1} Pi1坐标下的数值。

△ s i − 1 \bigtriangleup{s_{i-1}} si1的含义是在 P i − 1 P_{i-1} Pi1点处上下左右四个方向中变化量最小的方向的数值,计算的方式也很简单,请参考论文1

另外需要注意的是此处需要计算出一条流线,但是初始的点只有一个,所以要考虑到向前查找和向后查找,即:

P i = P i − 1 − V ( P i − 1 ) ∣ V ( P i − 1 ) ∣ ∗ △ s i − 1 P_i = P_{i-1} - \frac{V(P_{i-1})}{|V(P_{i-1})|}*\bigtriangleup{s_{i-1}} Pi=Pi1V(Pi1)V(Pi1)si1

这样逐步查找构造一条流线的方式本质上就是递归来寻找下一个点,结束条件依靠 △ s i − 1 \bigtriangleup{s_{i-1}} si1数值设定一个阈值来控制。

最后,通过刚才构筑好的多条流线通过卷积运算的方式就可以计算出每一个像素点的数值。此处计算方式不是很难,参考第一篇论文就可以进行计算。


时间原因,以后再补充关于快速运算的算法。TODO

不足

参考文献1的问题就在于运算速度过慢,因而可以通过第二篇的快速算法来进行一定的加速处理2

当然这两篇的实现都是在CPU上进行的,可以通过并行处理的方式进行一定加速。

后续我会补充GPU上的实现算法。

实验结果

输入图片
在这里插入图片描述

输出图片

在这里插入图片描述

参考资料

  • http://www.cs.utah.edu/~wmartin/cs523project/
  • https://github.com/philogb/LIC
  • https://github.com/tatsy/lime

---------------------------------------------20181019更新----------------------------------

附上WebGL版的demo


  1. Cabral, Brian, and Leith Casey Leedom. "Imaging vector fields using line integral convolution." Proceedings of the 20th annual conference on Computer graphics and interactive techniques. ACM, 1993. ↩︎

  2. Stalling, Detlev, and Hans-Christian Hege. "Fast and resolution independent line integral convolution." Proceedings of the 22nd annual conference on Computer graphics and interactive techniques. ACM, 1995. ↩︎


http://www.ppmy.cn/news/456032.html

相关文章

LIC 2022 视频语义理解基线(快速启动版)

转自AI Studio,原文链接: LIC 2022 视频语义理解基线(快速启动版) - 飞桨AI Studio LIC2022视频语义理解基线 ❗️该版本为快速启动版,训练集取比赛提供的训练集的子集,目的是减少在线项目加载等待时间&am…

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建

开发环境 ubuntu 20.04 VMware Workstation Pro 16 基于qemu(模拟器),ARM64 :virt cortex-a57 平台 搭建Linux 6.3.8 (当前最新版本) 准备 Linux 内核下载,下载最新稳定版本,当前为 linux-…

本周大新闻|Quest游戏订阅服务曝光;平价版苹果XR头显25年推出

本周XR大新闻,AR方面,彭博苹果预计25年推出更亲民头显;Vision Pro外屏含微透镜;WWDC23苹果高管脱口秀爆料更多细节;外媒爆料称Vision Pro预期销量改为15万台;VitreaLab展示RGB激光背光技术。还是提前说一下…

C# hello world

目录 一 C#简介 二 Hello world程序 三 C#未来的发展趋势 四 C#学习路线推荐 一 C#简介 C#(C Sharp)是微软开发的一种面向对象的编程语言,它于2000年发布,并被设计为在.NET平台上运行。C#语言具有简单、安全、类型安全、可扩…

X站全称是什么_科普|HDMI是什么意思?有什么用处?一文带你了解HDMI的发展史...

HDMI接口想必很多人都不陌生,随着智能电视盒子的普及,越来越多的家庭都通过HDMI高清线来连接电视盒子与电视,广泛应用于智能电视、机顶盒、投影仪等。HDMI全称是高清晰度多媒体接口,英文全称High Definition Multimedia Interface…

信息安全管理制度办法

信息安全管理办法 拟制 信息部

[车联网安全自学篇] ATTACK安全之检测BootLoader+内核+文件系统的安全启动固件的异常篡改行为「一」

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 0x01 前言 Android作为一个应用广泛的平台,同样支持Verified Boot。以硬件提供保护作为信任根,实现从bootloader到boot分区…

建设银行和工商银行的网银安全措施

建设银行和工商银行的网银安全措施 一、中国建设银行网上银行的安全措施 网络安全是中国建设银行网上银行( http://www.ccb.com)应用的关键和核心,如图14.3所示,为中国建设银行网上银行服务功能窗口。 图14.3 中国建设银行网上银行…