0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

误差扩散抖动算法和阈值抖动算法的原理

恩智浦MCU加油站 来源:恩智浦MCU加油站 2025-11-03 09:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式GUI开发中,低色深(如RGB565)常常导致图片渐变出现明显色带。

今天给大家带来一个好消息!

GUI Guider现已支持LVGL图片抖动处理,内置两种主流算法:Floyd-Steinberg误差扩散抖动和阈值抖动。

本文将结合源码实现,带你深入理解这两种算法的原理、特点与工程应用,让你的界面更细腻、更专业!

什么是图片抖动(Dithering)

想象一下,你有一盒256色的彩笔,但现在只能用16色来画同一幅画。直接的做法是找到最接近的颜色替代,但这样会产生明显的色彩分层和失真。

抖动算法就像一个聪明的艺术家,通过巧妙地安排像素的分布,让人眼在一定距离下看到接近原始色彩的效果。这就是"空间换色彩"的思想。

误差扩散抖动算法

原理简介:

Floyd-Steinberg算法是一种经典的误差扩散抖动方法。其核心思想是:当前像素的量化误差不应浪费,而应传递给邻近像素,从而整体提升视觉效果。

实现算法流程:

4cbde426-b52a-11f0-8c8f-92fbcf53809c.png

1.将每个像素的RGB值映射到21个等级(step约为12.75),以适应低色深显示。

2.计算原始像素与量化后像素的误差。

3.按照Floyd-Steinberg权重,将误差分配给右侧、正下、左下和右下的像素。

源码实例片段:

constquantize= (value) => {
conststep =255/ (21-1);
returnMath.round(value / step) * step;
};
//
误差扩散到邻近像素
diffuseError(1,0,7/16);//
右侧
diffuseError(-1,1,3/16);//
左下
diffuseError(0,1,5/16);//
正下
diffuseError(1,1,1/16);//
右下
算法特点:

4d3488d8-b52a-11f0-8c8f-92fbcf53809c.png

阈值抖动算法

原理简介:

阈值抖动采用预定义的阈值矩阵,根据像素在矩阵中的位置决定其量化方式。每个像素独立处理,天然支持并行计算。

4d8977e4-b52a-11f0-8c8f-92fbcf53809c.png

实现流程:

阈值矩阵设计:

使用8×8的阈值矩阵,分别针对RGB三个通道设计不同的阈值分布:

letred_thresh = [
1,7,3,5,0,8,2,6,
7,1,5,3,8,0,6,2,
// ... 64
个值的
8x8
矩阵
]

这种分离式设计有特殊考虑:

4e0215dc-b52a-11f0-8c8f-92fbcf53809c.png

2. 基于像素位置计算阈值矩阵索引

let threshold_id = ((y & 7) << 3) + (x & 7);

3. RGB565格式适配:针对RGB565格式,分别对红、绿、蓝通道做位掩码处理,保证色彩映射准确。

算法特点:

4e5821f2-b52a-11f0-8c8f-92fbcf53809c.png

算法对比与选择建议:

4eb18526-b52a-11f0-8c8f-92fbcf53809c.png

若在GUI Guider中遇到图片显示出现色带问题,建议在图片属性设置中尝试更换不同的图像渲染算法,以改善图像质量:

4f06d6c0-b52a-11f0-8c8f-92fbcf53809c.png

实际应用建议:

渐变和照片类图片优先选择Floyd-Steinberg算法,追求最佳视觉体验

UI图标、纯色块、实时渲染场景优先选择阈值抖动算法,追求极致效率

总结

两种抖动算法各有优势:

Floyd-Steinberg-适合追求高质量的场景,特别是照片和复杂图像

阈值抖动-适合对性能要求较高的实时应用和UI图标

在使用GUI Guider的嵌入式GUI开发中,根据具体的硬件平台和应用需求选择合适的算法,可以在性能和视觉效果之间找到最佳平衡点。理解这些算法的原理,不仅能帮助我们更好地使用现有工具,还能在需要时进行定制优化,打造更出色的用户界面体验。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20149

    浏览量

    328861
  • 算法
    +关注

    关注

    23

    文章

    4761

    浏览量

    97146
  • GUI
    GUI
    +关注

    关注

    3

    文章

    693

    浏览量

    42852

