Halide(三)Buffer与cv::Mat的相互转换

目前OpenCV的NN模块中已经有Halide一部分代码,可以通过 net.setPreferableBackend(DNN_BACKEND_HALIDE); 告诉OpenCV NN引擎尽可能使用Halide进行计算。除非以后OpenCV完全实现Halide的运行机制,否则在图像处理任务中,Halide与OpenCV协同工作是不可避免的。这篇博客主要介绍Halide的图像类型和OpenCV图像类型的相互转化。…

Halide(二)算法描述

基本语法和规则一定从官方教程开始,这篇博客是官方教程前几节的简要笔记。主要介绍 Halide 算法描述的语法规则、变量打印和调试、算法对ROI和padding的处理。

Halide(五)算法调度 是紧跟在本博客之后的章节,都是对官方教程的笔记,(三)和(四)是一些环境和常用算法的穿插,不关心可跳过。…

Halide(一)环境配置

在工业生产环境中,算法从设计到落地一般跨度比较大。尤其是计算密集的图像处理算法,要达到比较高的效率,就必须要在数据临近、数据复用、计算并行等方面做均衡,算法实现者通常需要深入了解该算法,才能取得比较好的优化。为了降低算法实现过程中开发者的负担,要把算法设计和实现相分离开来,已经有多重解决案例,其中较为典型的就是Halide。

Halide就不多介绍了,毕竟是在Pixel2 HDR Plus上用过的,官网:https://halide-lang.org,上面有很多详细的教程和文档。Halide主要分为两部分,第一部分是要描述需要计算的内容(计算在算法层面的流程),第二部分是规划计算,把计算并行起来、分块儿、数据复用、顺序重排,以实现更高的性能。博主认为第一部分是比较容易的,官网的教程看一遍就可以理解,自己再跑下demo,而第二分部取决于使用的硬件,如果调试优化,需要更多时间去摸索(毕竟我们使用halide是为了获得比较高的性能,减少部署开销)。

这篇博客主要介绍windows下配置halide开发环境,linux配置开发环境比较简单,并且官网已经写的很详细了,只在最后会简要讲下linux配置开发环境步骤中官网没有提及的部分。…

GradientShop介绍

GradientShop是在梯度域上对图像进行编辑的一个框架,通过该框架可以完成Sharpen、Relight、ToneMapping、Deblock、NPR Filter、DeFlickering等多种图像处理任务。这篇博客简单介绍GradientShop,着重介绍各项功能的实现过程。

坑没填完,先置顶提醒下自己0.0…

图像融合(三)Exposure Fusion

上一篇博客介绍了Laplace Pyramid进行fusion,其实也就介绍了Exposure Fusion的基本原理。Mertens Exposure Fusion 是HDR图像合成上非常经典的算法。Exposure Fusion的多尺度图像融合同样借助Laplace Pyramid分解和重建,特别强调的是编辑laplace金字塔的过程,在计算亮度权重、对比度权重、曝光权重后将构建权重的高斯金字塔,然后进行拉普拉斯金字塔的重建,最后得到一张各部分曝光都很良好的图像。…

图像融合(一)Poisson Blending

泊松融合(Poisson Blending)又作 Seamless clone,用于将两幅图像“无缝”的融合起来,基本原理就是最优化一个方程,尽量在和base边界处保持相关的亮度,同时保留剪切过来图像的梯度,这样看起来两张图像就“无缝”拼合在一起了。因为该工具在opencv中已经存在,所以我们可以直接使用opencv体验其效果。这篇博简单介绍原理,以及感受效果。…

图像的信噪比的计算

信噪比是图像信号的重要指标,信噪比就是信号功率除以噪声功率。在图像数据中我们需要考虑图像传感器的黑白电平,有时又可以通过传感器已经标定好的噪声系数得到信噪比,简单记录下图像信号中信噪比的计算。…

视频帧间插值(一)Softmax Splatting for Video Frame Interpolation

