图像随机抖动算法

article/2025/10/1 8:15:30

本文参考知乎博客:图像处理之 Dithering(https://zhuanlan.zhihu.com/p/110104674)

图像抖动(dithering)常用于颜色量化(color quantization)的后处理,即去除颜色量化产生的一些视觉上不合理的“色带”。如下所示:左侧是原图,右侧是颜色量化的结果,可以看到猫的脖子以及头部有很多不合理的色带,颜色抖动的目标就是去除这些色带,使之更加平滑。
在这里插入图片描述
图像抖动最经典的技术为误差扩散方法,可以参考博客:Floyd-Steinberg扩散抖动算法。
这里介绍另一种简单且好玩的抖动算法,随机抖动。
请添加图片描述

假设现在给定如上所示的图像,不失一般性,将颜色归一化到[0,1]范围,我们给定8种颜色的调色板正好对应RGB cube的8个顶点),分别为: ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) , ( 0 , 1 , 1 ) , ( 1 , 1 , 0 ) , ( 1 , 0 , 1 ) , ( 1 , 1 , 1 ) (0,0,0),(1,0,0),(0,1,0),(0,0,1),(0,1,1),(1,1,0),(1,0,1),(1,1,1) (0,0,0),(1,0,0),(0,1,0),(0,0,1),(0,1,1),(1,1,0),(1,0,1),(1,1,1), 也就是说8个颜色,每种颜色的三通道取值要么是0,要么是1。

1. 固定阈值抖动

