数字图像处理编成入门笔记——第四章图象的半影调和抖动技术


1.     黑白二值图:只由黑点和白点组成,表现出灰色图象的效果。黑点越多,图像就暗点,反之,图像就亮点。

2.     半影调技术:由二值图象显示出灰度效果的方法。它的一个主要用途就是在只有二值输出的打印机上打印图象。主要的两种方法:图案法和抖动法

 

4.1 图案法

1. 图案法是指灰度可以用一定比例的黑白点组成的区域表示,从而达到整体图象的灰度感。黑白点的位置选择称为图案化

2. 分辨率,单位是dpi(dot per inch),即每英寸点数,点数越多,分辨率就越高,图象就越清晰。显示器的尺寸(英寸)是指对角线。

3. 像素点灰度的表示方法(图案):如果这16×16的方块中一个黑点也没有,就可以表示灰度256;有一个黑点,就表示灰度255;依次类推,当都是黑点时,表示灰度0。这样,16×16的方块可以表示257级灰度。

4. 图案的构成:有规则的图案和随机的图案。一般情况下,有规则的图案比随即图案能够避免点的丛集,但有时会导致图象中有明显的线条。

5. 标准图案一个整数矩阵。例如要表示256级灰度,则其中的每个值从0255。图象的实际灰度和阵列中的每个值比较,当该值大于等于灰度时,对应点打一黑点。

6. 设计标准图案的算法:(由Limb1969年提出的)

先以一个2×2的矩阵开始:设M1= ,通过递归关系有Mn+1= ,其中MnUn均为2n×2n的方阵,Un的所有元素都是1。根据这个算法,可以得到M2= ,为16级灰度的标准图案。

M3(8×8)比较特殊,称为Bayer抖动表M4是一个16×16的矩阵。

 

7. 不改变原图的大小下,使用利用图案化技术:设原图是256级灰度,利用Bayer抖动表,做如下处理:

if (g[y][x]>>2) > bayer[y&7][x&7] then 打一白点 else 打一黑点

其中,x,y代表原图的象素坐标,g[y][x]代表该点灰度。首先将灰度右移两位,变成64级,然后将xy做模8运算,找到Bayer表中的对应点,两者做比较,根据上面给出的判据做处理。模8运算使得原图分成了一个个8×8的小块,每个小块和8×8Bayer表相对应。

 

4.2 抖动法

1. 规则抖动:如上面提到Bayer表算法。优点是算法简单;缺点是图案化有时很明显,这是因为取模运算虽然引入了随机成分,但还是有规律的。

 

2. Floyd-Steinberg算法:

假设灰度级别的范围从b(black)w(white),中间值t(b+w)/2,对应256级灰度,b=0,w=255,t=127.5。设原图中象素的灰度为g,误差值为e,则新图中对应象素的值用如下的方法得到:

if g > t then

打白点

e=g-w

else

打黑点

e=g-b

3/8 × e 加到右边的象素

3/8 × e 加到下边的象素

1/4 × e 加到右下方的象素

  但在这个算法中,因为e有可能是负数,为了防止得到的值超出char能表示的范围,我们使用了一个int类型的缓冲区存储新值。

  要注意的是,误差传播有时会引起流水效应,即误差不断向下,向右累加传播。解决的办法是:奇数行从左到右传播,偶数行从右到左传播。

 

4.3 bmp文件转换为txt文件

1. 原理:首先将位图分成同样大小的小块,求出每一块灰度的平均值,然后和每个字符的灰度做比较,找出最接近的那个字符,来代表这一小块图象。

2. 字符灰度的确定方法:打开记事本(notepad),输入字符“1”,选定该字符,使其反色。按Alt+PrintScreen键拷贝窗口屏幕。打开画笔(paintbrush),粘贴;然后把图放到最大(×8),打开“查看”→“缩放” →“显示网格”菜单。每个字符的面积是8×16(宽×高),所以一个字符的灰度值可以用如下的公式计算(1-所占的黑点数/(8×16))×255

   在努力,就是向成功一点点迈进!加油~~~