打印机模拟(灰度篇)
零.前言
中山大学 软件工程 课程多媒体技术作业——图像抖动。包含技术简介和python代码实现。写于2017年9月23日。
一.背景
打印图片时,普通的黑白针式打印机是不能打出我们常用的256级灰度的点来的,因为针打是靠针击打色带从而在纸上形成黑点的,这样的设备只能选择打印一个点或者不打印一个点,因此不会打出灰点来。但如果我们需要的正是一个灰度图像,难道只能非黑即白了吗?技术上我们亟需解决这样的问题,而由此诞生图像抖动技术能让我们通过黑白两色,看到一张正常的灰色图像。
二.方法
图像抖动只要利用的是人眼的特性。在一个密集的二值点阵中,0代表的黑色点越密集,图像在这个位置附近显得颜色越深,即深灰色乃至黑色。反之,1代表的白色的点越密集,图像在这个位置附近显得颜色越浅,即浅灰色乃至白色。这实际是种误差扩散的方法。
在打印一张灰度级数为256的图片时时,每个像素用一个矩阵来表示它的灰度,如果要无差异的表示一个像素的颜色的话,我们需要用一个16*16的矩阵。因为这样一个矩阵可以出现0到256个1或0,即能表示257个灰度值,甚至多于256。
当然也可以用小于这个大小的矩阵表示,但越小的矩阵失真的程度就越大。
还有一种算法是,缩减灰度级别后,将新得到的像素值和原像素值的差按比例(可以均分)分到该点的领域上,即周围的八个像素点。这样也能使图像变得较平滑。
三.重点介绍
我重点