数字加网(一)— —概念及分色合成
数字加网(二)— —调幅加网算法及实现
数字加网(三)— —调频加网算法及实现
调频加网算法主要是抖动法与误差扩散法,前者又可以分为有序抖动和无序抖动,是点过程;后者是相邻过程。
有序抖动算法
Bayer抖动算法
算法公式
最具代表性的有序抖动算法,是1973年Bayer提出的Bayer算法,其递推公式如下:
令D1=0,n=2可以求出抖动矩阵
然后就可以继续推导出D4的抖动矩阵,推导过程如下
同理,我们可以推出D8的抖动矩阵
【注】一般处理采用D8的抖动矩阵
Python代码
### Digital Screening
### Author: Sin_Geek
### Date: 2015-05-17
from PIL import Image
time = 8
K = 8
L = 8
N = 63
im = Image.open('lena0.jpg').convert('L')
im2 = Image.new("1",(im.size[0]*time,im.size[1]*time))
#Bayer Ordered Dithering
Mask=[0,32,8,40,2,34,10,42,
48,16,56,42,50,18,58,26,
12,44,4,36,14,46,6,38,
60,28,52,20,62,30,54,22,
3,35,11,43,1,33,9,41,
51,19,59,27,49,17,57,25,
15,47,7,39,13,45,5,37,
63,31,55,23,61,29,53,21]
for m in range(im2.size[1]):
k = m % K
for n in range(im2.size[0]):
l = n % L
pix = int(im.getpixel((m/time,n/time))/255.0*N+0.5)
if pix > Mask[k*L+l]:
im2.putpixel((m,n),1)
else:
im2.putpixel((m,n),0)
im2.save("FM_Bayer.bmp")
效果图
Halftone抖动算法
算法公式
其抖动矩阵如下:
Python代码
### Digital Screening
### Author: Sin_Geek
### Date: 2015-05-17
from PIL import Image
time = 8
K = 8
L = 8
N = 63
im = Image.open('lena0.jpg').convert('L')
im2 = Image.new("1",(im.size[0]*time,im.size[1]*time))
#Halftone Ordered Dithering
Mask=[28,10,18,26,36,44,52,34,
22,2,4,12,48,58,60,42,
14,6,0,20,40,56,62,50,
24,16,8,30,32,54,46,38,
37,45,53,35,29,11,19,27,
49,59,61,43,23,3,5,13,
41,57,63,51,15,7,1,21,
33,55,47,39,25,17,9,31]
for m in range(im2.size[1]):
k = m % K
for n in range(im2.size[0]):
l = n % L
pix = int(im.getpixel((m/time,n/time))/255.0*N+0.5)
if pix > Mask[k*L+l]:
im2.putpixel((m,n),1)
else:
im2.putpixel((m,n),0)
im2.save("FM_Halftone.bmp")
效果图
Screw抖动算法
算法公式
其抖动矩阵如下:
Python代码
### Digital Screening
### Author: Sin_Geek