【论文阅读笔记】Contrast image correction method

news2024/9/30 3:27:13

论文小结:

  本文是2010年发表出来的一篇文章,提出的方法是一种增强对比度的方法,其基本原理是自适应参数的 ganma 校正。ganma 校正的目标在于同时校正曝光过度和曝光不足区域的图像。
  同时,为了防止光晕伪影,使用双边滤波用于指数校正的掩码。
  ganma 校正一半的公式如下,本文就是基于此进行的改进。 P i x e l o u t = 255 ∗ ( P i x e l i n 255 ) γ Pixel_{out}=255*(\frac{Pixel_{in}}{255})^\gamma Pixelout=255(255Pixelin)γ

论文介绍

增强技术相关算法

  在图像处理领域,已经有几种调整图像对比度的方法。通常,可以将这些算法分为两类对比度校正:全局校正和局部校正。当必须同时调整阴影和高光细节时,全局对比度校正可能会产生令人失望的结果。 另一方面,局部对比度校正优点是它们提供了一种将一个输入值映射到许多不同输出值的方法,这取决于相邻像素的值,并允许以这种方式同时进行阴影和高光调整。

  在全局对比度增强技术中,ganma 校正和直方图均衡化是最常见的。在图像原始灰度分布的基础上,将图像的直方图重塑为不同的具有均匀分布特性的直方图,以增强对比度。

  在局部对比度增强算法方向,也提出了几种不同算法。Moroney 4 ^4 4使用非线性掩码来执行局部对比度校正(应该是本文前身)。这种校正可以同时使阴影变亮和使高光变暗,它基于对输入数据进行简单的逐像素伽玛校正。但是,Moroney的算法那的局限性之一(其他局部校正算法也很常见),是会引入“光晕”(halo)伪像,是由于场景边界的平滑(due to the smoothing across scene boundaries),也会导致场景动态范围变小。自适应直方图均衡化(AHE)方法使用局部图像信息来增强图像。在参考文献《Adaptive image contrast enhancement using generalizations
of histogram equalization》回顾和比较了几种自适应(AHE)技术。作者也提出了基于引入两个参数的“修正累积函数”的新AHE方法。

  Rizzi 13 ^{13} 13提出了一种无监督增强数字图像的算法,该算法同时具有全局和局部效果,称为自动颜色均衡(ACE)。ACE 受人类视觉一些适应机制的启发,通过考虑图像中的颜色空间分布来实现局部过滤效果。 ACE 已被证明可以实现有效的颜色恒定校正和令人满意的色调均衡,同时执行全局和局部图像校正。 但是,该算法的计算成本非常高。

本文方法介绍

  本文使用了Moroney的算法作为基础开发局部对比度校正,其中使用双边滤波器,而不是去使用会产生光晕伪影的高斯滤波器。整体的思路是依据一个ganma 校正,对于一个 8 8 8-bit的灰度图,有如下的表示,其中 γ \gamma γ通常是一个 0 − 3 0-3 03之间的正数。 O ( i , j ) = 255 [ I ( i , j ) 255 ] γ (1) O(i,j)=255[\frac{I(i,j)}{255}]^\gamma\tag{1} O(i,j)=255[255I(i,j)]γ(1)

  此校正为完全曝光不足或曝光过度的图像提供了良好的结果。 然而,当图像中同时存在曝光不足和曝光过度的区域时,这种校正并不令人满意。下图展示了一个 γ = 0.35 \gamma=0.35 γ=0.35,即 1 2.857 \frac{1}{2.857} 2.8571
