<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://j-am-ack.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://j-am-ack.github.io/" rel="alternate" type="text/html" /><updated>2026-08-21T09:19:18+00:00</updated><id>https://j-am-ack.github.io/feed.xml</id><title type="html">Jamming.Y’s Site</title><subtitle>Welcome to Jamming.Y&apos;s world! 
I&apos;m an underguaduate student majoring in Information and Computing Science at EECS,PKU.
My research interest now especially lies in Computer Vision.
It is my great fortune to work as an undergraduate intern at the Spatial and Temporal Restoration, Understanding and Compression Team (STRUCT) of Wangxuan Institute of Computer Technology (WICT), mentored by Prof. Jiaying Liu.
Much more hobbies and interests about me could be found in the &quot;About&quot; section. 
I&apos;m looking forward to sharing my thoughts and experiences with you!</subtitle><author><name>Jam Y</name></author><entry><title type="html">Image Compression Learning</title><link href="https://j-am-ack.github.io/blog/2026/01/12/Image_Compression/" rel="alternate" type="text/html" title="Image Compression Learning" /><published>2026-01-12T12:00:01+00:00</published><updated>2026-01-12T12:00:01+00:00</updated><id>https://j-am-ack.github.io/blog/2026/01/12/Image_Compression</id><content type="html" xml:base="https://j-am-ack.github.io/blog/2026/01/12/Image_Compression/"><![CDATA[<p>本文记录笔者学习图像压缩编码相关知识的notes.</p>

<h3 id="jpeg-the-jpeg-still-picture-compression-standard">JPEG: The JPEG still picture compression standard</h3>

<p>整体框架：</p>

<ol>
  <li>颜色空间变换（RGB -&gt; YCbCr）
 ↓</li>
  <li>分块（8×8）
 ↓</li>
  <li>DCT（离散余弦变换）
 ↓</li>
  <li>量化（核心有损步骤）
 ↓</li>
  <li>熵编码（无损）</li>
</ol>

<p>有损的压缩一步主要就是出在“量化”这里；下面我们来逐个部分大体解释这个“经典端到端框架”（人工端到端）干了什么。</p>

<h4 id="1-颜色空间变换">1. 颜色空间变换</h4>

<p>目的：利用人眼特性，这也是体现“感知驱动压缩”的一步</p>

<p>Y：亮度（人眼极其敏感）</p>

<p>Cb / Cr：色度（人眼不太敏感）</p>

<p>之后我们的JPEG压缩会：</p>

<p>保留亮度更多信息</p>

<p>对色度进行更强压缩（甚至降采样）</p>

<h4 id="2-分块">2. 分块</h4>

<p>目的：降低计算复杂度，提高效率</p>

<p>为什么不整张图做？</p>

<p>整图太大，计算复杂</p>

<p>局部区域更“平稳”</p>

<p>代价：产生“block artifacts”（块效应）</p>

<h4 id="3-dct">3. DCT</h4>

<p>DCT这一块感觉细致的写还非常多且复杂，目前就先简单了解一下大体，可能之后如果有机会再深入学一下来填坑。</p>

<p>在进行FDCT变换之前，把64个无符号整型灰度值[0,255]平移到[-128,+127]范围中。</p>

<p>通过DCT变换，8×8个灰度值被转换为8×8个频率谱值，分别相应不同频率。DCT变换系数值均为实数。</p>

<p>低频谱值位于左上部分，高频谱值位于右下部分。通过下述公式可知。左上角F(0,0)相应频率为0，被称为DC系数，其它63个系数称为AC系数。</p>

<p><img src="/assets/post_images/compression/image-1.png" alt="alt text" /></p>

<p>一个基本的想法是说要<strong>把“像素值”变成“频率系数”</strong></p>

<p>motivation是说我们现在的“像素空间”的表达是一种“绝对值”，而相对好压缩的是说我们描述相对的变化程度（快慢），即“频率”</p>

<p>DCT提供的就是一种从“绝对的像素值”到“相对的频率系数”的映射，可以用矩阵乘法来表示。</p>

<p>Y = AXA^T</p>

<p>A是8×8的DCT变换矩阵，X是8×8的像素块，A^T是A的转置。</p>

<p>变换之后直觉理解：</p>

<p>左上角：低频（平滑区域）（接近（0，0）原点）</p>

<p>右下角：高频（边缘、噪声）</p>

<p>而自然图像的能量高度集中在低频，所以变换后你会看到：</p>

<p>少数系数很大，大多数系数接近 0</p>

<h4 id="4-量化">4. 量化</h4>

<p>通过一个量化表，量化表就是一个固定常数的8*8矩阵，相当于一张“不同频率允许有多粗糙”的规则表</p>

<p>通过 把 DCT 系数除以不同大小的数再取整，永久性地抹掉高频细节，从而实现有损压缩。</p>

<p>也因此，量化表的数据就反映了我们的“压缩程度”，是一个可调节的“quality factor”</p>

<p>DCT系数÷量化表→四舍五入，这样高频很可能变成0</p>

<p>得到的结果是一堆0，和少数较大的低频值</p>

<h4 id="5-熵编码">5. 熵编码</h4>

<p>最后的熵编码做的事：</p>

<p>出现频率高的符号，用更短的比特表示（详细展开好像有zigzag扫描，huffman编码）</p>

<p>当然这是无损压缩，不影响质量。</p>

<p><img src="/assets/post_images/compression/image.png" alt="alt text" /></p>

<h3 id="variational-image-compression-with-a-scale-hyperprior">VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR</h3>

<p>传统的 JPEG 是靠数学公式（如 DCT 变换）来死板地处理图像。而这篇文章提出了一种基于<strong>变分自编码器（VAE）</strong>的架构。</p>

<p>编码器（Encoder）：就像是一个“翻译官”，把巨大的原始图像像素转换成一串非常精简的“密码”（潜变量 $y$）。</p>

<p>解码器（Decoder）：根据这串“密码”，尽可能还原出原来的图像。</p>

<p>超先验（Hyperprior）：这是本文核心贡献。作者发现，虽然第一层“密码”已经很小了，但这些密码内部仍然存在规律（空间相关性）。于是他增加了一层“超编码器”（侧枝路），专门用来学习这些密码的规律。这就像是<strong>“为密码编写的密码”</strong>，极大地提高了压缩效率。</p>

<ol>
  <li>主干网络 (The Main Autoencoder)
这是处理图像数据的主力军，负责像素与压缩特征之间的转换。</li>
</ol>

<p>分析变换 $g_a$（编码器）：</p>

<p>输入：$H\times W\times 3$ 的全彩色图像。
结构：由 4 层卷积层组成。每一层都使用了步长（Stride）为 2 的卷积来降低分辨率，同时增加通道数。
激活函数：使用了作者之前提出的 GDN (Generalized Divisive Normalization)。这是神经压缩的特有激活函数，模仿了生物神经元的抑制机制，非常擅长去除图像的局部相关性。
输出：潜变量 $y$。其空间尺寸只有原图的 $1/16 \times 1/16$，但通道数很多（通常是 128 或 192）。</p>

<p>合成变换 $g_s$（解码器）：</p>

<p>结构：$g_a$ 的镜像。使用反卷积（Transpose Convolution）逐步恢复图像尺寸。
激活函数：使用逆 GDN (IGDN)。
输出：重建图像 $\hat{x}$。</p>

<ol>
  <li>超先验网络 (The Hyperprior Network)
这是本文最精华的“第二层自编码器”，它不处理像素，只处理 $y$。</li>
</ol>

<p>超分析变换 $h_a$：</p>

<p>输入：主编码器的输出 $y$（取绝对值后输入，因为它只关心 $y$ 的分布幅度）。
结构：3 层简单的卷积层。进一步缩小尺寸。
输出：超潜变量 $z$。这是图像中最重要的“特征的特征”。</p>

<p>超合成变换 $h_s$：</p>

<p>输入：经过量化后的 $\hat{z}$。
输出：尺度参数 $\hat{\sigma}$。
关键点：$\hat{\sigma}$ 的尺寸与 $y$ 完全一致。它为 $y$ 的每一个元素都提供了一个对应的标准差估计。</p>

<ol>
  <li>架构的运行逻辑：如何协同工作？
这个架构的精妙之处在于它是一个闭环系统：</li>
</ol>

<p>压缩阶段：图像经过 $g_a$ 变成 $y$；同时 $y$ 经过 $h_a$ 变成 $z$。我们先对 $z$ 进行无损压缩（它很小，作为侧信息发送）；然后根据 $z$ 解出的 $\hat{\sigma}$，对 $y$ 进行极度高效的压缩。
解压阶段：接收方先解码出 $z$，通过 $h_s$ 拿到情报 $\hat{\sigma}$；有了情报，就能正确解码出 $y$；最后通过 $g_s$ 还原出图像。</p>

<p>当然仔细看的话，这篇论文是基于“VAE”来做的，和JPEG有一定区别：</p>

<p>传统的VAE：
<img src="/assets/post_images/compression/6d7b9a55-1eac-44bd-99ce-d0f414397482.png" alt="alt text" /></p>

<p>本文架构：
<img src="/assets/post_images/compression/7171867c-9a48-4d47-ba79-f17962b63be2.png" alt="alt text" /></p>

<h3 id="joint-autoregressive-and-hierarchical-priors-for-learned-image-compression">Joint Autoregressive and Hierarchical Priors for Learned Image Compression</h3>

<p>学习式的图像压缩方法通常使用自动编码器架构将图像转换为潜在表示，然后可以对其进行量化和熵编码。熵编码的效率取决于对潜在表示的概率分布建模的准确性。早期方法使用简单的、完全分解的熵模型，假设潜在变量之间相互独立。
最近的工作探索了分层模型，其中使用超先验来捕获潜在元素之间的空间依赖性。另外，自回归模型在生成建模中通过将每个元素都基于先前生成的元素进行条件化而取得了成功。然而，当单独使用这些方法时，它们存在局限性：</p>

