Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >简易 bokeh 图像散景效果算法实现

简易 bokeh 图像散景效果算法实现

作者头像
cpuimage
发布于 2018-04-12 07:39:35
发布于 2018-04-12 07:39:35
1.9K00
代码可运行
举报
文章被收录于专栏:算法+算法+
运行总次数:0
代码可运行

bokeh百度百科的解释

摄影镜头光圈大小和拍摄距离决定了拍摄时的景深,相对于焦点位置,焦点前与焦点后的被拍摄物体会显得模糊,这个模糊区域被称为焦外。 焦外具体的模糊程度还受到镜头中镜片单体和组合的物理特性影响,形成了由镜头不同而得到的不同的焦点外的图像。于是焦外成像这个技术名词出现了。 优秀的焦外成像柔顺而迷人,色彩过渡自然,丝毫不逊色于焦点处的图像魅力。 最典型的例子,就是夜景拍摄中的远景模糊炫丽的灯光效果。

由于算法逻辑比较简单,就不多解释。

简单的说就是以半径圆圈内的各通道基于明度进行权重计算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef ClampToByte
#define  ClampToByte(  v )  (((unsigned)int(v)) <(255) ? (v) : (v < 0) ? (0) : (255)) 
#endif

void bokeh(unsigned char *Input, unsigned char *Output, int Width, int Height, int Stride, int Radius)
{
    int Channels = Stride / Width;
    int rsq = max(1, sqrtf(Radius));
    for (int y = 0; y < Height; y++)
    { 
        unsigned char * LinePD = Output + y*Stride;
        for (int x = 0; x < Width; x++)
        {
            unsigned int sum[3] = { 0 };
            unsigned int weightsum = 0;
            for (int ny = max(0, y - Radius); ny < min(y + Radius, Height); ny++)
            {
                const    unsigned char * sampleLine = Input + ny*Stride;

                for (int nx = max(0, x - Radius); nx < min(x + Radius, Width); nx++)
                { 
                    if (sqrtf(nx - x) + sqrtf(ny - y) < rsq)
                    {
                        const    unsigned char * sample = sampleLine + nx*Channels;
                        const    unsigned char&R = sample[0];
                        const    unsigned char&G = sample[1];
                        const    unsigned char&B = sample[2];
                        float weight = sqrtf((unsigned char)((21627 * R + 21627 * G + 21627 * B) >> 16));
                        for (int c = 0; c < Channels; c++)
                        {
                            sum[c] += weight*sample[c];
                        }
                        weightsum += weight;
                    }
                }
            }
            for (int c = 0; c < Channels; c++)
            {
                LinePD[c] = ClampToByte(sum[c] / weightsum);
            } 
            LinePD += Channels;
        }
    }
}

这个算法以上述写法进行测试,速度极其的慢。

将这个算法的思想稍微变通一下,修改后1080P图片可达到cpu单线程实时处理。

具体优化思路,参照 图像纹理合成及纹理传输算法学习(附源码)。

源码中的函数GetLocalSquareSum。

初学者可参考 分享用于学习C++图像处理的代码示例 ,稍微改改就可以跑起来这个算法了。

 这里就不贴优化后的代码了。

这个算法思路用逆反思路,则可以实现聚焦算法,算是一种特例化的反卷积算法。

一直很想把这个算法简单的写一下,写着写着又犯懒了。

明天与imageshop博主 碰个面,吃个饭,也是好久没折腾图像方面的东西了。

真怀念与imageshop博主搭档攻克图像算法的那些日子。

若有其他相关问题或者需求也可以邮件联系俺探讨。