在这里插入图片描述

  将等式(1)扩展到彩色图像也是很简单的,只要将RGB空间的每个分量分别应用或者仅应用于YCbCr空间的亮度Y。对于一些只有某些区域具有正确照明而其他区域曝光不足的图像,需要进行局部校正以允许同时进行阴影和高光调整。由于本文算法对局部感兴趣,所以伽马校正的指数不再是常数,而是被选为一个函数,该函数取决于要校正的点 ( i , j ) (i,j) (i,j)及其相邻像素点 N ( i , j ) N(i,j) N(i,j)。等式(1)变为: O ( i , j ) = 255 ∗ [ I ( i , j ) 255 ] γ [ i , j , N ( i , j ) ] (2) O(i,j)=255*[\frac{I(i,j)}{255}]^{\gamma[i,j,N(i,j)]}\tag{2} O(i,j)=255[255I(i,j)]γ[i,j,N(i,j)](2)

  Moroney建议使用以下指数表达式: γ [ i , j , N ( i , j ) ] = 2 128 − m a s k ( i , j ) / 128 (3) \gamma[i,j,N(i,j)]=2^{128-mask(i,j)/128}\tag{3} γ[i,j,N(i,j)]=2128mask(i,j)/128(3)

  上面的公式(3)是原文,经过实践测试和理解,应该是 γ [ i , j , N ( i , j ) ] = 2 128 − m a s k ( i , j ) 128 \gamma[i,j,N(i,j)]=2^{\frac{128-mask(i,j)}{128}} γ[i,j,N(i,j)]=2128128mask(i,j)

  其中, m a s k ( i , j ) mask(i,j) mask(i,j)是输入图像强度的反响高斯低筒滤波版本。当掩码大于 128 128 128时,对应的是原图像上暗像素和暗邻居,会让指数 γ \gamma γ大于 1 1 1,因此等式(2)会提升亮度。相同地,当掩码小于 128 128 128,对应原图像的是亮像素和亮邻居,会让指数 γ \gamma γ小于 1 1 1,输出亮度下降。掩码等于 128 128 128会产生指数 1 1 1,输出亮度不变。与平均值128的距离越大,校正越强。同时,作者注意到,黑色和白色像素,和在伽马校正中一样,独立于指数值保持不变。因此,公式(3)变成了如下公式:其中 B F m a s k ( i , j ) BFmask(i,j) BFmask(i,j)是输入图像强度的反向低通版本,使用双边滤波器进行滤波, α \alpha α是取决于图像属性的参数。 γ [ i , j , N ( i , j ) ] = α [ 128 − B F m a s k ( i , j ) / 128 ] (4) \gamma[i,j,N(i,j)]=\alpha^{[128-BFmask(i,j)/128]}\tag{4} γ[i,j,N(i,j)]=α[128BFmask(i,j)/128](4)