<p>分层先验可以捕获全局结构，但会遗漏局部相关性
自回归模型可以很好地建模局部依赖性，但在长程依赖性方面表现不佳
自回归模型还会引入解码中的序列依赖性，影响性能</p>

<p>这项研究的关键见解是，这两种类型的先验可以相互补充。通过结合它们，模型可以同时利用来自超先验的全局信息和来自自回归上下文模型的局部依赖性。</p>

<p>模型架构
所提出的架构由几个关键组件组成：</p>

<p>主自动编码器：将输入图像转换为潜在表示（编码器），并从潜在表示中重建图像（解码器）。</p>

<p>超先验网络：由超编码器和超解码器组成。超编码器将潜在表示压缩为超潜在表示，这些超潜在表示也被量化和熵编码。超解码器重建熵模型的参数。</p>

<p>上下文模型：一个自回归模型，根据空间邻域中先前解码的元素预测每个潜在元素的分布。</p>

<p>熵参数网络：结合来自超先验和上下文模型的信息，生成条件高斯混合模型（GMM）的参数。</p>

<p>算术编码：根据熵模型对量化后的潜在表示进行压缩，以便存储或传输。</p>

<p>组合模型的操作如下：</p>

<p>编码器将输入图像转换为潜在表示。
超编码器进一步压缩潜在表示以创建超潜在表示。
超潜在表示被量化、熵编码并首先传输。
超解码器重建熵模型的参数。
在解码过程中，使用超先验信息和来自先前解码元素的上下文来顺序解码元素。
解码器从解码后的潜在表示重建最终图像。</p>

<p><img src="/assets/post_images/compression/82f78fcf-1ab9-415b-833f-d2a6e656f1f9.png" alt="alt text" /></p>

<p>这篇文章的核心就是在之前的那个超先验模型的基础上，增加了一个上下文模型。上下文模型可以捕获局部依赖性，而超先验可以捕获全局依赖性。作者认为，这两个模型可以相互补充，以更好地捕获图像的全局和局部依赖性。
<img src="/assets/post_images/compression/038f40b0-8ad6-4ec6-877e-ef6acddaacad.png" alt="alt text" /></p>

<h3 id="learned-image-compression-with-mixed-transformer-cnn-architectures">Learned Image Compression with Mixed Transformer-CNN Architectures</h3>

<p>这篇文章的作者提出了一个混合的Transformer-CNN架构，它结合了Transformer和CNN的优点。</p>

<p>它们主要使用基于CNN或基于Transformer的架构，但未能有效地结合两者。CNN擅长捕获局部空间特征和精细细节，而Transformer则在建模长距离依赖和全局上下文方面表现出色。本研究解决了这个关键问题：我们如何有效地融合这些互补能力以实现卓越的压缩性能？</p>

<p>现有方法中的两个主要挑战：</p>

<p>架构限制：大多数方法未能同时利用局部和非局部建模能力。
熵建模效率低下：当前用于熵模型的注意力机制要么计算成本高昂，要么范围有限。</p>

<p>技术方法
所提出的方法建立在变分自编码器（VAE）框架之上，并具有两项关键创新：Transformer-CNN混合（TCM）块和用于熵建模的参数高效注意力机制。</p>

<p><img src="/assets/post_images/compression/image-2.png" alt="alt text" /></p>

<p>TCM
<img src="/assets/post_images/compression/859adaed-b7f2-4001-9776-f9d881312a75.png" alt="alt text" /></p>

<p>Swin Transformer(SWAtten)</p>

<p><img src="/assets/post_images/compression/280cbf6a-47af-406b-bb6c-dc2a7df0896a.png" alt="alt text" /></p>

<p>未完待续……</p>]]></content><author><name>Jam Y</name></author><category term="CV" /><category term="Compression" /><category term="Learning" /><summary type="html"><![CDATA[本文记录笔者学习图像压缩编码相关知识的notes.]]></summary></entry><entry><title type="html">NeRF Learning</title><link href="https://j-am-ack.github.io/blog/2025/11/14/NeRF-learning/" rel="alternate" type="text/html" title="NeRF Learning" /><published>2025-11-14T12:00:01+00:00</published><updated>2025-11-14T12:00:01+00:00</updated><id>https://j-am-ack.github.io/blog/2025/11/14/NeRF-learning</id><content type="html" xml:base="https://j-am-ack.github.io/blog/2025/11/14/NeRF-learning/"><![CDATA[<h2 id="nerf-learning">NeRF Learning</h2>
<h4 id="2025-11-14-updated-on-2025-11-27">2025-11-14, updated on 2025-11-27</h4>

<h3 id="introduction">Introduction</h3>

<p>笔者将在这篇博客中记录学习NeRF以及NeRF-SR等相关知识（持续更新）的一些笔记，欢迎一起讨论~</p>

<h3 id="0nerf-basic">0.NeRF Basic</h3>
<p>NeRF的全称是Neural Radiance Field（神经辐射场），是一种基于神经网络的渲染方法，其主要目标任务是“新视角合成”。
它的核心思想大致可概述为用一个MLP（全连层而非卷积，加上激活层）神经网络去隐式地学习一个静态3D场景，实现复杂场景的任意新视角合成（渲染）。
NeRF使用多视角的数据进行训练，空间中目标位置具有更高的密度和更准确的颜色，促使神经网络预测一个连续性更好的场景模型。
以任意的相机位置+朝向作为输入，经过训练好的神经网络进行体渲染（Volume Rendering），就可以得到任意视角的图片。</p>

<p><img src="/assets/post_images/nerf_1.png" alt="demonstration" /></p>

<h4 id="00-图形学基础">0.0 图形学基础</h4>

<p>给出一个理解角度：NeRF 模型的输出可以看作某条 Ray 上面的一个点, 对这条 Ray 的所有的点做积分, 可以得到相应 Pixel 的 RGB 值。
<img src="/assets/post_images/nerf_2.png" alt="Ray" />
具体言之，先用 NeRF 找到箭头与 Volume Data (就是 3D 物体) 的若干个交点, 然后对这些交点做积分 
而这个ray是什么呢？实际上就是我们的“眼睛”或者说相机“发出”（实际是接受）的光</p>

<p>那么我们怎么描述这个射线呢？</p>

<p>除了相机/眼睛的三维位置外，我们还需要两个量来描述相机的视角，即角度：inclination 倾角 和 azimuth 方位角
<img src="/assets/post_images/nerf_3.png" alt="5D" /></p>

<p>而这每一条Ray都对应我们最后要渲染出来的一个像素，于是自然有：
如果你最终要生成的图片大小是 $H \times W$，, 那么就有 $H \times W$ 条 Ray 从 相机 (你的眼睛) 射出。</p>

<p>下面对每一条ray进行描述：
 一条 Ray 可以用它的起点 $ v_0 $和终点 $ v_d$ (这个不是真正的终点, 因为理论上 Ray 可以无限延伸) 描述</p>

<p>起点肯定就是相机 (你的眼睛), 
终点就是一个能够指示方向的单位向量</p>

<p>于是ray上任意一点就可表示为
\(P = v_0 + t * v_d\)</p>

<p>其中t是任意的实数,采样点也就是选不同的t</p>

<p>那么渲染具体是怎么实现？</p>

<p>我们尝试看一看理解NeRF的数据集组织：
首先, 我们引入几个概念</p>

<p>全局坐标参考系 (World Coordinate Frame)<br />
相机坐标参考系 (Camera Coordinate Frame)<br />
坐标变换 (Coordinate Transformation)<br />
投影变换 (Projection Transformation)</p>

<p>全局一般就是物理世界的尺度，一般不会变
相机坐标参考系, 是针对相机的某个位置而言的. 对于同一个 3D 物体,可以从不同的角度去拍它, 那么自然一旦相机的位置 (pose) 发生改变, 相机坐标参考系也会变化</p>

<p>那么同一个点在不同的坐标参考系下肯定是表示不同，我们需要通过“坐标变换”来构建一个映射关系
转换可以写成一个数学公式：
\(X_c = R \times (X_w - C_w)\)</p>

<p>R是一个3x3的旋转矩阵, $C_w$是相机在全局坐标系中的位置, $X_w$是全局坐标系下的点</p>

<p><img src="/assets/post_images/nerf_4.png" alt="alt text" /></p>

<p>那么我们肯定就是要在数据集里面刻画好这个四维的转换矩阵：
<img src="/assets/post_images/nerf_4.png" alt="alt text" /></p>

<p>我们如果称变换前的坐标系叫做 “旧坐标系”, 变换后的坐标系叫做 “新坐标系”</p>

<p>对于这个新的四维矩阵，我们还有一个性质必须要说明：
<img src="/assets/post_images/nerf_5.png" alt="矩阵中的性质" />
这里面的前三列, 分别表示 新坐标系 (红的是 x 轴, 紫的是 y 轴, 黄的是 z 轴) 在旧坐标系中的方向, 最后一列 (绿色) 是 新坐标系原点在旧坐标系中的位置.</p>

<p>我们先画个示意图简化讨论这个问题：
P（C）是3D物体上的某个点，A是相机的位置，C’是我们希望刻画的2维的image plane上的点</p>

<p><img src="/assets/post_images/nerf_6.png" alt="图6" /></p>

<p>那么我们想要刻画的就是C’（xi,yi）</p>

<p>我们有B’A = focal length，记为f
假设相机参考系：
P：（X,Y,Z）</p>

<p>那么C’的坐标可以表示为：</p>