邮箱地址是: gaozhihan@vip.qq.com

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
13行代码实现最快速最高效的积分图像算法。
本文介绍了基于积分图像的计算机图像处理技术,包括其基本概念、操作步骤和应用场景。通过积分图像,可以方便地进行图像的局部特征提取和图像处理,包括图像滤波、边缘检测、图像分割和特征提取等。同时,本文还介绍了一些常用的积分图像处理算法,包括卷积、高斯滤波、Canny边缘检测和霍夫变换等。这些算法在计算机视觉和图像处理领域都有广泛的应用,对于图像处理的效果和性能有着重要的影响。
用户1138785
2018/01/03
1.9K0
13行代码实现最快速最高效的积分图像算法。
自动曝光修复算法 附完整C代码
AF自动对焦(Automatic Focus) 自动对焦即调节摄像头焦距自动得到清晰的图像的过程
cpuimage
2018/06/02
2.9K0
SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。
本文介绍了如何利用SSE优化灰度图算法,通过在RGB空间上进行自适应直方图均衡和基于Alpha的抖动算法,实现了灰度图算法的高性能优化。
用户1138785
2018/01/03
1.3K0
SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。
SSE图像算法优化系列十二:多尺度的图像细节提升。
本文讲述如何使用SSE指令集进行高性能图像处理,通过将图像划分为多个Block进行处理,并利用SSE指令集实现高效的滤波处理。同时,本文还根据处理结果比较了两种滤波方法的优缺点,并给出了一种基于SSE指令集的优化方法。
用户1138785
2018/01/03
1.2K0
SSE图像算法优化系列十二:多尺度的图像细节提升。
SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。
根据文章内容总结的摘要
用户1138785
2018/01/03
2.3K0
SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。
【AI PC端算法优化】七,一步步优化RGB和YUV互转算法
继续学习指令集优化的知识,今天来讨论一个图像颜色空间转换经常碰到的一个问题即RGB和YUV图像的颜色空间转换,我们从原理介绍和普通实现开始,然后介绍一些优化方法并引入SSE指令集来优化这个算法的速度。
BBuf
2020/05/21
1.9K0
【AI PC端算法优化】七,一步步优化RGB和YUV互转算法
图片文档倾斜矫正算法 附完整c代码
 2年前在学习图像算法的时候看到一个文档倾斜矫正的算法。 也就是说能将一些文档图像进行旋转矫正, 当然这个算法一般用于一些文档扫描软件做后处理 或者用于ocr 文字识别做前处理。 相关的关键词: 抗倾斜 反倾斜  Deskew 等等。 最简单算法实现思路,采用 霍夫变换(Hough Transform)进行直线检测, 当然也可以用霍夫变换检测圆。 在倾斜矫正算法中,自然就是检测直线。 通过对检测出来的直线进行角度判断, 一般取 认可度最高的几条直线进行计算, 最后求取均衡后的角度值。 进行图像角度的旋转即可
cpuimage
2018/04/12
3.2K0
图片文档倾斜矫正算法 附完整c代码
SSE图像算法优化系列九:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)。
本文通过分析技术社区中的内容编辑人员如何审查文章的摘要和总结,提出了一些建议。首先,编辑人员需要关注文章的核心内容,即文章的主题和论述,以确保文章的摘要和总结与文章的主题紧密相关。其次,编辑人员需要确保文章的摘要和总结准确、简洁,并且能够吸引读者的注意力。最后,编辑人员需要考虑文章的排版和格式,以确保文章的摘要和总结在视觉上清晰易读。
用户1138785
2018/01/03
2.4K0
SSE图像算法优化系列九:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)。
CVPR论文《100+ Times Faster Weighted Median Filter (WMF)》的实现和解析
【GiantPandaCV导语】由于太硬核,小编已经写不出来导语了。 请直接阅读正文。本文首发于博客园https://www.cnblogs.com/Imageshop/p/9934670.html,然后ImageShop博主授权本公众号以他原创名义发布本篇文章,请勿恶意点举报,谢谢合作。
BBuf
2021/01/08
1K0
SSE图像算法优化系列八:自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。
本文介绍了自然饱和度算法及其SSE实现,该算法通过计算像素点与目标值的差值,并利用SSE指令加速处理,最后将处理后的像素点存储到目标颜色空间中。
用户1138785
2018/01/03
2.4K0
SSE图像算法优化系列八:自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。
再谈快速的高斯模糊算法(使用多次均值滤波逼近和扩展的二项式滤波滤波器)及其优化。
  一个是递归的IIR滤波器,一个Deriche滤波器,他们的速度都已经是顶级的了,而且都能够使用SIMD指令优化,其中有讲到《Recursive implementation of the Gaussian filter》这个方法在半径较大的时候会出现一定的瑕疵,核心原因是大半径会导致其中的某些系数特别小,因此造成浮点精度的丢失,因此,要保证效果就必须在计算过程中使用double数据类型,而使用了double,普通的sse指令集的增速效果就不是很明显了,因此,为了速度可能需要使用AVX或者更高的AVX512。
用户1138785
2022/09/21
2K0
再谈快速的高斯模糊算法(使用多次均值滤波逼近和扩展的二项式滤波滤波器)及其优化。
自动红眼移除算法 附c++完整代码
“红眼”一般是指在人物摄影时,当闪光灯照射到人眼的时候,瞳孔放大而产生的视网膜泛红现象。
cpuimage
2018/05/07
1.6K6
自动红眼移除算法 附c++完整代码
AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。
  查表算法,无疑也是一种非常常用、有效而且快捷的算法,我们在很多算法的加速过程中都能看到他的影子,在图像处理中,尤其常用,比如我们常见的各种基于直方图的增强,可以说,在photoshop中的调整菜单里80%的算法都是用的查表,因为他最终就是用的曲线调整。
用户1138785
2022/10/28
1.7K0
AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。
实现目前最快的半径相关类算法(附核心源码)
  我在两年前的博客里曾经写过 SSE图像算法优化系列七:基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法 一文,通过SSE的优化把矩形核心的腐蚀和膨胀做到了不仅和半径无关,而且速度也相当的快,当时在被博文的评论里有博友提出了如下的问题:
用户1138785
2019/05/24
1.2K0
【16位RAW图像处理三】直方图均衡化及局部直方图均衡用于16位图像的细节增强。
通常我们生活中遇到的图像,无论是jpg、还是png或者bmp格式,一般都是8位的(每个通道的像素值范围是0-255),但是随着一些硬件的发展,在很多行业比如医疗、红外、航拍等一些场景下,拥有更宽的量化范围的图像也越来越常见,比如10位(带宽1024)、12位(带宽4096)、14位(带宽16384)以及16位(带宽32768)的图像,当然还有以浮点数保存的高动态图像(hdr格式的那种),但是目前大部分的显示器还是只支持8位图像的显示,因此,对于这一类图像,一个很重要的问题就是如何将他们的数据量化到0到255之间,而且尽量的保留更多的细节信息,这也就是常见的HDR到LDR的过程。 在我前面的博客里其实也有讲到这方面的信息,本文再尝试将直方图均衡化引入到这个过程中。
用户1138785
2021/07/27
1.8K0
SSE图像算法优化系列十一:使用FFT变换实现图像卷积。
本文介绍了如何利用深度学习的卷积核对图片进行特征提取和识别。首先介绍了传统卷积神经网络的基本原理和实现,然后详细讲解了如何使用深度学习中的卷积核对图片进行特征提取和识别,并提供了详细的实现流程和代码示例。
用户1138785
2018/01/03
2K0
SSE图像算法优化系列十一:使用FFT变换实现图像卷积。
图像增强系列之图像自动去暗角算法。
本文介绍了暗角检测算法的基本原理、实现步骤和性能评价,并给出了基于暗角检测的图像增强算法的实现代码。
用户1138785
2018/01/03
2.2K0
图像增强系列之图像自动去暗角算法。
【算法随记五】使用FFT变换自动去除图像中严重的网纹。
  这个课题在很久以前就已经有所接触,不过一直没有用代码去实现过。最近买了一本《机器视觉算法与应用第二版》书,书中再次提到该方法:使用傅里叶变换进行滤波处理的真正好处是可以通过使用定制的滤波器来消除图像中某些特定频率,例如这些特定频率可能代表着图像中重复出现的纹理。
用户1138785
2019/10/08
1.8K1
【算法随记五】使用FFT变换自动去除图像中严重的网纹。
十种图像模糊算法的总结与实现
作者:毛星云,腾讯 IEG 游戏开发工程师 后处理(Post-Processing),在图形学和游戏开发等领域是提升最终画面呈现品质的重要渲染技术。后处理渲染技术的好坏,往往决定了游戏画面是否能够达到令人惊艳的级别。 图像模糊算法在后处理渲染领域中占据着重要的地位。很多产品级后处理的实现,都会直接或间接依赖于图像模糊算法中的一种或多种。无论是基于高斯模糊(Gaussian Blur)或其改进算法的Bloom特效,还是基于径向模糊(Radial Blur)的Sun Shaft(God Ray),
腾讯技术工程官方号
2020/04/15
9.7K1
【算法随记三】小半径中值模糊的急速实现(16MB图7.5ms实现) + Photoshop中蒙尘和划痕算法解读。
  在本人的博客里,分享了有关中值模糊的O(1)算法,详见:任意半径中值滤波(扩展至百分比滤波器)O(1)时间复杂度算法的原理、实现及效果 ,这里的算法的执行时间和参数是无关的。整体来说,虽然速度也很快,但是在某些特殊情况下我们还是需要更快的速度。特别是对于小半径的中值,我们有理由去对其进一步的优化的。本文我们进一步探讨这个问题。
用户1138785
2019/07/02
6720
推荐阅读
13行代码实现最快速最高效的积分图像算法。
1.9K0
自动曝光修复算法 附完整C代码
2.9K0
SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。
1.3K0
SSE图像算法优化系列十二:多尺度的图像细节提升。
1.2K0
SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。
2.3K0
【AI PC端算法优化】七,一步步优化RGB和YUV互转算法
1.9K0
图片文档倾斜矫正算法 附完整c代码
3.2K0
SSE图像算法优化系列九:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)。
2.4K0
CVPR论文《100+ Times Faster Weighted Median Filter (WMF)》的实现和解析
1K0
SSE图像算法优化系列八:自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。
2.4K0
再谈快速的高斯模糊算法(使用多次均值滤波逼近和扩展的二项式滤波滤波器)及其优化。
2K0
自动红眼移除算法 附c++完整代码
1.6K6
AVX图像算法优化系列二: 使用AVX2指令集加速查表算法。
1.7K0
实现目前最快的半径相关类算法(附核心源码)
1.2K0
【16位RAW图像处理三】直方图均衡化及局部直方图均衡用于16位图像的细节增强。
1.8K0
SSE图像算法优化系列十一:使用FFT变换实现图像卷积。
2K0
图像增强系列之图像自动去暗角算法。
2.2K0
【算法随记五】使用FFT变换自动去除图像中严重的网纹。
1.8K1
十种图像模糊算法的总结与实现
9.7K1
【算法随记三】小半径中值模糊的急速实现(16MB图7.5ms实现) + Photoshop中蒙尘和划痕算法解读。
6720
相关推荐
13行代码实现最快速最高效的积分图像算法。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验