LCC中的双边滤波

  高斯低通滤波计算邻域中像素值的加权平均值,其中权重随着距中心的距离而减小。 假设附近的像素可能具有相似的值,因此将它们平均在一起是合适的。 然而,缓慢空间变化的假设在边缘处失败,因此边缘被低通滤波模糊。为了避免跨边缘进行平均,同时仍在平滑区域内进行平均,Tomasi 和 Manduchi 提出了双边滤波器。公式(4)中使用双边滤波代替高斯滤波计算mask是为了减少空间滤波器在某些图像仅使用高斯滤波器时会出现的光晕效应(halo effect)。特别是某些高强度梯度的区域是显示光晕效应的候选区域。作者认为,使用双边滤波预计会减弱光环效应。本文完整的公式如下: O ( i , j ) = 255 ∗ [ I ( i , j ) 255 ] α [ 128 − B F m a s k ( i , j ) / 128 ] (5) O(i,j)=255*[\frac{I(i,j)}{255}]^{\alpha^{[128-BFmask(i,j)/128]}}\tag{5} O(i,j)=255[255I(i,j)]α[128BFmask(i,j)/128](5)

  其中, B F m a s k ( i , j ) BFmask(i,j) BFmask(i,j)是窗口为 ( 2 K + 1 ) × ( 2 K + 1 ) (2K+1)\times (2K+1) (2K+1)×(2K+1)和由输入的逆版本 I i n v ( i , j ) = 255 − I ( i , j ) I_{inv}(i,j)=255-I(i,j) Iinv(i,j)=255I(i,j)的双边滤波图像给出。

   B F m a s k ( i , j ) = 1 k ( i , j ) ∑ p = i − K i + K ∑ q = j − K j + K × e x p { − 1 2 σ 1 2 [ ( i − p ) 2 + ( j − q ) 2 ] } × e x p { − 1 2 σ 2 2 [ I i n v ( i , j ) − I i n v ( p , q ) ] 2 } × I i n v ( p , q ) (6) BFmask(i,j)=\frac{1}{k(i,j)}\sum_{p=i-K}^{i+K}\sum_{q=j-K}^{j+K}\times \mathbb{exp}\{-\frac1{2\sigma_1^2}[(i-p)^2+(j-q)^2]\} \times \mathbb{exp}\{ -\frac1{2\sigma_2^2}[I_{inv}(i,j) - I_{inv}(p,q)]^2 \} \times I_{inv}(p, q) \tag{6} BFmask(i,j)=k(i,j)1p=iKi+Kq=jKj+K×exp{2σ121[(ip)2+(jq)2]}×exp{2σ221[Iinv(i,j)Iinv(p,q)]2}×Iinv(p,q)(6)

   k ( i , j ) = ∑ p = i − K i + K ∑ q = j − K j + K e x p { − 1 2 σ 1 2 [ ( i − p ) 2 + ( j − q ) 2 ] } × e x p { − 1 2 σ 2 2 [ I i n v ( i , j ) − I i n v ( p , q ) ] 2 } (7) k(i,j)=\sum_{p=i-K}^{i+K}\sum_{q=j-K}^{j+K} \mathbb{exp}\{-\frac1{2\sigma_1^2}[(i-p)^2+(j-q)^2]\} \times \mathbb{exp}\{ -\frac1{2\sigma_2^2}[I_{inv}(i,j) - I_{inv}(p,q)]^2 \} \tag{7} k(i,j)=p=iKi+Kq=jKj+Kexp{2σ121[(ip)2+(jq)2]}×exp{2σ221[Iinv(i,j)Iinv(p,q)]2}(7)

  其中, σ 1 \sigma_1 σ1是高斯函数在空间域的标准差, σ 2 \sigma_2 σ2是高斯函数在强度域的标准差。参数 α 1 \alpha_1 α1基于所需的低通滤波量。 α 1 \alpha_1 α1越大,模糊越重,因为会结合更远位置的值。相似地, σ 2 \sigma_2 σ2是所需像素的组合量, σ 2 \sigma_2 σ2越大,双边滤波越接近高斯低通滤波。窗口大小 K K K取决于空间高斯的形状,通过如下联系: K = ⌊ 2.5 × σ 1 ⌋ (8) K=\lfloor 2.5\times \sigma_1\rfloor\tag{8} K=2.5×σ1(8)

  其中 ⌊ ⋅ ⌋ \lfloor \cdot \rfloor 为向下取整数。如果 σ 1 \sigma_1 σ1太高,图像的结果会过于模糊,指数趋于一个常数,那么公式(5)就会趋于一个简单的伽马校正,如公式(1)。如果窗口太小,图像不模糊,校正就没有考虑图像的局部属性

阶段效果展示

  如下面的图像有一个高强度梯度,因此是会产生光晕效应的候选图像。
在这里插入图片描述

  下图展示了 σ 1 = 2 \sigma_1=2 σ1=2时的LCC输出以及对应的双边滤波mask。
在这里插入图片描述

  下图展示了Moroney校正和相应的空间高斯mask。
在这里插入图片描述

  比较这两个图,可以看到高斯模糊输出图的光晕伪影在双边滤波中显著减少。

  有很多种加速双边滤波的算法。本文采用了使用维度 K K K大小为 σ 1 ∗ 3 \sigma_1*3 σ13盒滤波来简单替换公式(6)中的空间高斯。这个替换后的输出图像没有显示较大的区别,但在上图上有7倍的时间缩减感觉不太靠谱,这不就自定义 σ \sigma σ的高斯模糊?那可能调试得当,高斯模糊和双边模糊效果差不多。

