美观二维码视觉外观的增强
摘要
快速响应(QR)码是一种广泛应用于众多领域的二维条码。类似于可见水印技术,其视觉外观可以被修改以显示图像,同时标准二维码读取器仍能解码此类二维码中包含的数据。本文考虑了在二维码上显示图像的特性,提出了一种有效的方法,在不牺牲其纠错能力的前提下生成视觉效果更佳的美观二维码。我们还研究了用于表示待显示图像的模块形状,并探讨了视觉质量与可读性之间的权衡。
1 引言
二维码是由黑白方形模块组成的二维码,最初由电装波开发¹作为一种通过形成机器可读格式来访问数字数据的有效方式。它能承载比传统条形码更多的信息,并且可以通过智能手机中配备的软件快速读取。二维码已成为企业广告的流行工具,因为它使客户能够轻松访问其网站。
1.1 背景
标准二维码仅包含黑白方形模块,其外观显得杂乱。通过在二维码上显示图像,有许多方法可以生成美观的二维码。对于给定的消息和图像,理想情况是能够自动生成这样的二维码,因为手动设计的条码成本过高。同时,美观的二维码还需能被标准解码器识别。满足这些要求的传统方法可分为四类。
第一类方法全局地变换输入图像,并将其叠加到二维码 [5–7] 的部分区域。它会修改原始二维码的若干模块,在可能的纠错能力范围内显示小型标志图像。缺点是牺牲了原始二维码的可读性,且可显示尺寸被限制为较小。第二类方法根据图像像素改变模块的尺寸和颜色。Visualead²和LogoQ³保留一个同心区域的模块不变,并将邻近区域与图像像素进行均匀融合,以保持原始对比度。第三类方法通过更改填充模块,在二维码上显示图像[8,9]。由于二维码结构标准化,可用于显示图像的区域受到限制。QR-JAM MAKER⁴的自由软件已公开。主要限制在于里德-所罗门码(RS码)的系统编码[4]。第四类采用里德-所罗门码(RS码)的非系统编码,允许我们选择显示位置而不牺牲纠错能力[3]。然而,传统方法由于模块数量有限,导致图像分辨率降低。
其他一些研究探讨了上述类别与图像处理技术的结合,以有效提升视觉质量。褚等人[1]应用半色调技术来显示图像,从而生成美观二维码。方等人[2]考虑了采样过程和错误纠正,通过将生成过程建模为水印嵌入问题来优化生成流程。张等人[10]提出了两阶段方法,该方法结合了基于模块和基于像素的嵌入方式。尽管这些方法能够提升视觉质量,但它们试图利用纠错能力或模块形状来减少图像中心区域的类噪声外观。在现有文献中,图像重要区域的基本黑白模式并未被去除。
1.2 我们的贡献
本文中,我们关注通用图像的以下两个趋势:(1)图像外边缘不如中心区域重要;(2)图像的噪声区域对像素修改不敏感,因为大多数水印技术在嵌入时会避开平坦区域。基于这些趋势,我们提出一种权重函数,用于确定非系统编码的位置。在RS码字的非系统编码中,信息符号的位置可以从包括校验符号在内的所有位置中自由选择[4]。通过固定前若干位置用于表示待包含数据,我们根据计算出的权重来控制其余信息符号的位置。结果表明,与传统方法相比,我们能够生成视觉效果更佳的美观二维码[3],尽管其数值度量略有下降。传统方法使用非系统编码随机生成多个RS码字,并在与汉明距离的约束条件下选择最优的一个。
图像的原始像素值变为最小。另一方面,提出的方法主要将视觉外观作为约束条件。
我们还研究了表示要显示图像的模块。由于二维码中的模块数量相对较少,因此应降低图像的分辨率以适应二维码。为了提高分辨率,我们提出了使用矩阵描述来表示每个模块的子模块。通过若干此类子模块的示例,我们测量了生成的二维码在可读性与视觉质量之间的权衡。
2 预备知识
2.1 二维码概述
二维码基本上由黑色模块以方形图案排列在白色背景上构成。由黑色或白色图案表示的模块是二维码的最小组成部分,每个模块被赋予一个比特值。二维码的尺寸由1到40的版本号决定。在版本 v的二维码中,表示编码数据的模块数量为(17+ 4v) ×(17+ 4v)。二维码包含功能图形,以便读取器识别编码数据所在的位置。这些图形由三个主要部分组成:定位图案、对齐图案和定时图案。
二维码使用里德-所罗门码进行错误纠正,其纠错能力分为4个级别:L、M、Q和H,按纠正能力递增排列。每个纠错级别最多可纠正约占二维码总符号数7%、15%、25%和30%的符号。由于里德-所罗门码的特性,每个码字符号由8位组成,并在二维码中由相邻的8个模块排列而成。考虑到二维码可能被污损的情况,码字的符号并非按连续顺序排列,而是采用交错排列方式。
给定版本号和纠错级别,二维码中的码字数量及其结构由(n), k, d唯一确定,其中 n、k和 d分别表示码长、信息符号数量以及满足 d= n − k+ 1的最小距离。例如,5L及以下的二维码由单个码字组成,而5M及以上的二维码则由两个或更多码字组成,并且其在二维码中的符号位置按交错顺序排列。码长 n随版本号增加而增加,而 k则随纠错级别提高而减少。
由于每个码字的符号由8位组成,单个码字最多可表示 8k位(k字节)。如果要嵌入的信息量小于容量,则用填充符号与信息符号一起补充。填充符号不包含信息,因此可以自由更改。在里德-所罗门码中,剩余的 n − k个符号称为校验符号,其冗余提供了纠错能力。在系统编码中,校验符号由信息符号唯一确定。
考虑到光学相机设备的可读性,二维码中的黑白模块数量应保持平衡。有八种掩码模式会根据坐标改变比特,以使二维码更容易读取。在编码时,所选掩码模式的每个元素都会与当前模块进行异或操作。
2.2 非系统编码方法
设 δ=(δ₁, δ₂,…, δₖ)为长度为 k的信息符号,则校验符号p=(p₁,p₂,…, pₙ₋ₖ)通过系统编码函数enc()从 δ计算得到,生成的码字c表示为
c= enc(δ)=(c₁, c₂,…, cₙ)
=(δ₁, δ₂,…, δₖ,p₁,p₂,… pₙ₋ₖ).
请注意,信息符号 δ 被排列在其码字c的前 k 个符号中。这些符号的位置在二维码中是固定的。只要比特错误在纠错能力范围内,就可以通过对失真的码字c′ 执行解码器dec()来解码信息符号 δ。通常情况下,如果采用非系统编码,则无法将信息符号从码字的符号中分离出来。
当编码函数被修改时,可以获得里德-所罗门码的非系统编码函数。已知通过非系统编码生成的码字是通过系统编码生成的码字之一。此外,可以固定由非系统编码函数编码得到的码字c′ 中任意 k个符号,并利用非系统编码函数计算剩余的 n − k个符号。
设 C为由enc()生成的所有RS码字组成的集合,即∀c∈ C。那么,通过非系统编码编码得到的码字c′满足 ∀c′ ∈C。因此,我们可以从dec(c′)中获得某些信息符号。若未发生错误,则码字c′的前 k个符号即为解码后的信息符号。
对于给定的索引 θ=(θ₁, θ₂,…, θₖ),码字c′的第 k个符号表示为
c′ θᵢ = δᵢ,(1 ≤ i ≤ k),
其中 1 ≤ θᵢ ≤ n 和 θᵢ ≠ θⱼ 用于 i ≠ j。其余的 n − k 符号通过非系统编码函数根据这些 k 符号计算得出。
显然,通过非系统编码编码的二维码也可以被普通二维码读取器读取。假设前 k̂(< k)个符号用于表示要编码的数据,其余 k − k̂个符号被视为填充符号。在这种情况下,可以使用以下索引。
θ̂ₖ =(1, 2,…, k̂, θ̂ₖ₊₁ ,…, θₖ)
这意味着索引θ̂ₖ 有 C(n−k, k−k̂)个候选值,其中 C(a, b)表示从给定的 a 个元素中选取b‐组合的数量。简而言之,我们可以在码字的范围[k+1, n]内自由选择填充符号的位置。当编码数据量较小时,该方法中的可设计区域会变得较大。如果一个二维码有 m个码字,其信息符号为 kₜ(1 ≤ t ≤ m字节),且信息符号的尺寸为 σ字节,则可设计区域的尺寸为(∑ₜ₌₁ᵐ kₜ) − σ字节。
2.3 传统方法
在[3],非系统编码的里德-所罗门码中,引入了美观的二维码的生成。不失一般性,要嵌入的数据由σ̂字节组成,并被划分为 m个长度为 kₜ的段,(1 ≤ t ≤ m),即∑ₜ₌₁ᵐ k̂ₜ= σ。对于每一段,RS码字 c′ₜ通过使用某个索引的非系统编码计算得到首先θ̂ₖ,ₜ。将图像的每个像素视为理想二维码的每个模块。然而,图像的像素可能与二进制表示的RS码字不一致。允许一些误差,我们通过改变 θ̂ₖₜ 生成多个RS码字,并选择汉明距离最小的最佳码字。制作美观二维码的过程如下所述。
步骤1. 将图像的像素分配给二维码的模块,并使用由所有RGB值的平均值确定的阈值对模块进行二值化。
步骤2. 对二进制矩阵应用预定的掩模图案,并用信息符号替换 σ符号,这些符号在后续步骤中不会更改。
步骤3. 将掩模后的图像划分为 m个序列,这些序列对应于以交错顺序放置在二维码上的RS码字。我们将 m个序列记为 αₜ,(1 ≤ t ≤ m)。
步骤4. 对于 1 ≤ t ≤ m,通过改变索引 θ̂ₖₜ,找到与 αₜ的汉明距离最小的最佳RS码字 c˙′ₜ。
步骤5. 用 αₜ替换 c˙′ₜ作为 1 ≤ t ≤ m的最佳RS码字。
步骤6. 再次应用预定的掩模图案以取消步骤2中的掩模操作。
对于索引 θ̂ₖₜ,有 C(n − kₜ, kₜ − k̂ₜ)个候选值(针对(1 ≤ t ≤ m))。在步骤4的搜索中检查所有候选值在计算上是困难的。因此,索引 θ̂ₖₜ 被随机选择,并将试验限制为 N次。
3 提出的加权方法
在传统方法中,索引 θ̂ₖₜ 是随机生成的,没有任何策略。考虑到待显示图像的特性,我们提出了一种有效的方法,以区分感知重要区域和其他区域。
3.1 权重函数
众所周知,图像的噪声区域相比平坦区域对修改的敏感性更低。例如,通常将水印信号嵌入到图像的边缘,以控制感知质量的下降。同样可以合理地假设,图像的中心区域比其周围区域更为重要。基于这些特性,我们为模块计算权重。
假设图像为正方形,尺寸为 L × L像素,每个像素由RGB颜色分量表示。使用二维码读取器中配备的某种转换算法,从输入图像计算出一个二进制矩阵 Bᵢ,ⱼ,(1 ≤ i, j ≤ 17+ 4v),对应给定版本 v的二维码。在我们的方法中,采用以下算法作为转换算法。
步骤1. 将输入图像的尺寸调整为与给定版本 v 的二维码尺寸相同。
步骤2. 将RGB颜色分量转换为YUV颜色分量,并获取亮度(Y)分量Yᵢ,ⱼ,(1 ≤ i, j ≤ 17+ 4v)。
步骤3. 计算其中心方块(尺寸为原始图像尺寸的四分之一)的值的平均 Ȳ。
Ȳ = 4 / L² ∑ᵢ₌ᴸ⁄₄³ᴸ⁄₄ ∑ⱼ₌ᴸ⁄₄³ᴸ⁄₄ Yᵢ,ⱼ
步骤4. 二进制矩阵Bᵢ,ⱼ 由以下规则确定:
Bᵢ,ⱼ = {1 if Yᵢ,ⱼ > Ȳ; 0 otherwise}
接下来,将拉普拉斯滤波器 LF()应用于矩阵Bᵢ,ⱼ,其离散卷积核由以下给出
⎡
⎣
−1 −1 −1
−1 8 −1
−1 −1 −1
⎤
⎦.
权重矩阵Wᵢ,ⱼ 的计算方式如下。
Wᵢ,ⱼ = |LF(Bᵢ,ⱼ)| ,
其中 |a| 返回 a的绝对值。注意到0 ≤ Wᵢ,ⱼ ≤ 8,因为Bᵢ,ⱼ ∈{0, 1}。在 0 ≤ γ ≤ 7的矩阵第 γ‐个外端,如果Wᵢ,ⱼ < 8−γ,则该值被替换为Wᵢ,ⱼ = 8 − γ。
在传统方法的步骤3中,从二进制矩阵Bᵢ,ⱼ中提取序列 αₜ。根据RS码字符号的位置,从权重矩阵Wᵢ,ⱼ的相同坐标处选择第 t个序列 αₜ的权重序列 wₜ。需要注意的是,RS码字的符号不是二进制的。在二维码中,每个符号被表示为
(a) 红叶(165 × 165像素) (b) 花 (200 × 200像素)
通过8位模块表示,并放置在某些相邻模块上,这些相邻模块的位置取决于版本 v。考虑到这些相邻位置及其值 wₜ,确定索引 θ̂ₖₜ,主要用于在二维码中心尽可能多地选择平坦区域来分配信息符号。值得注意的是,噪声区域和二维码外端的模块倾向于作为RS码字的校验符号,它们的值可能与 αₜ不同。在该规则约束下通过调整索引 θ̂ₖₜ,提出的方法中确定了最优的码字 c˙′ₜ。
在确定里德-所罗门码字 c˙′ₜ, 后,为保持色彩平衡,根据原始的RGB颜色分量对二维码的每个模块进行修改。设βᵢ,ⱼ,(1 ≤ i, j ≤ 17+ 4v)为放置在二维码矩阵上的二进制表示的里德-所罗门码字。需要注意的是,βᵢ,ⱼ 必须满足相应位置上的黑白功能图案。最后,我们生成包含给定图像的二维码如下。
如果βᵢ,ⱼ= 1,那么
Y′ᵢ,ⱼ = {Yᵢ,ⱼ if Yᵢ,ⱼ > Ȳ + ε; Ȳᵢ,ⱼ + ε otherwise},
否则,
Y′ᵢ,ⱼ = {Yᵢ,ⱼ if Yᵢ,ⱼ < Ȳ − ε; Ȳᵢ,ⱼ − ε otherwise},
其中 ε是确保可读性的阈值。RGB颜色分量由修改后的亮度分量 Y′以及原始的U和V分量转换而来,最终得到彩色二维码。
3.2 性能比较
在视觉质量评估方面,我们实现了三种算法:系统编码、传统方法[3],和提出的方法,使用相同的转换算法生成RS码字。系统编码是第三类方法,通过更改填充模块以在二维码上显示图像,例如QR-JAM和[8,9]。我们使用了两幅 RGB彩色图像
和(M)代表纠错级别。)
(a) 系统化 (L)
(b) 常规 3
(c) 提出的 (L)
(d) 系统化 (M)
(e) 常规 3
(f) 提出的 (M)
和(M)表示纠错级别。)
(a) 系统化 (L)
(b) 常规 3
(c) 提案 (L)
(d) 系统化 (M)
(e) 常规 3
(f) 提案 (M)
4 视觉质量的提升
尽管在RS码字编码过程中引入权重矩阵可提升视觉质量,但显示图像的低分辨率仍会削弱其优势。一种提高分辨率的简单方法是使用更高版本的二维码。然而,二维码版本越高,光学设备越难读取。此外,大多数模块会变成填充模块,造成空间浪费。在本节中,我们提出一种将分辨率提高3倍的方法。
我们的想法是为除位于二维码角落的定位图案模块之外的每个模块分配 3 × 3子模块。在提出的方法中,输入图像的分辨率被缩小以调整给定版本 $17+ 4v$ 下二维码的尺寸 $v$。我们在二维码上使用尺寸 $3(17+ 4v) \times 3(17+ 4v)$ 来表示输入图像。
如有必要,可以仅更改 3 × 3子模块的中心区域以生成美观二维码,因为大多数二维码读取器通过检测模块的中心区域来判断黑白。然而,这样会显著降低可读性。另一方面,如果直接将公式(8)和(9)应用于子模块,则视觉质量仍然较低。为了在可读性和视觉质量之间寻求良好平衡,我们考察了一些子模块表示方法。以下四种模块类型 M1至 M4是用于计算子模块的值的一些典型示例。
$$
M1=
\left{
\begin{bmatrix}
1 & 1 & 1 \
1 & 1 & 1 \
1 & 1 & 1 \
\end{bmatrix},
\begin{bmatrix}
1 & 1 & 1 \
1 & 1 & 1 \
1 & 1 & 1 \
\end{bmatrix}
\right},
M2=
\left{
\begin{bmatrix}
0 & 0 & 0 \
0 & 1 & 0 \
0 & 0 & 0 \
\end{bmatrix},
\begin{bmatrix}
1 & 1 & 1 \
1 & 1 & 1 \
1 & 1 & 1 \
\end{bmatrix}
\right}
$$
$$
M3=
\left{
\begin{bmatrix}
0 & 0 & 0 \
0 & 1 & 0 \
0 & 0 & 0 \
\end{bmatrix},
\begin{bmatrix}
0 & 1 & 0 \
1 & 1 & 1 \
0 & 1 & 0 \
\end{bmatrix}
\right},
M4=
\left{
\begin{bmatrix}
0 & 0 & 0 \
0 & 1 & 0 \
0 & 0 & 0 \
\end{bmatrix},
\begin{bmatrix}
0 & 0 & 0 \
0 & 1 & 0 \
0 & 0 & 0 \
\end{bmatrix}
\right}
$$
左矩阵用于满足 $B_{i,j}= \beta_{i,j}$ 的模块,其中“1”表示根据公式(8)和(9)进行修改的子模块,“0”表示使用原始亮度值 $Y_{i,j}$ 的子模块。右矩阵是变为 $B_{i,j} \neq \beta_{i,j}$ 的模块。
值得注意的是,仅有一个中心子模块被修改,用于模块类型 M2、M3 和 M4,当 $B_{i,j}= \beta_{i,j}$ 时。满足 $B_{i,j}= \beta_{i,j}$ 的模块主要是平坦区域,这些区域被选为 RS码字的信息符号,以避免受到非系统编码的修改。因此,这些模块类型尽可能保留了平坦区域的原始像素值。结果,显示图像的视觉外观变得非常接近原始图像。值得提及的是,在我们的实验中,当采用 M2 和 M3 类型时,这些模块的可读性并未严重下降。
(e),M2:(b)(f),M3:(c)(g),以及 M4:(d)(h)。)
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
图4展示了使用四种模块类型生成的二维码,其中二维码版本为5且纠错等级为L。通常,光学设备对外部噪声较为敏感,包括液晶显示器性能、缩放因子、亮度、打印质量等。由于在公平环境下测量性能较为困难,我们针对上述四种模块类型提供了一些获得的特征。当使用类型 M4时,数据读取极为困难,示例见图4(d)和(h)。类型 M3的可读性相比 M1并未显著下降,尽管其视觉质量从图4(c)和(g)中观察到要好得多。在某些情况下,由于未能成功解码RS码字,二维码读取器需要较长时间才能从纠错等级为L的二维码中读取数据。
当采用更高的纠错级别时,可读性可以得到提升,但也会增加二维码中不同模块的数量。图5展示了使用纠错等级L和M以及模块类型 M3的其他图像的一些示例。当在二维码上显示灰度图像时,由于对环境变化的敏感性远低于彩色图像,因此更容易读取。例如,与图像(b)和(f)相比,图5(a)(e)中的图像更容易读取。从视觉质量考虑,像图5(c)和(g)这样的噪声图像更为合适,因为模块之间的差异不那么刺眼。对于如图5(d)和(g)所示的肖像图像,即使分辨率低于原始图像,视觉质量仍得以保留。
‐(d)和(e)‐(h)的纠错级别分别为 L和M。)
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
从上述结果来看,由于依赖于环境,很难确定最佳模块类型。然而,所提出的加权方法相较于包括非系统性方法在内的某些传统方法具有显著优势[3],如第3节所证实。
5 结论
本文通过显示彩色图像来研究美观二维码。通常,图像的外边缘不如其中心区域重要。此外,噪声区域的变化比平坦区域更不敏感也是常见现象。基于这些特性,我们提出了一种权重函数,用于控制图像平坦区域和中心区域中RS码字的符号。为了提高显示图像的分辨率,我们还提出了若干模块类型,并研究了其可读性以及视觉质量。
可读性与视觉质量之间存在权衡,因此我们无法断言哪种模块类型最佳。采用更优的模块类型并进行全面的性能评估将留待未来的工作。由于可读性对噪声、显示设备、打印质量、显示尺寸等多个因素敏感,良好参数的选择可能依赖于应用环境,但值得深入研究。
1万+

被折叠的 条评论
为什么被折叠?