\[C'_x = (X/Z)\times f\]

\[C'_y = (Y/Z) \times f\]

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>if not os.path.exists('tiny_nerf_data.npz'):
  !wget http://cseweb.ucsd.edu/~viscomp/projects/LF/papers/ECCV20/nerf/tiny_nerf_data.npz

data = np.load('tiny_nerf_data.npz')
images = data['images']
poses = data['poses']
focal = data['focal']

</code></pre></div></div>
<p>这里可以看到实际代码中数据集的组织
images, 就是从各个角度拍的 2D 图片
poses, 就是代表相机的位置及角度,具体说就是我们刚才说的这个四维变换矩阵
focal, 就是前面讲过的 focal length f</p>

<p>那么再由我们刚才提到的特殊性质，我们自然有最后一列就是 相机位置 (在全局坐标参考系中). 然后第三列就是 相机的角度 (因为第三列是相机坐标系的 z 轴, 而相机都是沿着 z 轴拍摄的)</p>

<p>可视化出相机方向大概就这样：
<img src="/assets/post_images/nerf_7.png" alt="alt text" /></p>

<p>最后有了以上的推导，我们就可以刻画出Ray了</p>

<p>我们首先引入第三个参考系：</p>

<p>图片坐标参考系 (Image Plane Coordinate Frame)</p>

<p>首先, 这个图片坐标参考系是二维的, [注意 Image Plane 的左上角的像素位置设为 (0, 0)]</p>

<p>其次, 他其实就是 相机坐标参考系 的退化版, 相当于 相机坐标参考系 去掉了 z 轴.</p>

<p>我们知道, 画一个 Ray 其实很简单, 那就是</p>

<p>1) 找到一个 Image Plane 上的像素点; 
2) 找到 相机 (你的眼睛) 原点; 
3) 把这两个点连线.</p>

<p>假设某个像素点的位置是 (i, j) , 那么他在 相机坐标参考系 中的位置是 (i - width<em>0.5, j - height</em>0.5) [因为相机坐标参考系的 z 轴正好穿过 Image Plane 的中点]</p>

<p>那么这个 Ray 的方向就是：</p>

\[((i - width*0.5) / \text{focal_length}, (j - height*0.5) / \text{focal_length},  -1)\]

<p>也是上面图6的α</p>

<p>注意到, 我们刚刚求出来的方向, 是在相机坐标参考系求的, 我们还要把它转到全局坐标参考系中, 那就是直接 ×转换矩阵</p>

<p>而Ray的原点实际上我们也讨论过了，就是转换矩阵的最后一列前三行</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>directions = torch.stack([(i - width * .5) / focal_length,
                            -(j - height * .5) / focal_length,
                            -torch.ones_like(i) 
                           ], dim=-1)  # 在相机坐标参考系中的方向

  
rays_d = torch.sum(directions[..., None, :] * c2w[:3, :3], dim=-1) # 在全局坐标参考系中的方向

  
rays_o = c2w[:3, -1].expand(rays_d.shape)                          # 在全局坐标参考系 中的 相机/Ray 原点
</code></pre></div></div>

<p>有了Ray，下一步就是采样上面的点：
NeRF 的关键在于找到 Ray 和 Volume Data (就是 3D 物体) 之间的交点, 然后对这些交点的（R,G,B,$\sigma$）做积分. 这里的 $\sigma$ 就是这个点的”透明度”）做积分.</p>

<p>没有3D模型的话我们不能直接找到这些点
NeRF 采用的方式是 “试”</p>

<p>先随机的沿着当前 Ray 采样一堆点, 然后我带入到 NeRF 中, 如果某个点的$\alpha = 0 $, 那么说明这个点不是交点, 反之就是.</p>
<blockquote>
  <p>这里感觉还是不太清晰（，为啥α是0啊，欢迎comment</p>
</blockquote>

<p>\(P = v_0 + l * v_d\)
所以我们沿着Ray找点无非是试不同的l</p>

<p>采样方法：
比如均匀采样 (Stratified Sampling), 就是均匀的试不同的l
另外也有一些方法, 比如在均匀采样的基础上加上一些 perturbation（扰动）.</p>

<p>另外, 因为我们肯定是只能采样有限个点, 那么一般会确定一个最大和最小的 near &lt; l &lt; far</p>

<p>像原 NeRF 论文中, near = 2, far = 6.</p>

<h4 id="01-原始nerf-整体架构和做法">0.1 原始NeRF 整体架构和做法</h4>
<p>有了图形学原理，我们就知道了NeRF是怎么采样和利用、组织数据的，下面看下NeRF的架构和设计</p>

<p>这篇2020的工作实际上在网络结构上非常简单粗暴，就是全连接层
<img src="/assets/post_images/nerf_8.png" alt="alt text" /></p>

<p><img src="/assets/post_images/nerf_9.png" alt="alt text" /></p>

<h3 id="1-nerf">1 NeRF</h3>

<p>这部分可能不会写的特别完全（NeRF后续的一些变种之类），可能还是先focus2020年这一篇工作中提到的一些技术和主观结果，毕竟精力有限qwq）</p>

<p>在开始之前，回到原论文，总结一下我们刚才得到了什么：</p>

<p><img src="/assets/post_images/nerf_10.png" alt="alt text" />
也即我们可以看到原论文的理论是用一个Ray上的积分式来计算最后渲染出来的位置颜色到底应该是什么,本质是<strong>“把射线穿过的所有3D点的颜色，按‘到达该点的概率（( T(t) )）’和‘该点的贡献权重（( \sigma )）’加权后，累加得到最终2D像素的颜色”</strong></p>

<p>(当然回看原论文中的推导，这些符号还是有点恶心qaq（主要是很难找一个合适的翻译和对应）)</p>

<table>
  <thead>
    <tr>
      <th>符号</th>
      <th>名称/含义</th>
      <th>解释</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>( t_n )</td>
      <td>就是积分开始的地方，最接近照相机的位置</td>
      <td>射线进入场景的起始位置对应的参数（比( t_n )小的区域不在场景内）</td>
    </tr>
    <tr>
      <td>( t_f )</td>
      <td>积分终点</td>
      <td>射线离开场景的终止位置对应的参数（比( t_f )大的区域不在场景内）</td>
    </tr>
    <tr>
      <td>( t )</td>
      <td>被积的量，射线的<strong>参数变量</strong></td>
      <td>描述射线沿方向延伸的距离，对应空间位置( \mathbf{r}(t) = \mathbf{o} + t\mathbf{d} )（( \mathbf{o} )是相机位置，( \mathbf{d} )是射线方向）</td>
    </tr>
    <tr>
      <td>( T(t) )</td>
      <td><strong>透射率</strong>（Transmittance）</td>
      <td>射线从近裁剪面( t_n )传播到位置( t )时，<strong>未被任何粒子阻挡的概率</strong>（取值0~1）</td>
    </tr>
    <tr>
      <td>( \sigma(\mathbf{r}(t)) )</td>
      <td><strong>体积密度</strong>（Volume Density）</td>
      <td>空间位置( \mathbf{r}(t) )处的“不透明度程度”：射线在该点被粒子阻挡的<strong>微分概率</strong>（( \sigma )越大，该位置越“实”）</td>
    </tr>
    <tr>
      <td>( \mathbf{c}(\mathbf{r}(t), \mathbf{d}) )</td>
      <td><strong>方向辐射亮度</strong>（Directional Radiance，就是某个点的RGB）</td>
      <td>空间位置( \mathbf{r}(t) )处、沿射线方向( \mathbf{d} )（相机视角）呈现的<strong>颜色值</strong>（RGB三通道向量）</td>
    </tr>
  </tbody>
</table>

<p>我们主要再来解释一下T(x)吧，这个被一些人翻译为“透射率”，是用我们之前提到的透明度$\sigma$来计算的：
<img src="/assets/post_images/nerf_11.png" alt="alt text" /></p>

<p>（其实从上面每个量的含义大致能猜到T(t)会是用 $\sigma$ 积出来）</p>

<p>当然上面只是理论值，是理想情况下的，实际中不可能做到连续的采样，而是使用离散的采样点：
<img src="/assets/post_images/nerf_12.png" alt="alt text" /></p>

<p><img src="/assets/post_images/nerf_13.png" alt="alt text" /></p>

<p>其中 $\delta_j = t_{i+1} - t_i$ 即采样间隔。$\exp(-\sigma_i \delta_i)$ 表示在第 $i$ 个点没有碰上粒子的概率，所以 $(1 - \exp(-\sigma_i \delta_i))$ 表示在该处碰到粒子的概率。</p>

<h4 id="11-nerf的一些trick">1.1 NeRF的一些trick</h4>

<h5 id="111-positional-encoding">1.1.1 Positional encoding</h5>
<p>作者实验发现，</p>
<ol>
  <li>MLP倾向于学习低频信息，而导致在渲染表示颜色和几何图形的高频变化方面表现得很差。</li>
  <li>在将输入传递到网络之前，使用高频函数将输入映射到更高维空间，可以更好地拟合包含高频变化的数据。</li>
</ol>

<p>所以引入“位置编码”，它的核心就是“高频特征的放大器”</p>

<p>公式是：
[ \gamma(p) = \left( \sin(2^0 \pi p), \cos(2^0 \pi p), \dots, \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p) \right) ]</p>

<ul>
  <li><strong>( p )</strong>：
表示要编码的<strong>原始输入变量</strong>——在NeRF里，( p )有两种：
    <ul>
      <li>一种是<strong>3D空间位置 ( \mathbf{x} = (x,y,z) )</strong>（描述场景里的某个点）；</li>
      <li>另一种是<strong>观察方向 ( \mathbf{d} = (d_x,d_y,d_z) )</strong>（描述相机看这个点的角度）。</li>
    </ul>
  </li>
  <li>
    <p><strong>( 2^k \pi p )（( k从0到L-1 )）</strong>：
这是<strong>不同频率的“震荡因子”</strong>——( 2^k )是“频率缩放”：( k=0 )对应最低频（变化最慢）
用不同频率的函数，是为了让编码能覆盖“从低频到高频”的所有细节。</p>
  </li>
  <li><strong>( \sin(\dots)、\cos(\dots) )</strong>：<strong>周期性的高频函数</strong>，能把原始输入的细微差异，转化为高维空间里的“独特特征”（比如两个相邻的3D点，编码后会有明显的高维向量差异）。</li>