α \alpha α参数优化

  作者认为,最好根据每张图片的特点进行不同的对比度校正。对于低对比度的图像,会需要更强的校正,那么 α \alpha α应该更高,比如在 2 − 3 2-3 23之间。而对于对比度较好的图像, α \alpha α应该较小到 1 1 1,对应的是没有校正。需要再判断是否需要这个“优化”

  假设输入图的平均值为 I ^ \hat{I} I^,如果 I ^ < 128 \hat{I}<128 I^<128,则意味着暗图,mask趋向于 255 255 255,因为mask是强度图的反向。则定义 α = l n ( I ^ 255 ) l n ( 0.5 ) \alpha=\frac{\mathbb{ln}(\frac{\hat{I}}{255})}{\mathbb{ln}(0.5)} α=ln(0.5)ln(255I^)

  如果 I ^ > 128 \hat{I}>128 I^>128,说明图像是亮图,则定义 α = l n ( 0.5 ) l n ( I ^ 255 ) \alpha=\frac{\mathbb{ln}(0.5)}{\mathbb{ln}(\frac{\hat{I}}{255})} α=ln(255I^)ln(0.5)

  当 α < 1.2 \alpha<1.2 α<1.2,则说明原始图像不需要拉升(the original image does not need to be elaborated)。比如下图所示,在 α \alpha α不同参数的情况下,LCC的输出图像。
在这里插入图片描述

对比度增强管道

  本文增强算法的整个管道可被组织为一系列算法,如下图所示。
在这里插入图片描述

  作者通过对局部校正前后的强度直方图进行了更深入的分析,发现:尽管更好地分配了灰度图级别,但整体的对比度增强不是令人满意的。此外,特别是对于那些具有压缩伪影的低质量图像,较暗区域中的噪声会得到增强

  公式(5)的局部校正公司就会带来让处理后的图像变灰的效果。为了克服这种不良的图像质量损失,本节介绍了进一步的对比度增强步骤,包括拉升Strethcing、裁剪Clipping和增强饱和度Saturation的算法。流程如下:

  1. RGB空间转为YCbCr空间;
  2. 计算图像中暗像素的比例。暗像素的定义为:亮度Y的值小于 35 35 35,同时其色度半径( 2 ∗ ( C b − 128 ) + 2 ∗ ( C r − 128 ) 2 \frac{2 * (Cb-128) + 2 * (Cr - 128)}{2} 22(Cb128)+2(Cr128))小于 20 20 20
  3. 定义暗像素所占据的拉升块(stretched bins) bstr ,为LCC输出的强度图的暗像素 30 % 30\% 30%占据的累积直方图块数(bins) b_output30%,和输入强度图的暗像素 30 % 30\% 30%占据的累积直方图块数(bins) b_input30%之间的差值。即 bstr = b_output30% - b_input30%。在必须恢复暗区的情况下,经验建议设置为 30% 的像素百分比通常落在直方图的窄峰下方的第一个箱中,与其余暗像素一起。因此,这些像素中的大多数都被重新定位为几乎初始值。 然而,在曝光不足区域的情况下,相同的百分比通常落在更广泛的峰值下,因此只有部分暗像素被恢复。(大意就是拉直方图)
  4. 如果没有暗像素,则进行拉伸以获得 0.2% 的较暗像素的裁剪;
  5. 在任何情况下,要裁剪的最大 bin 数都设置为 50。