给定固定值 x = 0.5 x = 0.5 x=0.5, 对于每个像素点 I p I_p Ip, 分别检查它的三个通道,并重新赋值:
I p ( r / g / b ) = { 0 I p ( r / g / b ) < x 1 I p ( r / g / b ) ≥ x I_p(r/g/b)=\left\{ \begin{aligned} 0\ \ \ \ I_p(r/g/b) \lt x\\ 1\ \ \ \ I_p(r/g/b) \geq x \end{aligned} \right. Ip(r/g/b)={0    Ip(r/g/b)<x1    Ip(r/g/b)x

固定阈值抖动代码:

def dithering_v1(input_img, save_path):quant_img = input_img.copy()quant_img[input_img > 0.5] = 1quant_img[input_img < 0.5] = 0cv2.imwrite(save_path, quant_img*255)

抖动效果如下所示,可以看到,这里原始细节信息损失很严重。
请添加图片描述

2. 独立随机抖动

对于每个像素点 I p I_p Ip, 生成对应的随机数值 x = r a n d ( ) x = rand() x=rand(), 注意这里每个像素生成一个独立的随机 x x x. 分别检查它的三个通道,并重新赋值:
I p ( r / g / b ) = { 0 I p ( r / g / b ) < x 1 I p ( r / g / b ) ≥ x I_p(r/g/b)=\left\{ \begin{aligned} 0\ \ \ \ I_p(r/g/b) \lt x\\ 1\ \ \ \ I_p(r/g/b) \geq x \end{aligned} \right. Ip(r/g/b)={0    Ip(r/g/b)<x1    Ip(r/g/b)x

随机抖动代码1:

def dithering_v2(input_img, save_path):shape = input_img.shapeinput_img = input_img.flatten()quant_img = input_img.copy()for i in range(input_img.shape[0]):x = np.random.rand()if quant_img[i] > x: quant_img[i] = 1else: quant_img[i] = 0cv2.imwrite(save_path,quant_img.reshape(shape)*255)

抖动效果如下所示,可以看到,效果比固定阈值抖动好很多,但有很多噪点。
请添加图片描述

3. 多次独立随机抖动

直接上代码,这里对每个像素生成20个随即数 x x x,生成20个颜色值并求平均。

def dithering_v3(input_img, save_path):shape = input_img.shapeinput_img = input_img.flatten()quant_img = input_img.copy()for i in range(input_img.shape[0]):color = 0n = 20for k in range(n):if quant_img[i] > np.random.rand(): color += 1quant_img[i] = color / ncv2.imwrite(save_path, quant_img.reshape(shape)*255)

结果如下所示,看起来非常接近原始图像,这是为什么呢?
请添加图片描述

注意到这里每个像素点 I p I_p Ip 的颜色是这样计算的:
令: c = 0 c = 0 c=0
第1次: x 1 = r a n d ( ) , c + = I p > x 1 x1 = rand(), c += I_p > x1 x1=rand(),c+=Ip>x1
第2次: x 2 = r a n d ( ) , c + = I p > x 2 x2 = rand(), c += I_p > x2 x2=rand(),c+=Ip>x2
第3次: x 3 = r a n d ( ) , c + = I p > x 3 x3 = rand(), c += I_p > x3 x3=rand(),c+=Ip>x3

第n次: x n = r a n d ( ) , c + = I p > x n xn = rand(), c += I_p > xn xn=rand(),c+=Ip>xn
最终, I p = c / n I_p = c / n Ip=c/n

任意一次, I p > x i , x i = r a n d ( ) I_p > xi, xi = rand() Ip>xi,xi=rand(), 可以发现 x i = r a n d ( ) < I p xi = rand() < I_p xi=rand()<Ip 的概率就是 I p I_p Ip, 比如 I p = 0.8 I_p = 0.8 Ip=0.8, 那么在[0,1]范围生成随即数 x < 0.8 x < 0.8 x<0.8的概率就是0.8,为此, I p = 1 I_p = 1 Ip=1的概率就是 0.8. 通过多次随机采样,最终的期望值就等于 I p I_p Ip本身的像素值。

因此,这个算法其实并不实用,因为颜色值已经不再是调色板中的颜色值,而是接近像素值本身。。。


http://chatgpt.dhexx.cn/article/LSDJhGIg.shtml

相关文章

时钟抖动

本文转载至&#xff1a;http://m.elecfans.com/article/646572.html 随着通信系统中的时钟速率迈入GHz级&#xff0c;抖动这个在模拟设计中十分关键的因素&#xff0c;也开始在数字设计领域中日益得到人们的重视。在高速系统中&#xff0c;时钟或振荡器波形的时序误差会限制一个…

图像“抖动”原理

转载自博主&#xff1a;NWSUAF_LiuZhenHua&#xff0c;博客地址&#xff1a;https://blog.csdn.net/wzz110011/article/details/78170516?biz_id102&utm_term%E5%8A%A8%E5%9B%BE%E6%8A%96%E5%8A%A8&utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~soba…

时钟抖动(Jitter)的基本概念 【转载】

时钟抖动&#xff08;Jitter&#xff09;的基本概念 李倩 发表于 2018-03-13 10:21:08 电子说 随着通信系统中的时钟速率迈入GHz级&#xff0c;抖动这个在模拟设计中十分关键的因素&#xff0c;也开始在数字设计领域中日益得到人们的重视。在高速系统中&#xff0c;时钟或振荡…

什么是抖动?什么叫抖动

什么是抖动?什么叫抖动 抖动的定义是“数字信号的各个有效瞬时对其当时的理想位置的短期性偏离”&#xff0c;这意味着抖动是不希望有的数字信号的相位调制。相位偏离的频率称为抖动频率&#xff0c;与抖动有密切关系的第二个参数称为漂移&#xff0c;把它定义为“数字信号的…

什么是进程的抖动 | 抖动现象

抖动现象是指如果分配给进程的存储块数量小于进程所需要的最小值&#xff0c;进程的运行将会很频繁地产生缺页中断 &#xff0c;这种频率非常高的页面置换现象称为抖动。 也可以说&#xff1a;页面在内存与外存之间频繁调度&#xff0c;以至于调度页面所需时间比进程实际运行时…

APP运营推广:新APP建设之后该怎么做好品牌运营?

APP市场推广的方法和渠道非常多&#xff0c;但是并不是每一个渠道都是适用所有APP的&#xff1b;对于一个APP市场推广的人员来说&#xff0c;这是值得认真思考的问题&#xff01;“多面出击”是大部分APP运营人员都会采取的方法&#xff0c;把能够想到能做到的各种方法途径都尝…

【创业说】零经验接手APP运营推广,聊聊这两个月我是怎么熬过来的

编者按&#xff1a;本文来自一位创业者的匿名投稿&#xff08;反复强调不要公开自己的身份&#xff09;&#xff0c;讲述了自己离职创业&#xff0c;从零开始做APP推广&#xff0c;所经历的各种推广方式&#xff0c;并且根据自己的情况评估了各个渠道的效果&#xff0c;创业容易…

APP生存法则:教你如何快速找到APP运营推广的捷径

APP的运营是一个APP能否生存的主要依靠&#xff0c;在运营的世界里有八大黄金法则&#xff0c;小编认为任何APP都可以运营这八大法则来进行推广。下面我们来了解一下移动APP运营的八大法则。 1、运营与推广一样重要 App上线一定阶段之后(基本上在10用户万以上)&#xff0c;App…

移动互联网APP运营技巧分享

资源共享是互联网发展这么多年以来的一大重要表现,如今随着移动手机的不断涌现出来,间接的也带动了移动互联网的的发展,移动互联网是未来的发展趋势,借助这一趋势,APP运营,俗话说“守业更比创业难”,APP营销重要的不是开发出实用的APP,更重要的是如何运营。APP运营是指…

如何用Xinstall来做一款App运营推广?

现在是移动互联网的时代&#xff0c;人们对于智能手机的依赖性越来越大&#xff0c;传统pc端的业务都开始加入到开发App的队伍中来&#xff0c;APP开发完之后&#xff0c;就要做APP推广了&#xff0c;APP推广的方式有很多&#xff0c;比如广播范围广、投放广告、人工转发、口碑…

盘点行业APP运营推广渠道有哪些

【活动盒子—APP活动运营工具】无论是什么样的行业&#xff0c;只要是有自己的APP应用&#xff0c;就需要寻找相关的行业APP运营推广渠道。那么在行业APP运营推广渠道中&#xff0c;作为APP运营人员的我们要怎么做呢? 【活动盒子】&#xff1a;http://www.huodonghezi.com/ 什…

运营老司机分享:APP运营推广那些事

不管是新的APP还是已经运营中的APP&#xff0c;都是需要进行拉新、促活和留存三个环节;现在的APP开发并不难&#xff0c;市场上有非常多成熟的APP第三方服务商&#xff0c;你只需要把你的开发需求提交上去&#xff0c;就会根据你的要求进行app开发;当然APP开发只是最基础的一步…

APP运营推广,如何做到“饱和攻击”

对于运营推广人员来说&#xff0c;一个APP推广项目拿到手&#xff0c;大部分就凭借着经验寻找各种各样的渠道进行推广&#xff1b;但是效果呢&#xff1f;大多数人还是没有很大的把握&#xff01; 小编认为&#xff0c;一个APP项目拿到手首先就得明确APP目标用户群体是哪些&…

APP运营推广那点事

摘自&#xff1a;http://www.woshipm.com/discuss/43828.html 你的手机里面有多少应用&#xff1f;什么样的手机应用吸引你&#xff1f;下载之后经常用还是让他si在那里&#xff1f;又或者刚点进去就卸载&#xff1f; 一款成功的应用&#xff0c;开发APP只是第一步&#xff0…

APP软件产品运营推广

运营运维系列文章 APP线上产品的日志埋点方案APP软件产品运营推广 APP软件产品运营推广 前言运营推广概念1. 拉新2. 留存3. 促活4. 营收 运营工作分类1. 基本运营2. 用户运营3. 内容运营4. 活动运营5. 渠道运营 运营阶段工作1. 前期准备工作2. 上线初期工作3. 上线后期维护 内…

浅谈APP运营推广:该如何的精准投放广告?

前言 截至今年3月底&#xff0c;据工信部的数据&#xff0c;我国的智能手机用户总数已达12.9亿&#xff0c;同比增长3.6%&#xff0c;其中4G用户一季度增加6千万户&#xff0c;我国4G用户已达1.6亿户。伴随着移动互联网的快速发展&#xff0c;衔接有软件和硬件升级&#xff0c…

APP运营推广

app运营推广是指对app运营过程的计划、组织、实施和控制&#xff0c;是与产品生产和服务创造密切相关的各项管理工作的总称&#xff0c;从另一个角度来讲&#xff0c;运营管理也可以指为对生产和提供公司主要的产品和服务的系统进行设计、运行、评价和改进的管理工作。这样解释…

史上最全最详细的APP运营推广策划方案

一款成功的应用&#xff0c;开发APP只是第一步&#xff0c;比前者更重要的是APP运营。APP就像是一个需要不断包装和投入的“明星”&#xff0c;需要不断制造“话题”来吸引用户&#xff0c;靠一版版的优化升级和足够的内容、活动来支撑&#xff0c;否则很快就会泯灭于人们的视野…

HTML5基础入门学习

HTML5基础入门学习&#xff1a;学习html5首先要了解什么是html5&#xff0c;然后&#xff0c;我们要下载一个html编辑器&#xff0c;并且要对html各个标签熟练掌握&#xff0c;灵活运用&#xff0c;另外也可以参考一些html资料&#xff0c;比如千锋教育编著的《HTML5从入门到精…

HTML5学习入门

目录 5.1HTML5简介 5.1.1HTML5是什么 5.1.2HTML5的特性 1、绘图画布&#xff1a; 2、多媒体&#xff1a; 3、地理定位&#xff1a; 4、数据存储&#xff1a; 5.2HTML的语法 1、HTML5标签 2、HTML5的文档结构 5.1HTML5简介 5.1.1HTML5是什么 HTML5是HTML最新的修订版…