</ul>

<p>实际用法</p>
<ul>
  <li>对3D位置 ( \mathbf{x} )：取 ( L=10 )
3D位置是3维向量，每个维度要做 ( L=10 ) 组“sin+cos”编码，所以编码后维度是：( 3 \times 2 \times 10 = 60 ) 维。</li>
  <li>对观察方向 ( \mathbf{d} )：取 ( L=4 )
观察方向是3维单位向量，编码后维度是：( 3 \times 2 \times 4 = 24 ) 维。</li>
</ul>

<p>“先编码，再进MLP”：
[ F_\Theta = F’<em>\Theta \circ \gamma ]
意思是：先把原始的3D位置+观察方向，用 ( \gamma )（位置编码）转换成高维向量（60+24=84维），再输入到MLP（( F’</em>\Theta )）里，让MLP能学到高频细节（比如纹理、边缘）。</p>

<p>用不同频率的正余弦函数，把低维的位置/方向，映射成高维向量</p>

<h5 id="112-分层采样">1.1.2 分层采样</h5>

<p>分层采样的核心是“<strong>分区间+区间内随机</strong>”，步骤如下：</p>
<ol>
  <li><strong>划分区间</strong>：把射线的t范围（从近裁剪面( t_n )到远裁剪面( t_f )），均匀分成( N )个等宽的小区间：
第( i )个区间的范围是：( \left[ t_n + \frac{i-1}{N}(t_f - t_n),\ t_n + \frac{i}{N}(t_f - t_n) \right] )</li>
  <li><strong>区间内随机采样</strong>：在每个小区间里，<strong>随机选一个点</strong>作为采样点( t_i )，公式是：
[ t_i \sim \mathcal{U}\left[ t_n + \frac{i-1}{N}(t_f - t_n),\ t_n + \frac{i}{N}(t_f - t_n) \right] ]
（( \mathcal{U} )表示“均匀随机”，意思是这个区间里每个位置被选中的概率一样）
经过以上，我们能得到一个粗的采样；
之后我们权重归一化后用“逆变换”进行第二组采样，得到fine（相当于我们希望在“重要‘位置多采</li>
</ol>

<p><img src="/assets/post_images/nerf_14.png" alt="alt text" /></p>

<p>先coarse，再fine:在第一组和第二组采样的并集处评估我们的“精细”网络</p>

<p>当然，粗采样也作为输出图片</p>

<p>分层采样的优势：</p>
<ol>
  <li><strong>覆盖性好</strong>：把射线分成N个区间，每个区间都有一个样本，不会漏掉某段区域的场景信息；</li>
  <li><strong>避免离散偏差</strong>：区间内随机采样，让MLP在优化时能接触到<strong>连续的空间位置</strong>（不是固定点），从而学会表示连续的场景（比如精细纹理）；</li>
  <li><strong>效率高</strong>：每个区间只采1个点，N不用特别大就能兼顾精度和速度。</li>
</ol>

<h5 id="113-loss">1.1.3 loss</h5>

<p><img src="/assets/post_images/nerf_15.png" alt="alt text" /></p>

<p><img src="/assets/post_images/nerf_16.png" alt="alt text" /></p>

<h4 id="12-nerf的一些results">1.2 NeRF的一些results</h4>

<p><img src="/assets/post_images/nerf_17.png" alt="alt text" /></p>

<h3 id="2-nerf-sr">2 NeRF-SR</h3>

<p><img src="/assets/post_images/nerf_18.png" alt="alt text" /></p>
<h4 id="21-super-sampling">2.1 Super Sampling</h4>

<p>一般的NeRF都达不到Nyquist sampling rate(就是观察视角的有限决定了其无法满足监督的要求)，只能通过插值的方法来补充。</p>

<p>作者的超采样分为两种含义，一个是每个像素的超采样，即使用亚像素的方式将每个像素所占有的面积进行分割，分别进行color的预测，属于scale上的扩展；二是不同角度的扩展.
（tips：实际上，用Blender渲染就不会出现这个问题。渲染可以提供所有视角所有scale的监督图像。）</p>

<p><img src="/assets/post_images/nerf_19.png" alt="alt text" />
超采样策略将一个像素（实线）分割为多个子像素（虚线），并为每个子像素绘制一条射线。因此，与普通的NeRF相比，场景中更多的3D点可以被对应和约束。</p>

<p>超采样充分利用了NeRF引入的交叉视图一致性(cross-view consistency)到亚像素级(sub-pixel level)，即一个位置可以通过多个视点进行对应。虽然NeRF对每个像素只拍摄一条射线，并优化了该射线上的点，但超采样限制了三维空间中更多的位置，更好地利用了输入图像中的多视图信息。换句话说，超级采样直接在训练时优化了一个更密集的辐射场。</p>

<p>优化后要对应调整监督的MSE-loss，适配监督图像的大小
<img src="/assets/post_images/nerf_20.png" alt="alt text" /></p>

<blockquote>

  <p>关于这部分看到的一个锐评（</p>

  <p>感觉有些多此一举，大可以直接用光线的数量多少来做，何必非得在物理上划分成子块。或者我一开始就用子块大小的规模作为我的像素块就得了</p>

</blockquote>

<h4 id="22-patch-based-refinement">2.2 Patch-based Refinement</h4>
<p>当一个场景的图像没有足够的亚像素对应时，超采样的结果无法找到足够的细节来进行高分辨率的合成。因此，作者提出了Patch-Based Refinement 网络来恢复高频细节，旨在将参考图像的细节融合到NeRF合成的模型-图像中。基本就是在渲染合成的图像的基础上再加一个Unet网络，将渲染图像的patch作为输入，以对应的参考图像的patch作为监督。
<img src="/assets/post_images/nerf_21.png" alt="alt text" /></p>

<p>训练和测试时一些patch细节，暂且略过）（测试好像需要扭曲SR图像来对应reference）</p>

<h4 id="23-experiments">2.3 experiments</h4>

<p><img src="/assets/post_images/nerf_22.png" alt="alt text" /></p>

<blockquote>
  <p>还是小小锐评一下，感觉NeRF-SR这个工作好像更多就是借用了渲染数据的增加（亚像素）来提升了分辨率，在理论上似乎没有特别值得mark的insight （？ qwq
欢迎comment讨论</p>
</blockquote>

<h3 id="3-disr-nerf">3 DiSR-NeRF</h3>

<p>该论文介绍了一种名为 DiSR-NeRF 的扩散引导框架，用于视图一致的超分辨率 NeRF（神经辐射场）。其核心创新点在于利用强大的2D超分辨率模型，而无需依赖于高分辨率参考图像。该方法解决了低分辨率图像在不同视角之间存在的不一致性，通过引入迭代 3D 同步 (I3DS) 的策略，利用 NeRF 的多视图一致性特性，改善图像质量。</p>

<h4 id="31-i3dsiterative-3d-synchronization">3.1 I3DS：Iterative 3D Synchronization</h4>

<p>I3DS 分为两个阶段：上采样阶段和同步阶段。在上采样阶段，来自低分辨率 NeRF 渲染的图像通过扩散模型进行放大；在同步阶段，这些经过上采样的图像则用于更新3D表示。该过程交替进行，以引导模型收敛到一致的细节。</p>

<p>具体而言，在上采样阶段，首先对低分辨率图像进行4倍的放大。然后，通过标准的 NeRF 训练程序更新 NeRF 参数，同时进行多视图采样。这样的话，某个视图的细节信息能够在所有视角中得以统一。</p>

<h4 id="32-rsdrenoised-score-distillation">3.2 RSD：Renoised Score Distillation</h4>

<p>RSD 是一种本文提出的一种新的分数蒸馏目标，旨在结合使用祖先采样和评分蒸馏采样（SDS）的取长补短。RSD 通过优化过程中的中间去噪潜变量，逐步生成高分辨率图像。该过程通过一个线性递减的时间调度展开，逐步构建细节。
一方面，RSD 能够生成更锋利的细节；另一方面，它也能够保持与条件低分辨率图像的一致性。通过这种方式，RSD在各种细节方面都能显著提高性能，相较于传统的祖先采样法更具优势。</p>

<h3 id="reference">Reference</h3>

<p>1.<a href="https://arxiv.org/abs/2003.08934"> Ben Mildenhall, Pratul P Srinivasan, Matthew Tancik, Jonathan T Barron, Ravi Ramamoorthi, and Ren Ng. 2020. Nerf: Representing scenes as neural radiance fields for view synthesis. In European conference on computer vision.</a></p>

<p>2.<a href="https://arxiv.org/abs/2112.01759"> Wang, Chen, et al. “NeRF-SR: High quality neural radiance fields using supersampling.” In proceedings of ACM International Conference on Multimedia (ACM MM). 2022. </a></p>]]></content><author><name>Jam Y</name></author><category term="CV" /><category term="NeRF" /><category term="Learning" /><category term="SR" /><summary type="html"><![CDATA[NeRF Learning 2025-11-14, updated on 2025-11-27]]></summary></entry><entry><title type="html">Image Quality Assessment Learning</title><link href="https://j-am-ack.github.io/blog/2025/09/03/IQA_learning/" rel="alternate" type="text/html" title="Image Quality Assessment Learning" /><published>2025-09-03T08:46:01+00:00</published><updated>2025-09-03T08:46:01+00:00</updated><id>https://j-am-ack.github.io/blog/2025/09/03/IQA_learning</id><content type="html" xml:base="https://j-am-ack.github.io/blog/2025/09/03/IQA_learning/"><![CDATA[<h2 id="iqa-learning">IQA Learning</h2>
<h4 id="2025-09-03">2025-09-03</h4>

<h3 id="introduction">Introduction</h3>
<p>这是笔者学习图像质量评价的指标（Image Quality Assessment，IQA）的笔记，这份笔记可能后续还会更新，期望的是汇总目前Computer Vision领域的IQA metrics，希望能够详细介绍它们的定义、算法、应用场景等等。</p>

