FPGA图像处理12_常用算法_饱和度调节
饱和度调节
饱和度调整的算法很多,基本上是越复杂的算法,调整后的图像视觉效果越好。
由于FPGA 不善长复杂的浮点运算,另一方面由于本文定位于基本的图像处理算法,此处只选择一种比较简单的饱和度算法。
设当前输入像素值位宽为 8,RGB 三通道数值为 r、g、b,三个数值间最大值为 max,最小值为 min。
如果 max=minmax=minmax=min,则当前像素点不用调节,直接输出原像素值。
令 v=max+minv=max+minv=max+min,则有:
s={max−minmax+minv<255max−min255−max+255−minv≥255s=\begin{cases} \frac{max-min}{max+min}&v<255\\ \frac{max-min}{255-max+255-min}&v\geq255 \end{cases} s={max+minmax−min255−max+255−minmax−minv<255v≥255
设饱和度调节系数为 saturation,范围 -1.0~1.0。
如果 saturation≤0saturation\leq0saturation≤0:
rout=max+min2+(rin−max+min2)×(1+saturation)gout=max+min2+(gin−max+min2)×(1+saturation)bout=max+min2+(bin−max+min2)×(1+saturation)r_{out}=\frac{max+min}{2}+(r_{in}-\frac{max+min}{2})\times(1+saturation)\\ g_{out}=\frac{max+min}{2}+(g_{in}-\frac{max+min}{2})\times(1+saturation)\\ b_{out}=\frac{max+min}{2}+(b_{in}-\frac{max+min}{2})\times(1+saturation) rout=2max+min+(rin−2max+min)×(1+saturation)gout=2max+min+(gin−2max+min)×(1+saturation)bout=2max+min+(bin−2max+min)×(1+saturation)
如果 saturation>0saturation>0saturation>0:
α={1s−1(saturation+s)≥111−saturation−1(saturation+s)<1\alpha=\begin{cases} \frac{1}{s}-1&(saturation+s)\geq 1\\ \frac{1}{1-saturation}-1&(saturation+s)<1 \end{cases} α={s1−11−saturation1−1(saturation+s)≥1(saturation+s)<1
rout=rin+(rin−max+min2)×αgout=gin+(gin−max+min2)×αbout=bin+(bin−max+min2)×αr_{out}=r_{in}+(r_{in}-\frac{max+min}{2})\times\alpha\\ g_{out}=g_{in}+(g_{in}-\frac{max+min}{2})\times\alpha\\ b_{out}=b_{in}+(b_{in}-\frac{max+min}{2})\times\alpha rout=rin+(rin−2max+min)×αgout=gin+(gin−2max+min)×αbout=bin+(bin−2max+min)×α
在 sysgen 中使用浮点数进行计算,以保证精度,在输出前转化为无符号整数。整个设计即将前述的算法用 sysgen 模块搭起来,比较麻烦的部分在于各计算结果的时序对齐。
取得当前输入像素点 3 个颜色通道的最大值和最小值:
计算s值:
计算 α\alphaα 值:
$saturation>0 $ 的计算:
saturation≤0saturation\leq0saturation≤0 的计算:
仿真结果。
试验图片来源于:Lena
输入图像:
saturation 值为 0.4 的输出图像:
saturation 值为 -0.3 的输出图像:
FPGA图像处理12_常用算法_饱和度调节相关推荐
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
- java常用算法_五分钟记住Java常用的八种排序算法与代码实现
1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...
- fpga图像处理------常用算法(二)
图像处理的常用算法: 畸变校正 List item Hue/Sat map 色相(3D LUT ) color manipulation 颜色处理(3D LUT) ae - 自动曝光统计 (支持统计选 ...
- FPGA白平衡 自动白平衡 FPGA图像处理
FPGA白平衡 自动白平衡 FPGA图像处理 工程和算法包含以下内容: 1,MATLAB中实现图像处理. 2,verilog代码利用MATLAB联合modelsim仿真实现的图像处理. 3,小梅哥AC ...
- 常用十大算法_回溯算法
回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...
- dataframe常用操作_【Data Mining】机器学习三剑客之Pandas常用算法总结上
一.前言 看pandas之前我建议先看我的numpy总结,效果更佳. SEU-AI蜗牛车:[Data Mining]机器学习三剑客之Numpy常用算法总结zhuanlan.zhihu.com 可以 ...
- etc的常见算法_谈常用的几个机器学习算法,学懂算法也可以这么简单!
本文的目的,是务实.简洁地盘点一番当前机器学习算法.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此类模型优缺点及选择详加讨论 主要回顾 ...
- aes算法实现c语言_以C语言实现归并排序为例,谈谈五大常用算法之一的“分治法”...
分治算法,顾名思义就是"分而治之",即把规模较大的复杂问题拆分为若干规模较小的类似子问题,并逐个解决,最后再将各个子问题的解决结果合并,得到原始问题的结果的方法.这个技巧是很多高效 ...
- 文本聚类分析算法_常用的聚类分析算法综述
聚类分析定义 所谓聚类就是按照事物的某些属性,把事物聚集成类,使类间的相似性尽可能小,类内相似性尽可能大.聚类是一个无监督的学习过程,它同分类的根本区别在于分类是需要事先知道所依据的数据特征,而聚类是 ...
最新文章
- 双边滤波算法的简易实现bilateralFilter
- c语言动态链表creat函数,用create建立动态链表
- [网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster原理详解
- Linux网络编程 之 无连接和有连接通信(二)
- python flask项目过程_Python 开发过程遇到的问题
- 孟菲斯风格海报设计素材,艺术一点点
- 梯度下降-单变量线性回归-理论+代码+解释
- PHP将图片转换成base64编码,hash函数
- Sparx Systems发布Enterprise Architect 16
- 【Practical】线性空间
- 服务器上的文件都变成只读了,[求助]Excel 文档都变成只读了,请问怎么恢复?/excle变成只读文件怎么办...
- 基于劈窗算法的地表温度反演算法
- ftk挂载镜像 加vm 实现仿真
- 2022年驾驶员考试推土机司机考试模拟试题卷及答案
- rg1 蓝光危害rg0_LED蓝光危害评价的最新标准及测试方案介绍
- APK 反编译可视化修改工具IDE
- Linux忘记root密码如何找回
- 齐鲁云采入驻条件是什么
- 美女面试官问我:能说几个常见的Linux性能调优命令吗?
- 有用的 Solaris 命令 [zt]
热门文章
- 典型相关分析(Canonical Correlation Analysis, CCA)
- 网络层协议介绍与概述
- 移动端--web开发
- 中文文本分类 传统机器学习+深度学习
- JAVA高级面试题汇总
- 自动驾驶层次测试体系(单元测试/集成测试/SIL/HIL/VIL/RIL/LABCAR/实车等)
- mysql百万数据写入_快速写入百万数据
- EDG 赢了,程序员们坐不住了.....
- 小程序开发需要用到服务器么
- 蓝桥杯CT107D:关于矩阵键盘工作原理及其应用