现有的半色调技术种类繁多,生成的半色调图像的视觉效果也越发逼真,不过相应的代价就是较高的时间复杂度。有序抖动方法最简单而且能够完全并行处理整幅图像,但是生成的半色调图像视觉效果最差。误差传递方法产生的半色调图像视觉效果很好,但由于它的生成半色调图像过程的所要求的传递性,不能和有序抖动一样并行完成半色调过程。直接二元搜索法生成的半色调图像的视觉效果最好,但是计算复杂度却相当高,不合适在要求实时输出半色调图像的场合下使用。现在应用较广的误差传递方法在表现图像细节上仍需改进,其生成的半色调图像纹理从人眼观测看来不够细腻。我们需要根据人眼视觉系统的特性设计出视觉效果更加生动的半色调算法。
半色调技术是 指用少量的色彩将一幅连续色调图像(如灰度图像和彩色图像)量化为一幅二值图像或是只有少数几种色彩的彩色图像,并且量化后图像在一定距离的视觉效果和原始图像相似的技术。众所周知,数字半色调技术是指基于人眼视觉特性和图像呈色特性,利用数学、计算机等工具,在单色/多色二值呈色设备上实现图像的最优再现的一门技术。数字半色调是 利用人眼的低通特性,当在一定距离下观察时,人眼将图像中空间上接近的部分视为一个整体。利用此特性,人眼观察到的半色调图像局部平均灰度近似于原始图像的局部平均灰度值,从而整体上形成连续色调的效果。在我们的日常生活中,所遇到的图像可大致分为两大类:连续调图像(Continuous-Tone Image)和半色调图像(Halftone Image)。
在印刷工艺中,半色调技术也称为加网技术,加网技术发展到现在己有上百年的历史。从早期的照相加网到现代的数字加网,从调幅加网到调频加网,从粗网点到精细网点,共经历了三个阶段:照相加网(即模拟加网)、电子加网和计算机数字加网三个发展阶段。
模拟加网是指利用网屏对光线的分割作用,将连续调图像分解成大小不同网点的网目调图像的方法。它的发展可分为玻璃网屏加网和接触网屏加网两个阶段。
电子加网是指将图像信号数字化后经计算机计算处理并转换成网点输出的新型加网技术,这种技术产生于80年代初,是在电子分色机上通过电子网点发生装置对原稿完成加网的过程。
其原理是:经过电子分色机处理的代表图像不同密度级次的数字信号,送入电子分色机图像输出记录系统的网点计算机,并通过比较回路形成网点大小、形状、角度的地址指令,由地址指令从网点计算机中获得控制激光记录系统的控制信号,加在电光调制器上,控制各个电光调制器的输出工作状态,最后把由调制器控制的光信号记录在感光材料上,就能获得与原稿图像信息相一致的、具有特定大小、形状和角度的网点。
由于电子加网是数字控制的,网点是由激光记录所得,因此具有网点实、密度高、边缘清晰;网点层次多,细微层次丰富并且可以根据需要在不同阶调处产生形状不同的网点,易于控制网点扩大等优点。
数字加网是指桌面出版系统中采用基于PosstcriPt框架下的网点技术。根据记录点的分布状态,可以将数字加网分为调幅加网和调频加网两大技术。
目前半色调技术最普遍的分类法是按照它的处理方式分为:抖动法,误差扩散法,迭代法三大类。
抖动法是点处理类方法的一种典型算法,主要分为随机抖动和有序抖动两大类。这两种算法都需要一个模板,也称为抖动矩阵或阈值矩阵,抖动矩阵不仅决定了当亮度或灰度值减小时网点变成黑点的顺序.而且也决定了半色调图像的质量,所以抖动算法的关键是抖动矩阵的构造。该算法与抖动矩阵进行比较,矩阵中的每个阈值的取值范围是图像的最大灰度值和最小灰度值之间,其数学公式化如公式1:
式中f(i,j)代表连续色调图像中的像素点灰度值,t(i,j)代表抖动矩阵的阈值,而h(i,j)代表半色调后的图像灰度值。
随机抖动矩阵是通过完全随机产生的,所以半色调后的图像质量常常很不理想,在实际中已经基本不再使用。但有序抖动的抖动矩阵是有规律的,具有良好的图像效果和高效的处理速度而被各大打印机厂商采用,有序抖动矩阵主要有两种类型:分散型和聚集型。典型的分散型抖动矩阵是Bayer有序抖动矩阵,而点局部聚簇整体分散是典型的聚集型矩阵,如图1所示。
虽然有序抖动算法比较简单,且具有较好的半色调图像质量,但其也具有致命的缺点,即含有明显的周期性人工纹理。即使抖动矩阵设计的非常完美,其输出的半色调图像依然存在瑕疵,且其半色调图像质量不如通过误差扩散算法获得的半色调图像。图2是有序抖动方法的输出结果 .
在有序抖动处理中,利用了像素点与抖动矩阵比较来判断是否在一个位置放置微点,实质是一种点处理过程。在1976年Floyd和Steinberg提出了误差扩散算法,它将半色调加网从“点处理”过渡到“邻域处理”。误差扩散算法的提出为半色调加网带来了革命性的技术变革,也是半色调技术上的里程碑,并促进了半色调技术的飞速发展。通过误差扩散处理后的半色调图像像素分布各异且无规律性,色调丰富,视觉效果较好。直到目前为止,它依然被视为易于实现且视觉效果较好的半色调技术之一,被广泛应用.
图 3 Floyd-Steinberg误差扩散示意图
给定阈值t,设原图像为x(i,j),输出为y(i,j)。对整幅图像按从左到右、从上到下的顺序逐点的依次执行两步操作:
图4为输入图像与采用误差扩散输出结果,如下图所示.
(a) 输入图像 (b) 误差扩散结果
图 4 输入图像与误差扩散结果
换句话说,误差扩散相当于把中值阈值法在每一个点上产生的误差再加到周围的点上,从而保持局部区域的总体灰度基本不变。量化误差扩散的参数可以用一个矩阵描述,称之为误差扩散过滤器,设为P,P={Nr,s},(r,s)D为P中所有非零元素对应的下标集合。这里的下标r,s是整数,可以为正、为负或为0。这样上述公式可写为:
Floyod-Steinberg算法中的P如图3。矩阵中的圆点代表N0,0(以下类似)。圆点和空自位置的参数都为0。因为像素处理顺序是从左到右、从上到下,所以量化误差只能向右方、左下、下方和右下的相邻像素扩散。
阈值r的选取通常取中间值0.5。曾有人对其他阈值做过尝试,但结果没有明显的优点,所以大多数算法仍然简单的用0.5作为阈值。现举例说明阈值比较和扩散的过程:假设当前输入像素灰度为0.7,阈值为0.5,则该点输出1。量化误差为-0.3。Floyd-Steinberg算法的参数是7/16,3/16,5/16,1/16,即将量化误差-0.3分别乘以7/16,3/16,5/16和1/16叠加到四个相邻像素如图4所示。
过滤器有很多选择,如,Jarvis、Stucki、Shiau-Fan等等,如图5所示。它们大部分是在Floyd-Steinberg过滤器基础上做的改进。因为误差扩散抖动算法会一定程度上使图像边缘模糊,有的改进过滤器可以补偿性的增强边缘,使输出图像更清晰。还有一些过滤器在不同程度上对误差扩散的速度和效果做了优化。现在的过滤器结构变得越来越复杂,但并不是过滤器越复杂,输出图像效果就越好。从整体上看,误差扩散的效果是很好的。目前已有的最好的半色调效果仍是基于误差扩散方法。误差扩散也有不足之处。从速度上看,中值阈值法对每个像素只做一次比较运算,速度很快。而误差扩散要进行大量的乘除法运算,速度相对较慢。如图6所示不同滤波器得到的误差扩散图。
图 6 不同滤波器得到的误差扩散图
clc
clear;
im=imread('test.jpg');
A=rgb2gray(im);
B=imcrop(A,[150,150,256,256]);%在图像的(150,150)处截取(256,256)大的图像
B=double(B)/255;%把矩阵由UNIT8转换为实型
I=zeros(256,256);%给数组B赋初值
subplot(121);
imshow(B,[0,1]);%显示图像B
a=7/16;
b=3/16;
c=5/16;
d=1/16;%定义误差分配规则
for i=1:256%对每行进行处理
for j=2:256%对每列进行处理
if B(i,j)<1/2%进行阈值比较
I(i,j)=0;
else
I(i,j) = 1;
end
wc=(B(i,j)-I(i,j));%定义误差
B(i,j+1)=B(i,j+1)+wc*a;
B(i+1,j-1)=B(i+1,j-1)+wc*b;
B(i+1,j)=B(i+1,j)+wc*c;
B(i+1,j+1)=B(i+1,j+1)+wc*d;%误差分配
end
end
subplot(122);
imshow(I,[0,1]);
输出结果
迭代法是一种搜索的方法,其思想是通过最小化原图像与半色调图像的误差来寻找最佳的二值输出。由这种算法得到的半色调图像质量很好,但同时也以牺牲时间开销和计算量大为代价。
迭代法中最具代表性的是 DBS(Direct Binary Search)算法,DBS 运用视觉模型,通过不断地将像素取反和与相邻 8 邻域交换来减少半色调图像与原始连续图像的视觉误差,原理如图:其中是视网膜对应角频率,L是平均亮度,c=0.525,d=3.91。e(x,y)为半色调图像与原始图像的可见误差,X为输出设备的可寻址点栅格,phvs(x,y)为点扩展函数也是H(,)的反傅里叶函数,[m,n]为原始图与半色调图之间的误差:e[m,n]=g[m,n]-b[m,n],那么(x,y)与视觉模型的关系如下式:
(x,y)为敏感度函数,
dot(x,y)为打印点轮廓函数,且
hvs(x,y)为HVS模型的对比度敏感函数(CFS)。h(x,y)为CSF函数的反傅里叶变换,D为视觉观测距离。
那么由初始半色调图像与原始图像通过视觉模型产生的的误差均方为:
则E可以按如下公式表示
其中,[m,n] 是打印可寻址网格离散点
(x,y)和
(x,y)之间的交叉校正函数。
DBS 用一个迭代的交换程序来减少误差 E ,这种算法从随机获得的半色调图像开始,按照从左到右,从上到下的顺序扫描整个半色调图像,对于每个半色调像素,评价像素取反和将其余相邻8 邻域像素交换后的影响。如果取反和交换的任何改变能减少误差,那么这种减少误差的变换被保留,反复的执行上述过程,直到整个过程没有任何改变为止,算法结束。
经过 DBS 处理后的半色调图像,几乎没有结构性纹理,而且能够很好的再现图像的丰富色调,视觉效果令人满意,如图8所示。
但由于它是一种迭代算法,在不断的搜索最佳图像二值点排列的过程中,时间开销大,计算量过大导致了它很难用于实时处理场合,尤其在宽幅面打印机中的时间开销更大。针对此问题,Lieberman和 David.J 提出一种分块策略,在进行迭代前,将最先粗糙半色调图像分割成非叠加区域,使迭代发生在块区域内部,如果在某块中出现两次迭代误差变化不大,就停止此块的迭代,这样相对减少了时间开销。FarhanA.Baqai 和 JanP.Allebach 指出在误差计算过程中的自相关和互相关函数是独立于原始图像和半色调图像,故可以将其预先计算出来,建立查找表,这样做也相对减少了时间开销,但算法计算量大的问题依然没有解决。Sagar等人提出进行 DBS 算法前先对最先的粗糙半色调进行局部分块,对每一小块寻求局部最小值,采用阈值优化和搜索优化来减少计算量,但算法是否有效还有待验证。
通过上述的三种主要半色调算法,通过表1来对比一下它们的优缺点.
表 1 三种半色调技术优缺点比较
[1] Halftone http://en.wikipedia.org/wiki/Halftone.
[2] HalfTone Screens http://demonstrations.wolfram.com/HalfToneScreens/ .
[3] Web Browser's Guide to Digital Halftoning.
[4] 王廷婷.图像半色调技术及其进展[J].印刷质量与标准化,2010,(2):8-12.
关于Image Engineering& Computer Vision更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.