<h2 id="metrics">Metrics</h2>
<p>理论上，如果严格完整来说，应该首先分为主观评测指标和客观评测指标；主观评价指标大抵意思是找人来为图像质量打分，然后算均值之类；不适用于大规模快速的算法评判，在此先略过不表；</p>

<p>略举一例：</p>
<ol>
  <li><strong>招募观察者</strong>：通常需10-20名无视觉障碍的观察者，避免专业背景偏差。</li>
  <li><strong>制定评分标准</strong>：采用国际通用的5分制（ITU-T P.910标准）：
    <ul>
      <li>5分（Excellent）：无任何可察觉的失真，质量极佳；</li>
      <li>4分（Good）：有轻微可察觉的失真，但不影响整体质量；</li>
      <li>3分（Fair）：失真明显，但仍可接受；</li>
      <li>2分（Poor）：失真严重，影响使用；</li>
      <li>1分（Bad）：失真极严重，完全无法使用。</li>
    </ul>
  </li>
  <li><strong>统计MOS</strong>：对所有观察者的打分取算术平均，公式为：<br />
\(MOS = \frac{1}{N} \sum_{i=1}^N s_i\)<br />
其中，$N$ 为观察者数量，$s_i$ 为第 $i$ 名观察者的打分。</li>
</ol>

<p>主要下面讨论若干常用的客观评测指标。</p>

<p>（一） 全参考FR-IQA</p>
<h3 id="psnr">PSNR</h3>
<p>峰值信噪比（Peak Signal-to-Noise Ratio, PSNR）</p>

<h4 id="overview">overview</h4>
<p>概括来说：相当于就是像素级的</p>

<h5 id="1核心用途">（1）核心用途</h5>
<p>最经典、最常用的FR-IQA指标，广泛用于图像压缩（如JPEG）、视频编码（如H.264/H.265）的失真评估。</p>

<h5 id="2核心思想">（2）核心思想</h5>
<p>基于“信号与噪声的比值”：将失真视为“噪声”，参考图视为“信号”，PSNR越高，说明“信号占比越高，噪声（失真）越少”。</p>

<h5 id="3计算方法">（3）计算方法</h5>
<p>步骤1：计算<strong>均方误差（MSE）</strong>：衡量参考图与失真图的像素差异，公式为：<br />
\(MSE = \frac{1}{H \times W \times C} \sum_{x=1}^H \sum_{y=1}^W \sum_{c=1}^C (I(x,y,c) - J(x,y,c))^2\)<br />
其中，$H/W/C$ 分别为图像的高度、宽度、通道数（如RGB图像$C=3$），$I$ 为参考图，$J$ 为失真图，$(x,y,c)$ 为像素坐标。</p>

<p>步骤2：计算PSNR：基于MSE，引入“峰值像素值（MAX_I）”（如8位图像MAX_I=255），公式为：<br />
\(PSNR = 10 \times \log_{10}\left( \frac{MAX_I^2}{MSE} \right)\)<br />
单位：分贝（dB），值越大表示质量越好（通常合格范围：25-35dB，&gt;35dB接近无失真）。</p>

<h5 id="4优缺点">（4）优缺点</h5>
<ul>
  <li><strong>优点</strong>：计算简单、速度快，可解释性强；</li>
  <li><strong>缺点</strong>：仅关注像素级差异，与人类主观感知一致性差（例：PSNR高的图像可能因模糊/块效应让人生理不适，PSNR低的图像可能主观感受更清晰）。</li>
</ul>

<h3 id="ssim">SSIM</h3>
<p>结构相似性指数（Structural Similarity Index, SSIM）</p>
<h5 id="1核心用途-1">（1）核心用途</h5>
<p>解决PSNR“像素优先、结构忽略”的缺陷，更贴合人类视觉对“图像结构”的敏感度（如边缘、纹理），适用于图像去噪、超分辨率、风格迁移的质量评估。</p>

<h5 id="2核心思想-1">（2）核心思想</h5>
<p>人类视觉更关注“图像的结构信息”（而非单个像素），SSIM从<strong>亮度（Luminance）</strong>、<strong>对比度（Contrast）</strong>、<strong>结构（Structure）</strong> 三个维度对比参考图与失真图，三者乘积即为SSIM值。</p>

<h5 id="3计算方法-1">（3）计算方法</h5>
<p>步骤1：局部窗口处理：用高斯窗口（默认大小11×11）滑动遍历图像，避免单像素噪声影响。</p>

<p>步骤2：计算三个核心分量：</p>
<ul>
  <li>
    <p><strong>亮度分量（$l$）</strong>：衡量两图的平均亮度差异，引入常数$C_1$避免分母为0：<br />
\(l(I,J) = \frac{2\mu_I \mu_J + C_1}{\mu_I^2 + \mu_J^2 + C_1}\)<br />
其中，$\mu_I/\mu_J$ 为参考图/失真图在窗口内的均值，$C_1=(K_1 \times MAX_I)^2$（$K_1=0.01$为经验值）。</p>
  </li>
  <li>
    <p><strong>对比度分量（$c$）</strong>：衡量两图的对比度差异，引入常数$C_2$：<br />
\(c(I,J) = \frac{2\sigma_I \sigma_J + C_2}{\sigma_I^2 + \sigma_J^2 + C_2}\)<br />
其中，$\sigma_I/\sigma_J$ 为参考图/失真图在窗口内的标准差，$C_2=(K_2 \times MAX_I)^2$（$K_2=0.03$为经验值）。</p>
  </li>
  <li>
    <p><strong>结构分量（$s$）</strong>：衡量两图的结构相关性，用协方差$\sigma_{IJ}$表示：<br />
\(s(I,J) = \frac{\sigma_{IJ} + C_3}{\sigma_I \sigma_J + C_3}\)<br />
其中，$\sigma_{IJ} = \frac{1}{N-1}\sum_{x,y}(I(x,y)-\mu_I)(J(x,y)-\mu_J)$，$C_3=C_2/2$。</p>
  </li>
</ul>

<p>步骤3：计算SSIM：三个分量的乘积，取值范围$[0,1]$，值越接近1表示质量越好：<br />
\(SSIM(I,J) = l(I,J) \times c(I,J) \times s(I,J)\)</p>

<h5 id="4扩展多尺度ssimms-ssim">（4）扩展：多尺度SSIM（MS-SSIM）</h5>
<p>SSIM仅考虑单尺度结构，MS-SSIM通过<strong>高斯下采样生成多尺度图像</strong>（如5个尺度），在不同尺度下计算SSIM并加权（低频分量权重更高，符合人眼对全局结构的敏感度），进一步提升与主观感知的一致性。</p>

<h5 id="5优缺点">（5）优缺点</h5>
<ul>
  <li><strong>优点</strong>：关注结构信息，与主观感知一致性远优于PSNR；</li>
  <li><strong>缺点</strong>：计算复杂度高于PSNR，对“非结构失真”（如色彩偏移）敏感度较低。</li>
</ul>

<h3 id="vif">VIF</h3>
<p>视觉信息保真度（Visual Information Fidelity）</p>
<h5 id="1核心用途-2">（1）核心用途</h5>
<p>基于“信息论”的FR-IQA指标，模拟人类视觉系统（HVS）的信息传递过程，对“模糊、压缩失真”的评价精度高于SSIM，适用于高精度图像质量评估（如医学图像、专业摄影）。</p>

<h5 id="2核心思想-2">（2）核心思想</h5>
<p>将参考图视为“信息源”，失真图视为“经过噪声干扰的信息接收端”，VIF通过计算“失真图传递给人眼的信息占参考图的比例”来衡量质量——比例越高，质量越好。</p>

<h5 id="3计算方法-2">（3）计算方法</h5>
<p>步骤1：模拟人类视觉系统：用多尺度小波分解（如3个尺度、4个方向）将图像分解为不同频率分量（HVS对不同频率的敏感度不同，高频对细节敏感，低频对全局敏感）。</p>

<p>步骤2：计算信息传递效率：对每个频率分量，假设参考图信号为$X$，失真图信号为$Y=X+N$（$N$为噪声），通过高斯模型估计信号与噪声的功率比（SNR），再计算信息保真度：<br />
\(VIF = \sum_{k} w_k \times \frac{I(X;Y_k)}{I(X;X_k)}\)<br />
其中，$w_k$ 为第$k$个频率分量的权重（贴合HVS敏感度），$I(X;Y_k)$ 为 $X$ 与 $Y_k$ 的互信息（传递的信息），$I(X;X_k)$ 为$X$与自身的互信息（原始信息）。</p>

<p>步骤3：VIF取值范围$[0,1]$，值越接近1表示信息损失越少，质量越好。</p>

<h5 id="4优缺点-1">（4）优缺点</h5>
<ul>
  <li><strong>优点</strong>：与主观感知一致性最优（优于SSIM），能捕捉HVS对不同频率的敏感度；</li>
  <li><strong>缺点</strong>：计算复杂度极高，速度慢，不适用于实时场景。</li>
</ul>

<h3 id="fsim">FSIM</h3>
<p>特征相似性指数（Feature Similarity Index）</p>
<h5 id="1核心用途-3">（1）核心用途</h5>
<p>结合“结构特征”和“相位信息”，对“模糊、旋转、缩放失真”的鲁棒性优于SSIM，适用于图像配准、目标检测中的质量评估。</p>

<h5 id="2核心思想-3">（2）核心思想</h5>
<p>人类视觉对“图像相位”（反映边缘、纹理的位置和结构）的敏感度远高于“幅度”，FSIM通过提取<strong>相位一致性（PC）</strong> 和<strong>梯度幅度（GM）</strong> 两个核心特征，对比参考图与失真图的特征相似性。</p>

