1.像处理(十一)exposure fusion 像曝光融合
2.DIY vue3组件: 动手实现高斯模糊遮罩层的高斯高对话框效果
3.SIFT算法原理与源码分析
4.新鲜资讯|AMD FidelityFX™ SDK 1.0现已上线GPUOpen
5.如何用ps做出玻璃的效果?
6.OpenCV:吊打高斯模糊的StackBlur加入
像处理(十一)exposure fusion 像曝光融合
本意是为了学习HDR,高动态范围成像,模糊模糊但HDR概念对我来说太复杂了,源码涉及到硬件和软件。线生我的高斯高目标是跳过硬件和tone mapping,只做最简单的模糊模糊体育游戏ai源码多曝光融合,如下列图像
融合成一张
搜索曝光融合,源码出现的线生是《exposure fusion》这篇文章,像素级别的高斯高融合,再加上多尺度的模糊模糊平滑处理,从现在的源码眼光来看,是线生非常简单的,OpenCV也实现了这个算法,高斯高在lightroom中也有应用。模糊模糊
尽管原理简单,源码但实现上有坑,C++写了好几遍过不了,换成Python也错误,看了官方的matlab源码才知道坑。
论文提出了三种计算每个像素融合权重的的方法
对比度
在过曝图像或严重低曝光的区域,图像都基本是或0,因此这些区域是很平滑的,梯度信息几乎为0,这些也是曝光融合中要舍弃的区域——过曝部分缺乏细节,低曝光区域缺乏细节和亮度。因此,论文提出用laplace算子提取图像的梯度信息,梯度信息越小的像素在融合时占据的比重就越小,相反梯度信息越大的像素的比重就越大。对输入的第[公式]张图像[公式]
[公式]
饱和度
同样针对过曝或严重低曝光,二者的饱和度是接近于0的,而那些饱和度高的区域常常是需要保留的区域,因此论文通过三通道的标准差来衡量饱和度大小,以此得到不同的比重
[公式]
亮度
亮度越接近0或者的,很可能就是处在过曝或严重低曝光区域,而亮度在附近的常常可以认为是曝光良好的区域,这些区域的信息在融合过程中要尽量保留,比重尽量大,如下
[公式]
[公式]是方差,论文中取0.2。以上公式是我具体实现时使用的,三通道的比重相乘,为了简单,也可以提取出YCrCb通道,用Y通道算也可以。良好曝光不一定取0.5。
上面是人为提出的一些先验知识,接下来验证下是否有效
可以看出,对于严重低曝光的图像,响应值比较高的就是光源附近的细节,这些细节得以保留,而过曝图像往往在这些地方是没有细节的
同上,以亮度为例,有缘网 信源码该图在天空区域的曝光是良好的,而且具有一定的细节,得以保留
对于这一类局部过曝的图像,背光区域反而得到了较好的曝光,所以图中气球的细节和亮度响应值比较高,得以保留,而天空和光源部分的灰度值偏离、梯度也较小,因此这些过曝的区域的响应值(比重)很小,在融合时被舍弃。
上面根据对比度、饱和度、曝光三方面可以得到每个像素点在融合时的比重,三者合在一起
[公式]
为了防止多张图像融合,出现过高或者过低的值,要对[公式]进行归一化
[公式]
多张图像[公式],各自对应一张归一化的比重图[公式],融合
[公式]
上面的方法非常简单,但会得到十分粗糙的结果。我在具体实现时,得到的结果会出现很多黑色和纯白色的斑点(灰度值为0),而且存在一些光晕,如下:
经过我追本溯源,发现这是由于多张图像之间的灰度跳变太大导致的——假设现在有图像序列[公式],在点[公式]处,比重值分别是[公式],因此在融合时,[公式]点的灰度值主要取决于[公式];在旁边一个点,[公式]的比重值却是[公式],融合时就主要取决于[公式],而从[公式]的灰度值跳变太大,因此最后看起来有很多噪声。相邻点的比重相差会这么大,个人看法是比重由对比度、饱和度、亮度相乘得到,实际上,很多区域都是接近于0,差不多1e-4的值,三个相乘量级就到了1e-,任意一个指标突然变大变小,权重就一边倒了,基本集中在某一张图像上。理想情况是一系列对比度、饱和度、亮度平滑变化的图像,就不会出现这种问题,但实际也不可能拍这么多精细的图像。
如何解决?一个很直观的想法就是对每张图的权重图做平滑处理,缓解灰度跳变,重新归一化后,再融合,2021小程序源码效果如下:
看得出来,有所改善,但还是不够平滑,存在一定程度的光晕,继续加大力度
又好一点了,但天空还是很明显
好像又好一点了!但还是存在一些光晕(后面怎么解决的还不清楚)。
但是每次都对原始分辨率做这么大的计算吗?
这又回到了上次总结的拉普拉斯金字塔融合,构造金字塔解决分辨率过大和滤波核过大的问题,这也是论文提出的方法
使用laplace金字塔,对每张图像分解出laplace金字塔,对应的比重图分解出高斯金字塔,根据比重对laplace金字塔做融合,从低分辨率开始上采样叠加同尺度的融合后laplace细节,即可得到结果,如下:
效果有点惊艳,不仅融合了多张图像中的细节,还保持了良好的曝光,和之前的对比还是很明显的,如过曝这个区域的细节还是很不错的!但为什么和之前直径的高斯模糊相比,解决了光晕,这一点是我暂时无法理解的。
算法十分简单,只要按部就班算出每个点的对比度、饱和度、曝光,结合起来,再加一个laplace金字塔分解,问题貌似就解决了。但我在实际写的时候,得到的结果却是这样的:
饱和度太高了,而且细节也没有得到保留。。。。。。一开始还以为是C++,我索引写错了之类的,重写了几遍都过不了,换成python也是一样的,也是错的,后面还是参考了官方的matlab代码,才发现不同:
即下面两张图的对比
当我把上采样的对象改成了官方的形式,就正常了。
至于为什么会这么差,我想可能是因为一路上采样,丢失的信息太多了,所以采用之前的高斯金字塔的次一级分辨率上采样可以减少信息损失。
代码见我的github
Python 3
鬼影
本篇讨论的多曝光图像融合,默认都是emlog自动采集源码对齐的,但实际上不同时间拍的图像,会因相机抖动和环境的风吹草动,而导致内容有差别,使得最后的融合结果可能出现鬼影,而鬼影(ghost effect)也是HDR融合要解决的主要问题之一。
移动
考虑下面这个例子
可以看到画面中的三个人物都存在较明显的移动,经过上面的exposure fusion像素级融合,就会得到下面的结果
这一类情况下,不保证像素级的对齐,就会出现鬼影。
模糊
和多曝光融合类似的是多焦点融合,不同图像存在不同的局部模糊
保留对比度、饱和度,不计算曝光,得到的融合结果如下:
效果感觉还行,但又不很行 ! 如IMAGE块区域,第一张图有点类似于运动模糊的效果了,在曝光融合这里就近似于"没对齐",因此融合的结果有一些虚影、鬼影 !
虽然存在如上问题,但这个方法还是给后续的一些研究提供了思路,融合不断频段的信息做图像融合,不仅仅是曝光融合,多焦点融合等。
参考资料
DIY vue3组件: 动手实现高斯模糊遮罩层的对话框效果
前言 & 一点点废话
最近迷上了前端设计,想借此机会放松一下平日里繁忙的AI工作。帮朋友重构班级主页网站时,发现Vue3的模块化设计极为便捷,许多组件和钩子可以直接复用。因此,我决定整理并分享个人设计的组件实现。未来几篇文章将围绕这一主题展开。
你可能会问:为什么自己写组件,而不是直接使用像Element-Plus这样的库呢?答案是:尽管Element-Plus功能丰富,但其接口有限,样式定制难度较高,可能无法满足设计爱好者的需求。另外,大型组件库体积较大,对于追求轻量级和高效应用的开发者来说,自定义HTML5、CSS3与Vue3组件可能更为合适。我的组件库旨在简化复用流程,提供直观的特效展示,让使用者在短时间内上手,并能根据需求进行个性化定制。
为了帮助读者快速了解并复用组件,我将文章结构安排如下:
组件效果展示
登录界面和切换背景的对话框采用高斯模糊遮罩层,设计灵感源自苹果的特效,旨在吸引用户聚焦于对话框内容。
用法指南
参数设置说明:
槽位(Slot):用于嵌入自定义内容。
模板(Template)部分:展示基本结构与布局。手机指针位置源码
脚本(Script)部分:实现逻辑功能与状态管理。
只需通过设置showDialog为true即可激活对话框。
源码示例
请根据需求调整mainColor和backFilter变量。以下是一个可行的样式方案,供参考:
SIFT算法原理与源码分析
SIFT算法的精密解析:关键步骤与核心原理
1. 准备阶段:特征提取与描述符生成 在SIFT算法中,首先对box.png和box_in_scene.png两张图像进行关键点检测。利用Python的pysift库,通过一系列精细步骤,我们从灰度图像中提取出关键点,并生成稳定的描述符,以确保在不同尺度和角度下依然具有较高的匹配性。 2. 高斯金字塔构建计算基础图像的高斯模糊,sigma值选择1.6,先放大2倍,确保模糊程度适中。
通过连续应用高斯滤波,构建高斯金字塔,每层图像由模糊和下采样组合而成,每组octave包含5张图像,从底层开始,逐渐减小尺度。
3. 极值点检测与极值点定位在高斯差分金字塔中寻找潜在的兴趣点,利用邻域定义,选择尺度空间中的极值点,这些点具有旋转不变性和稳定性。
使用quadratic fit细化极值点位置,确保匹配点的精度。
4. 特征描述与方向计算从细化的位置计算关键点方向,通过梯度方向和大小统计直方图,确定主次方向,以增强描述符的旋转不变性。
通过描述符生成过程,旋转图像以匹配关键点梯度与x轴,划分x格子并加权叠加,生成维的SIFT特征描述符。
5. 精度校验与匹配处理利用FLANN进行k近邻搜索,执行Lowe's ratio test筛选匹配点,确保足够的匹配数。
执行RANSAC方法估计模板与场景之间的homography,实现3D视角变化适应。
在场景图像上标注检测到的模板并标识SIFT匹配点。
SIFT的独特性:它提供了尺度不变、角度不变以及在一定程度上抵抗3D视角变化的特征,是计算机视觉领域中重要的特征检测和描述算法。新鲜资讯|AMD FidelityFX™ SDK 1.0现已上线GPUOpen
欢迎使用AMD FidelityFX软件开发工具包(SDK)! AMD FidelityFX SDK是一个易于集成的解决方案,可将AMD FidelityFX技术应用于游戏中,无需复杂移植过程。它是我们提供给开发者的新图形中间件。 自从发布AMD FidelityFX技术以来,我们已成为业界领先的技术合作伙伴之一,覆盖了多款知名游戏。随着技术发展和广泛应用,我们致力于简化开发者集成体验。AMD FidelityFX SDK为此成果。 这个SDK特点如下: 标准、风格一致,友好易用。 简便生成应用,专注于核心算法。 稳定框架适用于各种API,支持多平台。 丰富文档可参考: gpuopen.com/manuals/fid... 预构建解决方案简化集成,集成仅需二十行代码。 新增三种效果: AMD FidelityFX 模糊 1.0:基于计算的高斯模糊技术。 AMD FidelityFX 景深1.0:重现相机镜头效果。 AMD FidelityFX 镜头特效1.0:支持多种镜头和胶片效果。 现有技术更新并纳入SDK: AMD FidelityFX CACAO 1.3:高度优化环境光遮蔽效果,引入对比纯AO和最终渲染结果功能。 AMD FidelityFX CAS 1.1:低开销自适应锐化算法,新增选择上采样功能。 FSR 1.1和FSR 2.2.1:图像放大解决方案,合并为一个示例。 AMD FidelityFX LPM 1.3:HDR映射解决方案,Vulkan支持,修复操作系统和交换链问题。 AMD FidelityFX 并行排序1.2:优化的基数排序实现。 AMD FidelityFX SPD 2.1:优化的单pass下采样器。 AMD FidelityFX SSSR 1.4和AMD FidelityFX 降噪器 1.2:反射和阴影质量优化。 AMD FidelityFX 可变着色1.1:可变速率着色集成。 示例集成代码已更新,包含混合光线追踪、反射、阴影等。 使用SDK步骤: 创建或链接SDK库到解决方案。 查询内存需求。 分配内存并初始化。 创建功能上下文。 运行时使用上下文。 释放内存。 完整源代码和二进制文件在GitHub上发布,查看丰富文档,访问GPUOpen上的新主页获取更多信息。如需反馈或建议,请联系我们,所有请求都非常重要且会回复。请注意AMD FSR技术的使用限制和归属声明。如何用ps做出玻璃的效果?
用PS如何做出透明玻璃的效果
1、第一步、创建一个新的画布,填充来填充背景,并绘制来创建一个圆角矩形。
2、第二步、圆角矩形的亮度的不透明度为0%。
3、第三步、选择专圈圆角矩形,填充:,非舒不透明度:,描边:2px。
4、第四步、添加一个
图层蒙版
,用黑色的笔刷在玻璃边缘进行光线变化。
5、第五步、使用多边形套索工具创建一个反射效果。
6、第六步、调整图层的透明度1:,这样就完成了。
ps怎么做成玻璃效果ps如何做成玻璃效果1、导入一张素材,并创建一个新图层。
2、SHIFT+U切换选择:圆角矩形工具。
3、在工具栏选择:填充像素。
4、画出一个圆角矩形,并降低图层的填充至::%。
5、调整图层样式的:投影,主要是不透明度。
6、继续为图层添加:描边效果,颜色为白色,并调整不透明度。
7、目前完成的简单的玻璃效果。
8、继续添加玻璃的反光效果,创建一个新图层,并命名为::玻璃反光。
9、使用钢笔工具大概勾勒出反光区域。
、ctrl+enter::路径转选区。
、ctrl+shift+i::发转选区。
、为选区填充前景色alt+delete。
、变换选区形状,使其和玻璃效果的图层贴合。
、调整其不透明度至::%。
、最终,一个简单的带有反光质感的透明玻璃效果就做好了。
白色烤漆玻璃材质ps中怎么做ps中做白色烤漆玻璃材质的方法是:
1、新建背景文件文件,创建新图层;
2、用“矩形选框工具”画矩形,填充银白烤漆颜色,双击调出“图层样式”,设置立体效果,对“背景图层”拉一个黑白“线性渐变”;
3、用"矩形选框工具"画多个小矩形,创建新图层,拉白色-银色“线性渐变”,做反光效果;
4、“滤镜--模糊--高斯模糊”,完成。
OpenCV:吊打高斯模糊的StackBlur加入
简化版 StackBlur API介绍
StackBlur 最近才加入到OpenCV中,将在下一个Release版本(4.7)中出现。C++用户可以尝试从源码编译OpenCV体验一下。Python 用户可以尝试用pip安装rolling版本的OpenCV:pip install opencv-python-rolling==4.6.0.。StackBlur是高斯模糊的近似,同样支持水平和垂直不对称的滤波。
为什么StackBlur的API中s小写?OpenCV中对API有严格控制,以作者名称开头的API可以大写(如Sobel、GaussianBlur),除此之外都小写字母开头。
StackBlur的使用建议和最后的实验结果如下:
建议当kernel size > 时,用stackBlur替换高斯模糊;当kernel size特别大时,OpenCV的所有模糊滤波器中只推荐stackBlur。
实验结果如下:测试环境为Mac M1,8核,image size [ x ],数据类型:CV_8U3C。测试方法为跑一千次,选取最小作为耗时,测试脚本在这里。结论为stackBlur不会随着kernel size增加而增加耗时。
StackBlur算法的坑是由老瓦在年初挖的。当时他给了我一个任务,尝试增加一个新滤波器stackblur。最后在OpenCV上调通并产生正确模糊结果,但卡在了速度优化上。最近在优化OpenCV的DNN模块,学会了一些并行加速的技巧,终于填上了这个坑。
本文主要介绍新加入OpenCV的模糊算法Stackblur,Stackblur是一种高斯模糊的快速近似,由Mario Klingemann发明。其计算耗时不会随着kernel size增大而增加,专为大kernel size的模糊滤波场景量身定制。本文从新加入OpenCV的cv::stackBlur API开始介绍,通过对比BoxBlur和高斯模糊,阐述Stackblur的优势。接着,详细介绍了Stackblur算法的原始论文及其计算过程,解释了Stack、StackOut和StackIn的运作方式。最后,总结了Stackblur的加速优化策略和实验结果,表明Stackblur在大kernel size下的速度优势。
StackBlur算法采用Queue和Stack计算方式,与传统滤波算法不同,其计算耗时不会随着kernel size的增大而增加,这得益于其独特的计算机制。Stackblur算法在2维图像上的实现,通过先在水平方向进行1维stackblur算法,然后在垂直方向进行1维stackblur算法,实现整体的模糊效果。同时,通过多线程并行加速、SIMD指令优化等策略,Stackblur算法在性能上实现了显著提升,甚至在某些情况下比BoxBlur更快。
StackBlur的计算优化包括使用乘法代替除法运算,以减少计算量。同时,针对不同数据格式和通道数,提供了一系列优化策略,以提高性能。实验结果显示,StackBlur在kernel size <= 5的情况下,速度接近高斯模糊,而在大kernel size下(如kernel size=),StackBlur的速度远超高斯模糊。
如果你对StackBlur的加速优化和性能测试感兴趣,欢迎在评论区留言讨论,分享建议和反馈。
.NET 封装的Windows平台轻量DirectUI框架
推荐一个.NET 封装的Windows平台轻量DirectUI框架 ExDUIR.NET,适用于运行系统win+,win7 需要安装KB补丁 .net 4.6.1。在Visual Studio 或 Visual Studio 上编译。
此框架特点为:使用DirectX、Direct2D 进行绘制,效率显著高于GDI,Unicode编码支持多国语言,遵循Windows消息机制,通过发送消息分发通知给组件,兼容原生Windows消息和常量,使用win api写法,扩展性更灵活。
调用方式采用Win风格API,支持生成lib静态库和dll动态库,动态链接库可以被多种语言调用,如python、java、go、dephi、C#、VB、易语言等。组件包括按钮、开关、单选框、选择框、编辑框、富文本编辑框等,并支持扩展组件。
框架支持布局调整,包括绝对布局、相对布局、线性布局、流式布局、表格布局,并支持用户自定义扩展。支持GIF格式自动播放动画,种缓动特效,自由编写窗口和组件缓动特效。窗口支持异型窗口,形状窗口,支持透明度调整至,高斯模糊效果。编辑框支持富文本,加载RTF格式文档。支持拖曳文件或文本,模态窗口,限制区域消息通知。
DEMO提供源码,包含按钮、组合框、自定义背景、缓动、编辑框、分组框、矩阵按钮、富文本编辑框、组件列表、导航按钮、单选框、选项卡、加载动画框、旋转框、页面、框、消息框、图标列表、列表按钮、工具条、状态条、日期框、调色板、颜色选择器、标题框、月历框、分数按钮、cef3浏览框、鼠标绘制板等组件。更多功能和扩展性,用户可以自行探索。