原文标题:告别色带!从GUI Guider无色带渐变开始

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    抖动的基础知识

    (或交叉点)。这取决于时间参考是来自于采样数据,还是由外部提供。如果抖动发生在采样点跳变阈值的“错误位置”,并且导致接收电路“错解”了该比特位发射时的真实情况,那么就会出现传输误差。图 1 就是对这种情形的描述。
    的头像 发表于 11-29 18:26 4339次阅读
    <b class='flag-5'>抖动</b>的基础知识

    STM32的ADC项目应用,用什么算法滤波和稳定数据抖动

    STM32的ADC项目应用,大家都用什么算法滤波和稳定数据抖动。 ADC数据的抖动有时候应用在项目上让人很是头疼,什么度娘十大滤波算法也是要斟酌选用。 单片机项目设计中,外设ADC的
    发表于 04-17 08:20

    抖动测量三种方法

    。若网络、网络元件、子系统或IC的BER超过可接受的限制,则必须找到误差源。 大多数工程技术人员希望用仪器组合来跟踪抖动问题,先用BER测试仪、然后用抖动分析仪或示波器来隔离误差源。
    发表于 08-02 16:20

    抖动算法

    最近在做有关铁路目标检测的研究,用红外CCD的视频,因为CCD是放在火车上的,火车会抖动,所以录的视频也是有很大的抖动,有没有什么好的算法,可以消除抖动呢,谢谢大神了,指点下!!
    发表于 07-18 08:50

    超宽带通信中定时抖动抑制算法的研究

    本文研究了直扩超宽带通信系统的关键技术----定时抖动及其抑制方法,主要分析了定时抖动产生的原因、分布规律和各种有效的抑制方法。文中第一次对DS-UWB 系统定时抖动产生的各
    发表于 08-10 14:24 15次下载

    考虑基线抖动的双天线干涉SAR 原始回波仿

    该文针对双天线干涉SAR 系统基线抖动的特点提出了一种能够精确仿真基线抖动影响的改进二维频域原始回波生成算法。该算法通过Taylor 展开近似将基线
    发表于 11-11 15:38 11次下载

    自适应抖动调制图像水印算法

    量化步长是影响量化水印算法性能的最关键因素之一。该文根据JPEG 量化表自适应地选择抖动调制中的量化步长,提出了一种新的自适应量化水印算法;并将JPEG 量化表和Watson 感知模
    发表于 11-21 11:37 13次下载

    抖动的概念和抖动的测量方法

    抖动的概念和抖动的测量方法 在数字通信系统,特别是同步系统中,随着系统时钟频率的不断提高,时间抖动成为影响通
    发表于 11-27 08:28 5064次阅读
    <b class='flag-5'>抖动</b>的概念和<b class='flag-5'>抖动</b>的测量方法

    什么是抖动?什么叫抖动

    什么是抖动?什么叫抖动 抖动的定义是“数字信号的各个有效瞬时对其
    发表于 11-27 08:40 8061次阅读
    什么是<b class='flag-5'>抖动</b>?什么叫<b class='flag-5'>抖动</b>

    抖动/歪斜,抖动/歪斜是什么意思

    抖动/歪斜,抖动/歪斜是什么意思 什么是抖动(jitter) 所谓jitter就是一种抖动。具体如何解释呢?让我
    发表于 03-22 14:42 2360次阅读

    基于Tail Fit算法抖动分离

    提出了一种基于Tail-Fit算法抖动分离技术,给出了该算法的拟合结果,验证了算法的有效性。
    发表于 10-19 14:42 33次下载
    基于Tail Fit<b class='flag-5'>算法</b>的<b class='flag-5'>抖动</b>分离

    时钟抖动的基础

    介绍 此应用笔记侧重于不同类型的时钟抖动。时钟抖动是从它的时钟边沿偏差理想的位置。了解时钟抖动非常重要在应用中,因为它起着关键作用,在时间预算一个系统。 随着系统数据速率的增加,定时抖动
    发表于 04-01 16:13 6次下载

    抖动的位同步环路设计(GARDNER)

    不受载波相偏影响、实现简单等优点,在数字同步通信系统中被广泛应用。然而传统Cardner算法的定时误差检测在环路收敛后仍存在较大的白噪声,造成定时误差抖动较大,继Cardner后的国内
    发表于 11-02 15:22 1次下载
    降<b class='flag-5'>抖动</b>的位同步环路设计(GARDNER)

    相位抖动是从哪来的?通信中有哪些抖动

    发射端涉及到抖动的来源有:Thermal Noise(随机抖动), Duty Cycle Distortion(占空比失真), Power Supply Noise(随机抖动和周期性抖动
    的头像 发表于 05-31 16:43 2145次阅读
    相位<b class='flag-5'>抖动</b>是从哪来的?通信中有哪些<b class='flag-5'>抖动</b>?

    电机抖动大怎么解决

    电机抖动大怎么解决 电机抖动大是指在电机运转时发生了震动或抖动现象,它主要是由于电机失衡、机械系统不稳定、设计误差或部件故障等因素造成的。如果不及时解决,电机
    的头像 发表于 08-28 18:24 6154次阅读