| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 图像处理之Texture Synthesis for Mobile Data Communications论文精读 -> 正文阅读 |
|
[人工智能]图像处理之Texture Synthesis for Mobile Data Communications论文精读 |
一、相关知识 1、纹理合成方法 纹理合成方法 可以分为两类:一类为过程纹理合成,另一类是基于样图的纹理合成,它又可以分为基于像素的纹理合成和基于块的纹理合成。 其中过程纹理合成将纹理的生长过程表达为数学公式或一个迭代运算的过 程,可以模拟出木纹、云雾、大理石以及动物身上的斑纹等多种自然纹理。 基于样图的纹理合成可以从一小块样本纹理产生出任意大小的合成纹理,而 合成纹理与样本纹理看起来好像是使用同一规则产生出来的。 基于样图的纹理合成中的基于像素的纹理合成使用方形样本图像作为模板, 通过模式匹配过程确定每个像素的颜色,而基于块的纹理合成在确保块的无缝连 续连接的前提下自适应地排列样本图像。 在本文中,主要使用的是基于像素的纹理合成。 2、LBP算子 本文采用的数据编码方式是局部二值模式,即LBP。局部二值模式 LBP 是一种用来描述图像局部纹理特征的算子,用于纹理特征的提取。 原始的 LBP 算子定义在像素 3 * 3 的邻域内,以邻域中心像素为阈值,相邻的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为 0。 如该图所示,第一个像素值44<邻域中心像素值83,即对应位置被赋值 0,第二个像素值118>邻域中心像素值83,即对应位置被赋值 1,以此类推即可得出 8 位位二进制序列,将这 8 位二 进制数按照顺时针方向依次排列形成一个二进制数字 0111 1100,这个二进制数字就是中心像素的 LBP 值转化为十进制为124。中心像素的 LBP 值反映了该像素周围区域的纹理信 息。 但本文中使用的是圆形 LBP 算子,是对原始 LBP 算子的一种改进,它将 3*3 邻域扩展到任意邻域,并用圆形邻域代替正方形邻域。其允许在半径为 R 的圆 形邻域内有任意多个像素点,如图所示。第一幅是半径为 1,8 个像素点的圆形 LBP 算子,第二幅图是半径为 2,16 个像素点的圆形 LBP 算子,第一幅是半径 为 2,8 像素点的圆形 LBP 算子。 给定(xc,yc)是中心像素的位置,则邻域坐标(xp,yp)可由如下公式计算,R 为圆半径。剩下的计算过程计算方法与原始 LBP 算子基本一致,其中 gc、gp 分别 是半径为 R 的圆形邻域中中心像素和 P 个周围像素值。 二、基本思想 首先我们将秘密信息进行分段,使用圆形LBP算子嵌入到空白图像中(此处是以 5*5 分块为例)。 对于样本纹理图像我们通过将样本图像中的不敏感颜色分量分成上、中、下 三层对已经嵌入的 LBP 编码进行着色,得到painted LBP code。最后再对该图中剩余没有着色的空白像素点进行涂层和重涂等一系列操作,提高最后生成的合成纹理图像的视觉质量。 三、具体步骤 1、嵌入
第一步是在空白图像中嵌入秘密信息,我们 以这个 0110 1011…0101 0011 秘密信息为例,文中提出的是使用 8 位为一块进行分段,嵌入到 5*5 分块中。再以 LBP1 为例,取圆半径为 2,嵌入8 位二进制秘 密信息。注意此处的嵌入顺序和文章的图2 是相同的,从右边中间开始顺时针嵌入。当然也可以有其他嵌入顺序,作者在他的 2007 年文章中《Data-Embeddable Texture Synthesis》已经说明采用这种圆形 LBP 算子时不考虑旋转不变性等约束。 2、LBP编码着色 我们首先需要提取样本纹理图像中的所有不敏感颜色分量,然后计算出其中值,再引入一个阈值 T,将样本颜色分 成上中下三类,对于中值和和阈值 T我们后面用实例详细说明。LBP 编码根据样本颜色的三类,将中值赋值给该块中心像素,剩下的周围 8 个 LBP 编码 1 和 0 分别随机选择属于上下类的像素颜色,即二进制 1 在上类颜色中随机选择一个像 素颜色,二进制 0 在下类颜色中随机选择一个像素颜色。依次完成对各个 LBP 编码块的着色。 例一 —— 理解中值 我们以样本纹理灰度图像为例,在其中取一个 3*3 像素的块如图所示。我们先对这 9 个像 素点进行升序排列,可以看出该行像素值的中位数是 61,它将像素值分成数量相等的两部分,这就是文章选用中值的统计意义,因为我们在为二进制 1 和 0 选择上下类像素颜色,若果上下类颜色像素个数不相等时,容易出现一类选完, 另一类还剩很多的情况,无法进行着色。 那么我们可以进一步思考,为什么要是中值,不能是平均值呢?它不是反映 一组数据的相对集中的中心位置嘛?我们接着用第二个小例子来说明,我们刚才的 9 个像素值求平均值得到平均值为 124.2,它将剩下的 8 个像素值分成 5 和 3, 两边数量不相等,就容易出现上面所说的情况。 可以直接看下面一幅图理解,以平均值划分,就出现该图的情况,还有一个二进制 1 无法着色,另外剩下一个下类颜色分量。但是我们使用中值就不会出现这种情况。 其实,不使用平均值划分本质上还是平均值易受极端值的影响,比如本例 中的 255,导致数量分布不均匀,它只能在某些像素值差异不大的情况下使用。 例二 —— 理解阈值T 以刚才的样本纹 理的灰度图像为例,我们画出其灰度直方图,并计算出最小值为 12,中值为 115, 最大值为 255。 (灰度直方图是灰度级的函数,表示图像中具有某种灰度级的像素的个数,反映 了图像中每种灰度出现的频率。灰度直方图的横坐标是灰度级,纵坐标是该灰度 级出现的频度,是图像最基本的统计特征) 接着我们为这幅灰度图像加上高斯噪声进行攻击,继续画出灰度直方图,求出最小值、中值和最大值分别为 0,116,255。 如果我们不引入阈值 T,此时我们假设一个像素值为 115.5,在原始图对应着二进制 1,当被噪声攻击时,中值发生变化,在噪声图中,115.5 对应值二进 制 0。显然,如果不引入阈值 T,我们将后面提取信息时将 1 误判成 0,无法正 确提出秘密信息。 所以我们引入阈值 T,忽略中间范围的像素值,避免提取时产生误判,且文章中给出阈值 T 的建议值为 30。 3、涂层和重涂 我们来简单看一下该公式的含义,p 表示空白像素点的二维 坐标,v 表示以 p 为中心的偏移坐标集合,r 为集合 v 中的具体坐标。当合成纹 理图像中的某个位置没有着色即为 null,样本纹理图像和合成纹理图像的颜色差 异 D 即为 0;若某位置已着色,即计算颜色差值的平方和,可以简单看作两个 图像的相似度度量。遍历完整个样本纹理图像,找出总和 S 最小值,将其中心颜 色像素值赋值给合成纹理图像中的 p 处。重复此过程,直到绘制完所有像素。 其实公式 2 本质上是模板匹配,将以 p 为中心的 N 个像素的方形上下文窗口视为模板,并搜索样本中的最佳匹配区域。下面我们用具体的例子来更直观地理解整个过程。 例三 —— 理解涂层 从图中可以很明显看出,边缘某些空白像素点并没有着上色,而且我们可以 知道最开始时着色时,由于周围的已经着色的像素点比较少,着色效果并不理想。 所以文章提出了筛选 LBP 颜色和重涂的过程,也就是我们接下来的两个例子需 要说明的重点。 例四 —— 理解筛选LBP颜色 例五 —— 理解重涂 4、提取秘密信息
我们继续使用前面的例一,当我们知道一个 3*3 块的像素值,通过与 中间像素值的比较可以得出嵌入的二进制序列为 11110000。 四、总结 1、首次提出在纹理合成过程中嵌入秘密信息 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:22:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |