ESP8266驱动电子墨水屏显示图片:图像抖动取模

  • Post author:
  • Post category:其他




硬件设备

  • ESP8266
  • Epaper_2.13 b/w(汉朔电子价签)
  • SPI驱动板



图片显示

这里墨水屏的驱动程序采用微雪的示例程序进行驱动

微雪资料:

ePaper-2.13

.

这里说明一下在进行图片显示过程中遇到的问题,微雪资料中给除了图片的取模软件:

Image2Lcd图片取模软件


开始使用取模软件时感觉还不错,但是在逐渐使用画面比较复杂的图片进行展示时,就发现使用取模软件进行取模时,软件的默认算法采用图像的二值化处理,虽然软件提供了不同阈值下的二值化调整,但是在使用比较复杂的图片进行取模时,得到的图像信息就非常不可观了:

图像背景单一,轮廓明显

背景相对单一

图像背景相对复杂,轮廓信息模糊

图像内容复杂

由此可见,在图像内容相对复杂之后,二值化的结果往往就不尽人意,在这种情况下,图像抖动就可以发挥相当的作用。



抖动的理解

所谓抖动,在看过相关实现代码后,我的看法就是将原本确定的那个二值化阈值任意化,将原本的阈值用一个不确定的随机数进行代替,在同样输出0与255像素的图片上增加一定的任意性,由此实现在图像灰度图中,值越接近255的像素有更大可能二值化为255,而那些相对接近0的像素值也有更大可能二值化为0。

由此可见,原本二值化为0的像素点,也有小概率出现值为255的像素,同理在原本二值化为255的点也出现了为0的像素,由此达到一定的模拟灰度的效果。

简单的抖动处理有一下的代码展示:

# 图像抖动
def RandomDithering(img,dither):
    x,y = img.shape
    ret = img.copy()
    for i in range (x):
        for j in range(y):
            ran = random.randint(0,255)%(2*dither)-dither
            if ran+ret[i][j]>=128:
                ret[i][j] = 255
            else:
                ret[i][j] = 0
    return ret

通过调整这里的dither,可以实现对抖动的噪点进行控制,详细内容参考:

抖动法显示灰度图像(Qt 实现)



墨水屏图片抖动取模

至此,我们已经明确了在实验中遇到的问题以及解决方法,于是我写了一个python实现的图片取模程序。

抖动效果展示

处理过程
抖动效果图

取模函数

# 写入文件
def Write_C(data):
    filename = imgname.split('.')[0]+".c"
    with open(filename,'w') as obj:
        obj.write("const unsigned char "+ imgname.split('.')[0] +"[] {\n"+ data +"};")
# 进制转换        
def sethex(summ):
    summ = int(summ)
    hexstr = hex(summ)
    if len(hexstr) == 3:
        restr = "0x0"+hexstr[2]
    else:
        restr = hexstr
    return restr+","
# 写出c文件
def OutPut_C(img):
    x,y = img.shape
    data = ''
    dith = img[::-1,:]
    dith[dith>128] = 1
    time=8
    summ = 0
    for i in range(y):
        for j in range(x):
            summ += dith[j][i]*(2**(time-1))
            time -=1
            if time == 0:
                data += sethex(summ)
                time = 8
                summ = 0
        data += sethex(summ)
        time = 7
        summ = 0
        data += '\n'
    Write_C(data)

写出的程序格式仿照取模软件的结果

取模生成.c文件
在这里插入图片描述

由于我接触图像处理时日不多,实在时实力有限,目前仅实现了对250*122像素下的图片取模操作,代码写在jupyter中也没来得及整理,我将源代码上传到了git中,欢迎借鉴、优化与指正!

最后放上写入ESP8266的效果展示

请添加图片描述

git地址:https://github.com/LNfromNorth/ESP8266_Epaper2_13



版权声明:本文为weixin_52168861原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。