视频插帧是计算机视觉许多应用中的一个传统问题,splatting transformer network 技术已被广泛用于两幅图像之间的新图像合成:非监督深度估计,非监督光流预测,光流预测,新视角合成,视频插帧,视频增强,视频编辑、视频压缩、去除视频运动模糊中。视频插帧方法被分为flow-based、kernel-based、phase-based。这些方法都是估计出两帧之间的光流场,一般通过warp前一帧来得到中间帧。视频插帧在某些场景下特别困难,比如场景和物体在不断运动和变化,或者存在遮挡时,插帧问题会同时存在多个解。

这篇博客介绍CVPR2020的一篇论文,是flow-based的方法。这篇文章主要贡献有两个,一是使用了softmax splatting的方法来处理不同源像素warp之后到同一点的问题,二是使用了特征金字塔,应该是对大位移有更鲁棒。…

保边滤波

自然图像都存在噪声,噪声和边缘在局部方差方面表现相似,一般的滤波器无法区分噪声和边缘,于是对其统一处理,因此很多情况下,滤波的同时,边缘也被处理模糊掉了。保边滤波器(Edge Preserving Filter)是指在滤波过程中能够有效的保留图像中的边缘信息的一类滤波器。

常见的保边滤波器有如下几种:双边滤波(Bilateral filter)、引导滤波(GuidedFilter)、加权最小二乘法滤波器(WLS)、非均匀局部滤波器(NLM)、双指数边缘平滑滤波器(BiExponentialEPF)、选择性模糊和表面滤波。…

自动白平衡AWB

人类视觉系统具有颜色恒昌性特点,一次人类对物体观察不受光源影响。但是sensor在不同光照下,物体呈现的颜色不同,在晴朗的天空下(高色温)会偏蓝,在烛光(低色温)下会偏红。为了消除光源对图像传感器成像的影响,模拟人类视觉系统的颜色恒常性。保证在任何场景下看到的白色是真正的白色。

对于RGB三通道图像,乘以一个对角阵就可以实现白平衡,白平衡计算的核心就是计算Rgain和Bgain,下文中简称RG和BG。…

Python中类似Matlab-interp2的插值函数:RectBivariateSpline与interp2d

在matlab中我们可以通过interp2在矩形网格内进行曲线插值,那么在python中有没有有类似的函数呢?有,并且有很多,都在scipy.interpolate模块中。这篇博客主要说两个比较相似的:interp2d和rectBivariateSpline。两者比较相似,如果输入是规整的网格点,那么使用rectBivariateSpline会更快。下面给一些介绍和例子:…

Python解析Raw格式图像

简记下使用rawpy提取raw图像并转化为rgb。rawpy就是libraw的python封装,rawpy.imread直接可以读到raw数据,postprocess方法可以走完isp(BWC、RBGain、demosaic、gamma),得到一副RGB图像。postprocess的参数可以用来控制后处理流程,raw还有enhance模块,主要封装了坏点矫正,更细致的修改查阅官方文档。…

图像质量评价(一)Imatest介绍与使用

目前接触到的测试图像质量的软件有imatest和dxo analyzer,图像质量的评测需要和测试卡、光源灯器材结合使用,用于测试的器材通常价格昂贵并且越贵越好。网上imatest的破解版软件比较好找,所以相对于dxo analyzer小白用户更多,所以这篇博客简单接受imatest的安装和基本使用。

这篇博客适合新手小白,因为博主也是新手小白,大神可以不用点进来看啦。…

浅谈HDR

成像过程就是测量自然场景的光照强度,如果把图像传感器比作一把测量光强的尺子,那么成像的Dynamic Range(动态范围)就是这把尺子的量程。如果我们需要测量的自然场景超过了这把尺子的测量范围,我们应该怎么做呢?我们可以用这把尺子多次测量,每次测量不同范围,最后将每次测量的结果拼接起来,相当于用了一把大量程的尺子,这种技术就叫做HDR技术。

我们可以生成一副大动态范围(HDR)的图像,但是我们的显示器显示不了那么大动态范围的图像,同时我们还希望看到更多细节,这就要用到动态范围压缩技术(通常是Tone Mapping)。这篇博客简单介绍HDR技术,正如标题   浅谈~   一下…