颜色饱和度恢复

  为了最小化输入图像和输出图像之间色彩饱和度的变化,作者借鉴了前人的建议,将Y通道的变化也相应地对R/G/B通道进行调整: R ′ = 1 2 [ Y ′ Y ( R + Y ) + R − Y ] R'=\frac12[\frac{Y'}Y(R+Y)+R-Y] R=21[YY(R+Y)+RY] G = 1 2 [ Y ′ Y ( G + Y ) + G − Y ] G=\frac12[\frac{Y'}Y(G+Y)+G-Y] G=21[YY(G+Y)+GY] B ′ = 1 2 [ Y ′ Y ( B + Y ) + B − Y ] B'=\frac12[\frac{Y'}Y(B+Y)+B-Y] B=21[YY(B+Y)+BY]

  其中, Y ′ Y' Y是LCC经过裁剪clipping校正之后的亮度值。

结果对比

  下图展示了两张图像,其中直方图较暗的部分(图7的前50个bin和图8的前20个bin)对应于我们想要增强的场景的暗区。图7和8的中间行,都显示应用公式(5)得到的LCC结果都会使这些暗区域太亮的相同效果。此外,LCC校正后的图像显示出不饱和的颜色。这两个图的直方图拉升和裁剪的下一步是不同的。对于图7,只需要回复部分暗像素;而对于图8,必须恢复衣服的所有暗像素。图7和图8的最后一行,显示出了最终的精细图像(LCC+裁剪+饱和度)及其相应的直方图。
在这里插入图片描述
在这里插入图片描述

  下面两个图展示了本文算法和其他一些方法的比较。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 【git】

文章目录 前言一、git 工作流程二、常用的git命令1.git 初始化2.修改的内容提交到暂存区3.暂存区的内容提交到本地仓库4.创建分支5.切换分支6.展示分支7.删除分支8.合并指定分支到当前分支9.本地仓库的内容提交到远程仓库10.合并分支11.上传本地仓库分支到远程仓库分支 前言 什…

路径规划算法:基于闪电搜索优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于闪电搜索优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于闪电搜索优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

第12届蓝桥杯Scratch国赛真题集锦

程题 第 1 题 问答题 博土江出题 题目说明 编程实现:博土汪出了5道加法选择题&#xff0c;请同学们给出正确选项 具体要求 1).博士汪问:“n m ?”&#xff0c;n (0-9随机数)&#xff0c;m (0-9随机数) 2).下方A、B、C、D四个选项&#xff0c;随机一个选项为正确答案&#xff…

通过Python的PyPDF2库合并多个pdf文件

文章目录 前言一、PyPDF2库是什么&#xff1f;二、安装PyPDF2库三、查看PyPDF2库版本四、合并多个pdf文件1.引入库2.定义pdf路径3.获取所有要合并的PDF文件名4.创建一个新的PDF文件5.遍历所有PDF文件名6.打开PDF文件7.创建PDF阅读器对象8.遍历PDF中的每一页&#xff0c;并将它们…

嵌入式c语言-进制转换

10进制转2进制 以10进制的16,18为例子 利用短除法 每次除以2并且记录余数 直到商为1 然后从下往上写出 商余数 10进制转16进制 以55 180 500举例 利用短除法 每次除以16并且记录余数 直到商为1 然后从下往上写出 商余数 商和余数要写成16进制的形式 10进制转8进制 以15为…

(浙大陈越版)数据结构 第三章 树(上) 3.3 二叉树的遍历

目录 3.3.1 遍历&#xff08;先中后&#xff09; 二叉树的遍历 先序遍历&#xff1a; 中序遍历 后序遍历 tips: 3.3.2 中序非递归遍历 非递归算法实现的基本思路&#xff1a;使用堆栈 中序遍历的非递归算法具体实现方法为&#xff1a; 3.3.3 层序遍历 难点 解决方法…

经典神经网络(5)GoogLeNet及其在Fashion-MNIST数据集上的应用

经典神经网络(5)GoogLeNet及其在Fashion-MNIST数据集上的应用 1 Inception V1 的简述 Inception 网络是卷积神经网络的一个重要里程碑。在Inception 之前&#xff0c;大部分流行的卷积神经网络仅仅是把卷积层堆叠得越来越多&#xff0c;使得网络越来越深。这使得网络越来越复杂…

计算机组成原理-中央处理器-控制器功能和原理

目录 一、硬布线控制器 二、硬布线控制器的设计(硬件) 2.1分析每个阶段的微操作序列(取址、间址、执行、中断) 2.2选择cpu的控制方式 2.3 安排微操作时序 2.4电路设计 2.4.1列出操作时间表 2.4.2 写出微操作命令的最简表达式 2.4.3画出电路图 *三、微程序控制器基本原理 四…

剪映 自动打关键帧 AutoHotkey

牙叔教程 简单易懂 明确目的 做小说推文的话&#xff0c; 前面几分钟肯定要自己打关键帧&#xff0c; 所以这里的自动打关键帧指的是后面几分钟的图片&#xff0c; 对关键帧要求比较高的同学可以划走了, 因为这里介绍的是简单的 上上下下缩放的关键帧 要求 用剪映提取字幕…

【Python Twisted】零基础也能轻松掌握的学习路线与参考资料

Python Twisted是一个用于网络编程的事件驱动的框架&#xff0c;该框架使用异步I/O模型和回调函数。它支持多种协议&#xff0c;包括TCP、UDP、SSL/TLS、XMPP等&#xff0c;可以用来编写Web服务器、聊天应用、邮件服务器等。Twisted是一个成熟的框架&#xff0c;拥有强大的社区…

【JavaEE】文件操作和IO

目录 1、认识文件 1.1、路径 1.1.1 、绝对路径 1.1.2、相对路径 1.2、文本文件 vs 二进制文件 2、文件系统操作 3、文件内容操作 3.1、字节流用来输入的抽象类InputStream的方法使用 3.1.1、FileInputStream类的构造方法 3.1.2、字节流读操作 3.1.3、字节流写操作 3.…

Presto从入门到精通以及案例实操系列

1、简介 1.1、Presto的由来 Presto最初由Facebook公司开发&#xff0c;旨在解决Facebook内部大规模数据处理和数据分析的问题。在传统的Hadoop生态圈中&#xff0c;MapReduce作为数据处理框架&#xff0c;虽然能够处理海量数据&#xff0c;但是其查询性能却比较低下&#xff…

《面试1v1》CountDownLatch和CyclicBarrier

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你用过 CountDownLatch 和 CyclicBarrier 吗&#xff1f; 候选人&#xff1a; 当然可以。CountDownLatch 和 CyclicBarrier 都是 Java 中用于多…

通过 docker-compose 快速部署 MySQL保姆级教程

文章目录 一、概述二、前期准备1&#xff09;部署 docker2&#xff09;部署 docker-compose 三、创建网络四、MySQL 编排部署1&#xff09;构建镜像 Dockerfile2&#xff09;配置文件2&#xff09;编排 docker-compose.yaml3&#xff09;开始部署 五、简单测试验证六、常用的 M…

在线排查内存泄漏的步骤

一、在线排查内存泄漏的步骤 想到内存泄漏问题的排查&#xff0c;很多开发会想到使用 Valgrind。使用 Valgrind 有几个局限&#xff1a; 需要安装 Valgrind 需要启停服务进程 影响服务进程性能 依赖于测试用例覆盖到 BUG 分支 由于这些原因&#xff0c;线上内存泄露问题并…

位图、布隆过滤器、海量数据处理

提示&#xff1a; 本文介绍了&#xff0c;位图、布隆过滤器、以及海量数据处理问题。 本节有很多关于大数处理的案例&#xff08;已解答&#xff09;。 ——细雨斜风作晓寒&#xff0c;淡烟疏柳媚晴滩。&#xff08;苏轼&#xff09; 文章目录 一、位图1.1 位图概念1.2 位图实…

深度学习12—VGG19实现

目录 VGG19实现 1.为数据打标签的generate_txt.py 2.对图像进行预处理的data_process.py 3.VGG19的网络构建代码net_VGG19.py 4.训练得到pth模型参数文件的get_pth_file.py 5.预测代码predict.py 6.预测VGG16与VGG19结果对比 VGG19实现 1.为数据打标签的generate_txt.p…

【git教程】

这里写目录标题 git是什么集中式版本控制系统和分布式版本控制系统git的优势git能做什么(常用)基础教程流程图介绍小节 常用Git命令速查表详解1、HEAD2、add3、commit4、branch5、merge6、rebasemerge和rebase区别7、reset8、revertrevert与reset的区别 git是什么 git是目前世…

【Java算法题】剑指offer_数据结构之02树

前言 刷题链接&#xff1a; https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 2. 树 JZ55 二叉树的深度 思路&#xff1a;dep max_deepth(left,right)1&#xff0c;二叉树的深度为根节点到叶子节点&#xff0c;使用递归访问根节点的左孩子和右孩子&…

想要让数据更生动?试试这5种图表工具

在当今大数据时代&#xff0c;数据的利用和分析在各个领域的工作中起着重要的作用。因此&#xff0c;数据可视化图形工具已经成为数据分析的好帮手。事实上&#xff0c;数据可视化的本质是视觉对话。它通过图形手段清晰直观地表达信息&#xff0c;从数据中获得价值。然而&#…