<h5 id="3计算方法-3">（3）计算方法</h5>
<p>步骤1：提取相位一致性（PC）：用Log-Gabor滤波器计算图像的相位信息（PC值越高，边缘越清晰）。</p>

<p>步骤2：提取梯度幅度（GM）：用Sobel算子计算图像的梯度（反映像素灰度变化率，GM值越高，纹理越丰富）。</p>

<p>步骤3：计算特征相似性：对PC和GM分别计算相似性（采用与SSIM类似的局部窗口方法），再加权融合：<br />
\(FSIM = \frac{\sum_{x,y} [PC_I(x,y) + PC_J(x,y)] \times S_{GM}(x,y)}{\sum_{x,y} [PC_I(x,y) + PC_J(x,y)]}\)<br />
其中，$S_{GM}$ 为GM的相似性，取值范围$[0,1]$，值越接近1表示质量越好。</p>

<h5 id="4优缺点-2">（4）优缺点</h5>
<ul>
  <li><strong>优点</strong>：对几何失真（旋转、缩放）和模糊失真鲁棒性强；</li>
  <li><strong>缺点</strong>：对噪声敏感，计算复杂度高于SSIM。</li>
</ul>

<h3 id="wadiqam-fr">WADIQAM-FR</h3>
<p>（FR对应全参考）
<strong>核心用途</strong>：针对视频编码、图像压缩等场景的高精度失真评估，尤其适用于对抗性攻击鲁棒性测试。<br />
<strong>核心思想</strong>：</p>
<ul>
  <li>基于孪生CNN网络（权值共享的VGG-like结构），提取参考图与失真图的特征向量。</li>
  <li>引入<strong>加权平均池化</strong>（Weighted Average Patch Aggregation），通过学习每个图像块的权重，动态调整局部失真对全局质量的贡献。</li>
  <li>采用L1损失函数优化，减少对异常值的敏感度，提升低失真区域的评估精度。</li>
</ul>

<p><strong>计算步骤</strong>：</p>
<ol>
  <li><strong>特征提取</strong>：输入图像对经孪生网络提取多尺度特征（如5层卷积输出）。</li>
  <li><strong>特征融合</strong>：将参考图与失真图的特征向量逐元素相减，拼接形成差异特征。</li>
  <li><strong>权重回归</strong>：通过全连接层预测每个图像块的权重（ReLU激活确保非负性）。</li>
  <li><strong>质量聚合</strong>：加权平均各块质量得分，公式为：<br />
\(Q = \frac{\sum_{i=1}^N w_i \cdot q_i}{\sum_{i=1}^N w_i}\)<br />
其中$w_i$为第$i$块的权重，$q_i$为块质量预测值。</li>
</ol>

<p><strong>优缺点</strong>：</p>
<ul>
  <li>优点：在TID2013数据集上PLCC达0.971，显著优于传统FR-IQA（如SSIM的0.959）。</li>
  <li>缺点：计算复杂度较高，需GPU加速。</li>
</ul>

<h3 id="dists">DISTS：</h3>
<p>基于深度学习的图像质量评价指标，基于CNN（深度图像结构与纹理相似性）</p>
<h5 id="1-核心用途">1. 核心用途</h5>
<p>DISTS（Deep Image Structure and Texture Similarity）是<strong>基于深度学习的全参考图像质量指标</strong>，专为解决传统FR-IQA对复杂失真（如GAN生成伪影、轻微几何变形）评估失效的问题设计。其核心优势在于<strong>同时捕捉图像的结构信息（如边缘、轮廓）和纹理细节（如材质、粗糙度）</strong>，与人类主观感知的一致性显著优于SSIM、VIF等传统指标，尤其适用于AI生成图像（如GAN）、超分辨率、图像修复等场景。</p>

<h5 id="2-核心思想">2. 核心思想</h5>
<p>DISTS通过<strong>孪生CNN网络</strong>（权值共享的VGG-16变体）提取参考图与失真图的多尺度特征，结合<strong>结构相似性改进模块</strong>和<strong>纹理感知模块</strong>，动态融合局部与全局信息：</p>
<ul>
  <li><strong>结构相似性</strong>：基于改进的SSIM算法，引入<strong>跨通道注意力机制</strong>，增强对边缘和轮廓的敏感度。</li>
  <li><strong>纹理感知</strong>：通过<strong>局部二值模式（LBP）</strong>和<strong>高斯差分（DoG）</strong>提取纹理特征，量化纹理复杂度和重复性。</li>
  <li><strong>动态加权融合</strong>：通过可学习的权重参数，自动平衡结构与纹理信息对最终质量得分的贡献。</li>
</ul>

<h5 id="3-计算方法">3. 计算方法</h5>
<p><strong>步骤1：特征提取</strong><br />
输入参考图$I_r$和失真图$I_d$，通过孪生CNN提取5层多尺度特征（如Conv1_1到Conv5_1），每层特征图维度为$C \times H \times W$。</p>

<p><strong>步骤2：结构相似性计算</strong><br />
对每层特征图计算结构相似度$S_l$，公式为：<br />
\(S_l = \frac{2\mu_{r,l}\mu_{d,l} + C_1}{(\mu_{r,l}^2 + \mu_{d,l}^2) + C_1} \cdot \frac{2\sigma_{r,l}\sigma_{d,l} + C_2}{(\sigma_{r,l}^2 + \sigma_{d,l}^2) + C_2}\)<br />
其中$\mu_{r,l}/\mu_{d,l}$为参考图/失真图在第$l$层的均值，$\sigma_{r,l}/\sigma_{d,l}$为标准差，$C_1/C_2$为防止分母为0的常数。</p>

<p><strong>步骤3：纹理相似性计算</strong><br />
对每层特征图应用LBP和DoG滤波器，生成纹理响应图$T_l$，计算纹理相似度$T_l$：<br />
\(T_l = \frac{1}{N} \sum_{i=1}^N \left(1 - \frac{|T_{r,l}(i) - T_{d,l}(i)|}{\max(T_{r,l}) - \min(T_{r,l})}\right)\)<br />
其中$N$为像素总数，$T_{r,l}/T_{d,l}$为参考图/失真图的纹理响应值。</p>

<p><strong>步骤4：多尺度融合与加权</strong><br />
将各层结构相似度$S_l$和纹理相似度$T_l$进行加权求和，高层特征（如Conv5_1）权重更高：<br />
\(DISTS = \sum_{l=1}^5 w_l \cdot (S_l + T_l)\)<br />
其中$w_l$通过主观评分数据训练确定，取值范围$[0,1]$，且$\sum w_l = 1$。</p>

<h5 id="4-性能表现">4. 性能表现</h5>
<ul>
  <li><strong>主观一致性</strong>：在TID2013数据集上PLCC（皮尔逊相关系数）达0.971，显著优于SSIM（0.959）和VIF（0.963）。</li>
  <li><strong>抗失真鲁棒性</strong>：对JPEG压缩（质量因子10-90）、高斯模糊（σ=0.5-3.0）、椒盐噪声（密度0.01-0.05）等失真类型的区分度提升20%-30%。</li>
  <li><strong>计算效率</strong>：单张256×256图像评估耗时约120ms（RTX 3090），支持实时视频流质量监控。</li>
</ul>

<h5 id="5-应用场景">5. 应用场景</h5>
<ul>
  <li><strong>AI生成图像评估</strong>：如GAN生成图的伪影检测、风格迁移的细节保留度分析。</li>
  <li><strong>医疗影像处理</strong>：MRI/CT图像的去噪效果评估，对微小病灶的结构完整性敏感度高。</li>
  <li><strong>工业检测</strong>：机械零件表面缺陷识别，结合纹理特征区分划痕与正常纹理。</li>
</ul>

<h5 id="6-优缺点对比">6. 优缺点对比</h5>

<table>
  <thead>
    <tr>
      <th>优势</th>
      <th>局限性</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>同时捕捉结构与纹理信息，贴合人类感知</td>
      <td>依赖预训练CNN模型，需GPU加速</td>
    </tr>
    <tr>
      <td>对几何变形（如旋转、缩放）鲁棒性强</td>
      <td>对色彩偏移、光照变化敏感度较低</td>
    </tr>
    <tr>
      <td>可作为优化目标函数，直接嵌入生成模型</td>
      <td>模型参数规模较大（约50MB）</td>
    </tr>
  </tbody>
</table>

<p>DISTS通过<strong>深度学习+多模态特征融合</strong>，在图像质量评估领域实现了从“像素差异”到“感知理解”的跨越。其结构-纹理双模态设计不仅提升了对复杂失真的检测精度，还为生成模型优化提供了可微分的目标函数。随着生成式AI的普及，DISTS这类贴合人类视觉本质的指标将成为图像质量评估的核心工具，推动计算机视觉从“看得清”向“看得懂”演进。</p>

<p>（二） 半参考图像质量指标（RR-IQA）
仅需<strong>参考图的部分特征（如边缘、纹理统计量）</strong>，无需完整参考图，平衡了FR-IQA的精度和NR-IQA的灵活性，适用于“参考图无法完整获取”的场景（如网络传输中参考图丢包、实时监控视频）。</p>

<h4 id="核心指标基于小波特征的半参考指标以irni为例">核心指标：基于小波特征的半参考指标（以IRNI为例）</h4>
<h5 id="1-核心用途-1">1. 核心用途</h5>
<p>用于图像传输中的失真评估（如卫星图像、监控视频传输），仅需参考图的小波系数统计量，无需传输完整参考图。</p>

<h5 id="2-核心思想-1">2. 核心思想</h5>
<p>参考图的“小波系数统计特征”（如均值、方差、熵）能反映其核心结构，失真会改变这些统计特征，通过对比失真图与参考图的特征差异评估质量。</p>

<h5 id="3-计算方法-1">3. 计算方法</h5>
<p>步骤1：参考端预处理：对参考图进行小波分解（如2级Daubechies小波），提取各频率子带的统计特征（如均值$\mu_r$、方差$\sigma_r$、熵$H_r$），并将这些特征传输到失真端。</p>

