二值图像显示灰度效果---半影调技术

首先,我们来看这么一个问题:

黑白针式打印机只能打印黑白两种颜色,它是怎么打印出灰色图像的呢??

回答这个问题,我们要先了解下黑白打印机的工作原理:针式黑白打印机是靠撞针击打色带来打印黑点的。

我们仔细观察打印出的灰色图像就可以看出,这些灰色区域都是一些黑点组组成的,图像暗的地方黑点就多一些,图像亮的地方黑点相对少一些。

半影调技术就是如何利用二值黑白打印机打印灰色图像的一们技术。

下面介绍具体实现半影调技术的一种方法图案法

图案法是指灰度可以用一定比例的黑白点组成的区域表示,从而达到整体图像的灰度感

黑白点的位置选择称为图案化。

计算机显示器、打印机、扫描仪等视频输出设备的一个重要指标就是分辨率,单位是dpi(dot perinch),

即每英寸点数。每英寸上的点数越多,分辨率就越高,图像就越清晰。

假设打印的时候,有一幅160×120×8bit 的灰度图,要用分辨率为200dpi×200dpi 的激光打印机将其打印到12.8×9.6 英寸的纸上。

由于这张纸最多可以打(200×12.8)×(200×9.6)=2560×1920 个点, 所以每个像素可以用(2560×1960)/(160×160)=256

个点大小的图案来表示,即一个像素可以有16×16=256 个点。如果这16×16 的方块中一个黑点也没有,就可以表示灰度256;

有一个黑点,就表示灰度255;依次类推,当都是黑点时,表示灰度0。这样,16×16 的方块可以表示257 级灰度,比要求的8bit

共256 级灰度还多了一个。所以上面那幅图的灰度级别完全能够打印出来。

如下图所示即是一个用2×2 图案来表示5 级灰度的例子。

表示的时候有图案构成的问题,即黑点打在哪里?例如,只有一个黑点时,我们可以打在正中央,

也可以打16×16 的左上角。所以最后用来表示灰度的图案可以是规则的,也可以是不规则的。一般来说,

有规则的图案比随机图案能够避免点的丛集,但有时会导致图像中有明显的线条。 

假设使用16×16 个二值点来打印一个灰度像素,如果想存储256 级灰度的图案的标准模板,就需要

256×16×16 的二值点阵,占用的空间还是相当可观的。一个更好的办法是:只存储一个16×16 整数矩阵,

称为标准图案,矩阵元素的取值从0 到255。像素的实际灰度和阵列中的每个值比较,当该值大于等于

灰度时,标准图案中标号大于或等于灰度值的对应点打一黑点。

 下面介绍一种由Limb 在1969 年提出的设计标准图案的算法。先以一个2×2 的矩阵开始

M2 为16 级灰度的标准图案,如果一个16 级灰度图像的对应像素值为11 的话,M2 所有大于11 的

对应点都要打印为黑色。M3(8×8 阵)比较特殊,称为Bayer 抖动表。M4 是一个16×16 的矩阵。 

根据上面的算法,如果利用M3,则一个像素要用8×8 的图案表示,一幅N×N 的图将变成8N×8N

大小。如果利用M4,变成16N×16N 了,也就是在相同分辨率的情况下,打印出来的图像是真实图像的

256 倍大小。如果要在保持原图大小的情况下利用图案化技术,则只需要在像素所对应的图案中取一点,

即重新采样,然后再应用图案化技术,就能够保持原图大小。对于M3 阵来说,即在原图中每8×8 个点

中取一点。但是实际上,这种方法并不可行。因为实际不知道这8×8 个点中找哪一点比较合适,而且8×8

的间隔实在太大了,生成的图像和原图肯定相差很大。 

采用如下的算法可以部分避免上面的问题。 

假设原图是256 级灰度,利用Bayer 抖动表,做如下处理:

x,y 代表原图的像素坐标,p[y][x]代表该点灰度。在显示的时候首先将灰度右移两位,变成64 级,

然后将x,y 做模8 运算,找到Bayer 表中的对应点,两者做比较,判断当前的像素输出为黑色还是白色。

可以看到,模8 运算使得原图分成了一个个8×8 的小块,每个小块和8×8 的Bayer 表相对应。小块

中的每个点都参与了比较,这样就避免了上面提到的选点和块划分过大的问题。模8 运算实质上是引入

了随机成分。

if (p[y][x]>>2) > bayer[y&7][x&7]   
then  显示白点   
else  显示黑点 

可以看到,模8 运算使得原图分成了一个个8×8 的小块,每个小块和8×8 的Bayer 表相对应。小块

中的每个点都参与了比较,这样就避免了上面提到的选点和块划分过大的问题。模8 运算实质上是引入

了随机成分。

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DLANDML

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值