资源描述
本文是对Image Hiding Algorithms Based on Halftoning Technique论文的一个实现基于半色调技术的图像影藏算法1 摘要Halftoning算法经常被用来将连续色调的图像转换成纯黑白图像。本文的主要贡献是应用前人提出一个halftoning隐藏方法,将小的二值图像影藏到一个大二值图像中。可以应用于水印和娱乐用途。2 半色调技术(halftoning)数字半色调技术是基于人眼的视觉特性和图像的成色特性,利用数学、计算机等工具,在二值设备或有限灰度级设备上实现图像再现的一门技术。该技术广泛应用于印刷、纺织、打印技术、数字图像的压缩存储、图像的传输、医学等各个领域,所以研究数字半色调技术具有重要的现实意义和应用价值。 误差扩散半色调算法是目前比较常用的生成半色调图像的方法之一。最常用的误差扩散半色调算法是1975 年由Floy d-Steinberg 提出的过滤器法。3 误差扩散算法(Error Diffusion)误差扩散算法是一种比较流行且半色调效果较好的算法,这种算法最早是由Floyed-Steinberg提出的。这种算法需要进行邻域处理,它能够为印刷机提供更高的半色调质量并且不引起网点增大,产生的半色调图像色调丰富,像素点的分布具有各向异性。其基本思想是先按照一定的扫描路径阈值量化图像像素,然后将量化误差以一定的方式扩散到相邻的未处理的像素上。假设一个n*n原始灰度图像,在i,j点的灰度级用ai,j表示,ai,j在0到1之间取值。半色调算法的目标是找到一个二值图像A=(ai,j),和源图像有相同大小,但是ai,j的取值为0或1.定义;则误差为e=a(i,j)-a(i,j)。 即将待处理像素7/16的误差被加到X(输入像素值)的右边像素上,3/16的误差被加到X的左下方像素上,5/16的误差被加到X的正下方像素上,剩下1/16的误差被加到X的右下方像素上。4 具体步骤我们的算法包括三步:1.调整原始图像A,B的灰度水平。2.使用我们新的错误扩散技术产生两个二值图像A和B。3.将A藏到B的奇数行列中。4.1 调整原始图像A,B的灰度水平二值图像A大小为n*n,二值图像B大小为2n*2n。Rs(A)是图像A中有m个像素点的小区域。Rl(B)为B中相应区域拥有4m个点。假设Rs(A)白像素点在区域,中,所以灰度水平为。我们必须保证Rl(B)的白像素点在,3m+范围内,这样它的灰度水平为/4m,3/4+/4m。我们可以选择任意0m满足。让我们看一个例子。我们选择=0,=m。则Rs(A)的灰度水平为0,1,Rl(B)的灰度水平为0.25,0.75。我们用GL(x)=x/2+1/4来调整图像B的灰度水平,用GS(x)=x来调整A。如图: 当然,这个调整灰度水平的参数可以依具体图像的实际情况而定,其他的调整函数GL(X)与上面介绍的类似,在此不一一列举。4.2 使用我们新的错误扩散技术产生两个二值图像A和B图像B有两种不同的途径生成:位于奇数行奇数列的点有A决定,其他的点有标准错误扩散半色调算法取得。接下来介绍奇数行奇数列的算法。我们的目标是实现ai,j和b2i,2j有最小的误差。设总误差为:两灰度图像分别的误差为: 我们将这个误差分别扩散到ai,j和b2i,2j的邻近点上,仍使用标准误差扩散方法。4.3 程序实现流程清屏并读入大图片将RGB色彩值变换为YcbCr色彩空间调整图片灰度水平进行半色调变换将小图片进行相同变换将小图片嵌入到大图片的奇数行列中提取水印图片输出原图像输出调整后的图像A输出调整后的图像B输出水印图像提取水印表1 程序流程图5 实验结果文章给出了在不同GL(X)灰度调整水平下,使用新的错误扩散技术产生两个二值图像A和B。这里只列举一个例子:图1 经过调整后的A图2 经过调整后的B以下是我经过编程之后实现的结果: 进过程序实现,发现该方法是可以实现一定的水印的,但是效果不是很理想,实现时需要反复调节灰度的水平,以使效果明显。所以综上所述,该算法适于娱乐性质的水印,不适合工业实际。8
展开阅读全文