<p>步骤2：失真端特征提取：对失真图进行相同的小波分解，提取对应子带的统计特征（$\mu_d$、$\sigma_d$、$H_d$）。</p>

<p>步骤3：计算特征差异：用欧氏距离或余弦相似度衡量两者的特征差异，再映射为质量分数：<br />
\(RR-IQA\ Score = 1 - \frac{\sqrt{(\mu_r-\mu_d)^2 + (\sigma_r-\sigma_d)^2 + (H_r-H_d)^2}}{\sqrt{\mu_r^2 + \sigma_r^2 + H_r^2}}\)<br />
取值范围$[0,1]$，值越接近1表示质量越好。</p>

<h5 id="4-优缺点">4. 优缺点</h5>
<ul>
  <li><strong>优点</strong>：无需完整参考图，减少数据传输量；精度优于NR-IQA；</li>
  <li><strong>缺点</strong>：依赖参考图的特征设计（特征选择不当会导致精度下降），适用场景较窄。</li>
</ul>

<p>（三） 无参考图像质量指标（NR-IQA）
<strong>无需任何参考图</strong>，仅通过分析失真图自身的特征（如自然场景统计、语义结构）评估质量，是最具实用性的指标之一，适用于“无法获取参考图”的场景（如网络图片、监控视频、用户上传内容）。</p>

<h3 id="brisque">BRISQUE</h3>
<p>盲图像质量指数（Blind Image Quality Index）</p>
<h5 id="1核心用途-4">（1）核心用途</h5>
<p>最经典的NR-IQA指标，用于自然图像（如风景、人像）的质量评估，广泛集成于图像编辑软件（如Photoshop）、社交平台（如微信图片压缩评估）。</p>

<h5 id="2核心思想-4">（2）核心思想</h5>
<p>“自然图像具有固定的统计规律”（如局部对比度服从高斯分布），失真会破坏这种规律——BRISQUE通过提取失真图的“自然场景统计（NSS）特征”，用机器学习模型预测质量分数。</p>

<p>（这也是为什么brisque在自然图像上更权威一些，但医学等等专业图就不太好用）</p>

<h5 id="3计算方法-4">（3）计算方法</h5>
<p>步骤1：预处理：对失真图进行<strong>均值减法对比度归一化（MSCN）</strong>，消除光照和全局对比度的影响，提取局部纹理特征：<br />
\(MSCN(x,y) = \frac{I(x,y) - \mu(x,y)}{\sigma(x,y) + C}\)<br />
其中，$\mu(x,y)$ 为局部窗口均值，$\sigma(x,y)$ 为局部窗口标准差，$C$为常数（避免分母为0）。</p>

<p>步骤2：提取NSS特征：计算MSCN系数的统计特征（如均值、方差、偏度、峰度），以及MSCN系数的邻域相关性特征（共36维特征）。</p>

<p>步骤3：质量预测：用训练好的<strong>支持向量回归（SVR）模型</strong>将特征映射为质量分数，取值范围$[0,100]$，分数越高表示质量越好。</p>

<h5 id="4优缺点-3">（4）优缺点</h5>
<ul>
  <li><strong>优点</strong>：适用于多种失真类型（压缩、噪声、模糊），精度较高；</li>
  <li><strong>缺点</strong>：依赖自然图像训练集，对非自然图像（如医学图像、卡通）评估偏差大。</li>
</ul>

<h3 id="niqe">NIQE</h3>
<p>自然图像质量评估器（Natural Image Quality Evaluator）</p>
<h5 id="1核心用途-5">（1）核心用途</h5>
<p>无需训练数据的NR-IQA指标，适用于“缺乏标注训练集”的场景（如特殊领域图像）。</p>

<h5 id="2核心思想-5">（2）核心思想</h5>
<p>自然图像的“局部统计特征”（如亮度、对比度）服从特定的多元高斯分布，失真会导致特征分布偏离自然分布——NIQE通过计算“失真图特征分布与自然图像特征分布的距离”评估质量。</p>

<h5 id="3计算方法-5">（3）计算方法</h5>
<p>步骤1：预定义自然图像特征分布：基于大量无失真自然图像，提取“亮度归一化后的局部标准差”和“局部梯度幅度”特征，拟合多元高斯分布模型（均值$\mu_n$、协方差$\Sigma_n$）。</p>

<p>步骤2：提取失真图特征：对失真图提取相同的局部特征，拟合其多元高斯分布模型（均值$\mu_d$、协方差$\Sigma_d$）。</p>

<p>步骤3：计算分布距离：用<strong>马氏距离（Mahalanobis Distance）</strong> 衡量两个分布的差异，距离越小表示质量越好：<br />
\(NIQE\ Score = \sqrt{(\mu_d - \mu_n)^T \Sigma_n^{-1} (\mu_d - \mu_n) + \text{tr}(\Sigma_n^{-1} \Sigma_d) - \ln(\det(\Sigma_n^{-1} \Sigma_d)) - K}\)<br />
其中，$\text{tr}$为矩阵迹，$\det$为矩阵行列式，$K$为特征维度。</p>

<h5 id="4优缺点-4">（4）优缺点</h5>
<ul>
  <li><strong>优点</strong>：无需训练，鲁棒性强，对多种失真类型适用；</li>
  <li><strong>缺点</strong>：精度略低于BRISQUE，对“失真程度低”的图像区分度差。</li>
</ul>

<h3 id="lpips">LPIPS</h3>
<p>经典的基于深度学习的NR-IQA</p>
<h5 id="1核心用途-6">（1）核心用途</h5>
<p>近年来主流的高精度NR-IQA指标，适用于图像生成（如GAN生成图）、超分辨率、风格迁移的质量评估，贴合人类高层语义感知。</p>

<h5 id="2核心思想-6">（2）核心思想</h5>
<p>传统NR-IQA依赖低层特征（像素、梯度），深度学习模型（如CNN）可提取“高层语义特征”（如物体形状、纹理结构），更接近人类视觉的认知过程——LPIPS（Learned Perceptual Image Patch Similarity）通过预训练CNN提取特征，计算失真图与“理想自然图像”的特征距离（注：LPIPS本质是FR-IQA，但可通过“生成理想自然图像”扩展为NR-IQA）。</p>

<h5 id="3计算方法-6">（3）计算方法</h5>
<p>步骤1：预训练CNN模型：使用在ImageNet上预训练的CNN（如VGG-16、AlexNet），去除最后全连接层，保留卷积层（用于提取特征）。</p>

<p>步骤2：特征提取与归一化：对失真图和理想自然图像（如通过超分模型生成的参考图）输入CNN，提取各层特征，并进行L2归一化。</p>

<p>步骤3：计算感知距离：对各层特征计算L2距离，加权求和（高层特征权重更高），距离越小表示质量越好：<br />
\(LPIPS = \sum_{l=1}^L w_l \times \frac{1}{H_l W_l C_l} \sum_{x,y,c} (F_l(I_d, x,y,c) - F_l(I_r, x,y,c))^2\)<br />
其中，$L$为CNN层数，$w_l$为第$l$层权重，$F_l$为第$l$层特征，$I_d$为失真图，$I_r$为理想参考图。</p>

<h5 id="4特点">（4）特点</h5>
<ul>
  <li><strong>优点</strong>：基于高层语义特征，与主观感知一致性最优；</li>
  <li>依赖预训练CNN和理想参考图（扩展为NR-IQA时需额外模型）。</li>
</ul>

<h3 id="wadiqam-nr">WADIQAM-NR</h3>
<p>同样基于深度神经网络（无参考）</p>
<h5 id="1核心用途-7">（1）<strong>核心用途</strong></h5>
<p>适用于社交媒体图像、监控视频等无参考场景，对JPEG压缩、噪声、模糊等失真类型鲁棒。</p>
<h5 id="2核心思想-7">（2）<strong>核心思想</strong></h5>
<ul>
  <li>继承WADIQAM-FR的多尺度特征提取框架，但去除参考图输入。</li>
  <li>引入<strong>跨通道注意力机制</strong>（Cross-Channel Attention），增强对局部纹理和边缘的敏感度。</li>
  <li>采用<strong>空间金字塔池化</strong>（Spatial Pyramid Pooling）融合不同区域的特征统计量（如均值、方差）。</li>
</ul>

<h5 id="3计算步骤">（3）<strong>计算步骤</strong></h5>
<ol>
  <li><strong>多尺度特征提取</strong>：通过3个并行分支处理不同分辨率的输入（原图、1/2缩放、1/4缩放）。</li>
  <li><strong>注意力增强</strong>：对每个分支的特征图计算通道间相关性，生成注意力权重。</li>
  <li><strong>全局聚合</strong>：将多尺度特征拼接后输入全连接层，回归质量分数。</li>
</ol>

<h5 id="4性能表现">（4）<strong>性能表现</strong></h5>
<p>在CLIVE数据集上SROCC达0.601，优于BRISQUE（0.557）和NIQE（0.477）。</p>

<h3 id="clipiqa">CLIPIQA</h3>

<h5 id="1核心用途-8">（1）<strong>核心用途</strong></h5>
<p>基于CLIP模型的无参考指标，适用于AI生成图像（如GAN）、艺术创作等抽象感知评估。</p>
<h5 id="2核心思想-8">（2）<strong>核心思想</strong>：</h5>
<ul>
  <li>利用CLIP的跨模态对齐能力，将图像质量映射到文本语义空间。</li>
  <li><strong>反义词提示配对策略</strong>：例如同时使用“高质量照片”和“低质量照片”作为提示，通过余弦相似度差消除语义歧义。</li>
  <li>移除位置嵌入（Position Embedding），支持任意尺寸输入，减少缩放引入的伪失真。</li>
</ul>

