数字加网(三)— —调频加网算法及实现

本文详细介绍了数字加网中的调频加网算法,包括有序抖动和无序抖动。有序抖动部分,讨论了Bayer、Halftone、Screw和CoarseFatting四种算法的原理、Python代码实现和效果展示。无序抖动则通过全局和局部伪随机抖动算法来说明,最后探讨了误差扩散算法,如Floyd-Steinberg、蛇形Floyd-Steinberg、Burkes、Jarris-Judice-Ninke和Stucki算法,每种都包含公式、代码和效果展示。
摘要由CSDN通过智能技术生成

数字加网(一)— —概念及分色合成
数字加网(二)— —调幅加网算法及实现
数字加网(三)— —调频加网算法及实现


调频加网算法主要是抖动法与误差扩散法,前者又可以分为有序抖动和无序抖动,是点过程;后者是相邻过程。

有序抖动算法

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
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值