<h5 id="3计算步骤-1">（3）<strong>计算步骤</strong>：</h5>
<ol>
  <li><strong>特征提取</strong>：CLIP的图像编码器输出图像特征$F_I$，文本编码器输出提示特征$F_T^+$和$F_T^-$。</li>
  <li><strong>相似度计算</strong>：<br />
\(S^+ = \text{cosine}(F_I, F_T^+), \quad S^- = \text{cosine}(F_I, F_T^-)\)</li>
  <li><strong>质量得分</strong>：通过Softmax归一化后取差值：<br />
\(Q = \frac{e^{S^+}}{e^{S^+} + e^{S^-}} - \frac{e^{S^-}}{e^{S^+} + e^{S^-}}\)<br />
取值范围$[-1, 1]$，正值表示质量更高。</li>
</ol>

<h5 id="4优缺点-5">（4）<strong>优缺点</strong></h5>
<p><strong>技术突破</strong>：</p>
<ul>
  <li>在AVA美学数据集上PLCC达0.8978，超越传统方法（如NIMA的0.823）。</li>
  <li>支持细粒度评估（如亮度、噪声）和抽象属性（如“快乐”“悲伤”），通过提示词扩展可适应多种场景。</li>
</ul>

<p><strong>局限性</strong>：</p>
<ul>
  <li>对专业术语（如医学图像中的伪影）的敏感度不足；</li>
</ul>

<h3 id="pi">PI</h3>
<p>（Perceptual Index）：基于CNN</p>
<h5 id="1核心用途-9">（1）<strong>核心用途</strong></h5>
<p>基于预训练CNN的无参考指标，适用于自然图像的美学评分和质量筛选。</p>
<h5 id="2核心思想-9">（2）<strong>核心思想</strong></h5>
<ul>
  <li>模拟人类视觉系统的多通道响应，提取图像的<strong>空域感知信息（SI）</strong>和<strong>时域感知信息（TI）</strong>。</li>
  <li>SI通过Sobel滤波计算边缘密度，TI通过相邻帧差异计算运动强度，最终得分由两者加权融合。</li>
</ul>

<h5 id="3计算步骤-2">（3）<strong>计算步骤</strong></h5>
<ol>
  <li><strong>空域分析</strong>：<br />
\(SI = \max\left(\sigma\left(Sobel(I)\right)\right)\)<br />
其中$\sigma$为标准差，反映边缘细节丰富度。</li>
  <li><strong>时域分析</strong>：<br />
\(TI = \max\left(\sigma\left(I_t - I_{t-1}\right)\right)\)<br />
反映连续帧间的运动剧烈程度。</li>
  <li><strong>质量评分</strong>：<br />
\(Q = w_S \cdot SI + w_T \cdot TI\)<br />
权重$w_S$和$w_T$通过主观评分数据训练确定。</li>
</ol>

<p><strong>应用场景</strong>：</p>
<ul>
  <li>摄影作品筛选、社交媒体内容推荐；</li>
  <li>与NIMA相比，对低对比度、模糊等失真更敏感。</li>
</ul>

<p><strong>局限性</strong>：</p>
<ul>
  <li>对非自然图像（如卡通、抽象艺术）效果较差；</li>
  <li>需依赖标注数据训练权重。</li>
</ul>

<h3 id="maniqa">MANIQA</h3>
<p>（Multi-Attention Network for Image Quality Assessment）</p>
<h5 id="1核心用途-10">（1）<strong>核心用途</strong></h5>
<p>针对GAN生成图像的无参考指标，解决传统方法对生成失真（如伪影、纹理不连贯）评估失效的问题。</p>
<h5 id="2核心思想-10">（2）<strong>核心思想</strong></h5>
<ul>
  <li>结合ViT和多维度注意力机制，捕捉全局结构与局部细节的交互。</li>
  <li><strong>转置注意力块（TAB）</strong>：在通道维度计算全局均值和最大值，生成通道注意力权重。</li>
  <li><strong>尺度Swin Transformer块（SSTB）</strong>：在空间维度应用窗口划分，增强局部纹理感知。</li>
</ul>

<h5 id="3计算步骤-3">（3）<strong>计算步骤</strong></h5>
<ol>
  <li><strong>图像分块</strong>：将输入图像划分为8×8像素块，线性投影为768维特征向量。</li>
  <li><strong>多尺度特征提取</strong>：通过ViT编码器提取3个尺度的特征（原图、1/2缩放、1/4缩放）。</li>
  <li><strong>注意力增强</strong>：
    <ul>
      <li>TAB计算通道权重，SSTB计算空间权重。</li>
      <li>融合后的特征通过全连接层回归每个块的质量得分。</li>
    </ul>
  </li>
  <li><strong>全局聚合</strong>：<br />
\(Q = \sum_{i=1}^N \alpha_i \cdot q_i\)<br />
其中 $\alpha_i$ 为块的空间注意力权重，$q_i$ 为块质量预测值。</li>
</ol>

<p><strong>性能表现</strong>：</p>
<ul>
  <li>在NTIRE 2022无参考赛道排名第一，在LIVE数据集上PLCC达0.972，显著优于BRISQUE（0.822）。</li>
  <li>对生成图像的伪影、纹理断裂等缺陷的检测准确率超过90%。</li>
</ul>

<h3 id="指标对比与选择指南">指标对比与选择指南</h3>

<table>
  <thead>
    <tr>
      <th>指标</th>
      <th>类型</th>
      <th>核心优势</th>
      <th>适用场景</th>
      <th>计算复杂度参考</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>WADIQAM-FR</td>
      <td>FR</td>
      <td>高精度，对抗性攻击鲁棒性强</td>
      <td>视频编码、专业图像处理</td>
      <td>4</td>
    </tr>
    <tr>
      <td>CLIPIQA</td>
      <td>NR</td>
      <td>支持抽象感知评估，适配AI生成图像</td>
      <td>GAN质量控制、艺术创作</td>
      <td>4</td>
    </tr>
    <tr>
      <td>MANIQA</td>
      <td>NR</td>
      <td>针对生成失真优化，检测准确率高</td>
      <td>GAN生成图像、超分辨率</td>
      <td>5</td>
    </tr>
    <tr>
      <td>PI</td>
      <td>NR</td>
      <td>结合空域/时域特征，贴近美学感知</td>
      <td>自然图像筛选、社交媒体内容审核</td>
      <td>3</td>
    </tr>
  </tbody>
</table>

<table>
  <thead>
    <tr>
      <th>场景需求</th>
      <th>推荐指标</th>
      <th>原因分析</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>有参考图、实时计算</td>
      <td>PSNR、SSIM</td>
      <td>计算快，适用于视频编码、实时去噪</td>
    </tr>
    <tr>
      <td>有参考图、高精度评估</td>
      <td>MS-SSIM、VIF、FSIM</td>
      <td>贴合主观感知，适用于医学图像、专业摄影</td>
    </tr>
    <tr>
      <td>无参考图、自然图像</td>
      <td>BRISQUE、NIQE</td>
      <td>鲁棒性强，适用于网络图片、监控视频</td>
    </tr>
    <tr>
      <td>无参考图、生成式图像</td>
      <td>LPIPS</td>
      <td>捕捉高层语义，适用于GAN生成图、风格迁移</td>
    </tr>
    <tr>
      <td>参考图不完整、低带宽</td>
      <td>小波基RR-IQA</td>
      <td>仅需特征传输，适用于卫星图像、远程监控</td>
    </tr>
  </tbody>
</table>

<!-- 
<div id="disqus_thread"></div>
<script>
    /**
    *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
    *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables    */
    /*
    var disqus_config = function () {
    this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable
    this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
    };
    */
    (function() { // DON'T EDIT BELOW THIS LINE
    var d = document, s = d.createElement('script');
    s.src = 'https://https-j-am-ack-github-io.disqus.com/embed.js';
    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> -->]]></content><author><name>Jam Y</name></author><category term="CV" /><category term="IQA" /><category term="Learning" /><summary type="html"><![CDATA[IQA Learning 2025-09-03]]></summary></entry><entry><title type="html">Welcome to Jam Y’s Blog!</title><link href="https://j-am-ack.github.io/blog/2025/08/30/welcome-to-jekyll/" rel="alternate" type="text/html" title="Welcome to Jam Y’s Blog!" /><published>2025-08-30T04:37:46+00:00</published><updated>2025-08-30T04:37:46+00:00</updated><id>https://j-am-ack.github.io/blog/2025/08/30/welcome-to-jekyll</id><content type="html" xml:base="https://j-am-ack.github.io/blog/2025/08/30/welcome-to-jekyll/"><![CDATA[<p>Hi there!
This is my first trial on my site to post a blog.</p>

<p>I’d like to mark this post as a test post to see if it works.
Meanwhile, this would mark some of the utils of the JEKYLL tool.</p>

<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>

<p>Jekyll requires blog post files to be named according to the following format:</p>

<p><code class="language-plaintext highlighter-rouge">YEAR-MONTH-DAY-title.MARKUP</code></p>

<p>Where <code class="language-plaintext highlighter-rouge">YEAR</code> is a four-digit number, <code class="language-plaintext highlighter-rouge">MONTH</code> and <code class="language-plaintext highlighter-rouge">DAY</code> are both two-digit numbers, and <code class="language-plaintext highlighter-rouge">MARKUP</code> is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>

<p>Jekyll also offers powerful support for code snippets:</p>

<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>

<p>Check out the <a href="https://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>

<div id="disqus_thread"></div>
<script>
    /**
    *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
    *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables    */
    /*
    var disqus_config = function () {
    this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable
    this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
    };
    */
    (function() { // DON'T EDIT BELOW THIS LINE
    var d = document, s = d.createElement('script');
    s.src = 'https://https-j-am-ack-github-io.disqus.com/embed.js';
    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
    })();
</script>

<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>]]></content><author><name>Jam Y</name></author><category term="jekyll" /><category term="html" /><summary type="html"><![CDATA[Hi there! This is my first trial on my site to post a blog.]]></summary></entry></feed>