Code Monkey home page Code Monkey logo

image-processing-algorithm-speed's Introduction

Introduction

speed_histogram_algorithm_framework

  • 局部直方图加速框架,内部使用了一些近似计算及指令集加速(SSE),可以快速处理中值滤波、最大值滤波、最小值滤波、表面模糊等算法。

resources

  • SSE优化相关的资源。

PC的CPU为I5-3230,64位。

OpenCV版本为3.4.0

  • sse_implementation_of_common_functions_in_image_processing.cpp 多个图像处理中常用函数的SSE实现。
  • speed_rgb2gray_sse.cpp 使用sse加速RGB和灰度图转换算法,相比于原始实现有接近5倍加速。算法原理:https://mp.weixin.qq.com/s/SagVQ5gfXWWA7NATv-zvBQ 速度测试结果如下:

测试CPU型号:Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz

分辨率 优化 循环次数 速度
4032x3024 原始实现 1000 12.139ms
4032x3024 第一版优化(float->INT) 1000 7.629ms
4032x3024 OpenCV 自带函数 1000 4.287ms
4032x3024 第二版优化(手动4路并行) 1000 10.528ms
4032x3024 第三版优化(OpenMP4线程) 1000 7.632ms
4032x3024 第四版优化(SSE优化,一次处理12个像素) 1000 5.579ms
4032x3024 第五版优化(SSE优化,一次处理15个像素) 1000 5.843ms
4032x3024 第六版优化(AVX2优化,一次处理10个像素) 1000 3.576ms
4032x3024 第七版优化(AVX2优化+std::async) 1000 2.626ms
分辨率 优化 循环次数 速度
4032x3024 原始实现 100 115.36ms
4032x3024 第一版优化 100 62.43ms
4032x3024 第二版优化(4线程) 100 28.89ms
4032x3024 第三版优化(SSE) 100 12.69ms
分辨率 算法优化 循环次数 速度
4032x3024 普通实现 1000 126.54 ms
4032x3024 Float->INT+查表法 1000 81.62 ms
4032x3024 SSE优化版本1 1000 34.95 ms
4032x3024 SSE优化版本2 1000 28.87 ms
4032x3024 AVX2优化版本1 1000 15.42 ms
4032x3024 AVX2优化+std::async 1000 5.69 ms

优化方式 图像分辨率 速度
C语言普通实现+单线程 4032*3024 290.43ms
SSE优化+单线程 4032*3024 265.96ms
优化方式 图像分辨率 速度
C语言实现+单线程 4032*3024 66.66ms
C语言实现+4线程 4032*3024 65.34ms
SSE优化+单线程 4032*3024 66.10ms
SSE优化+4线程 4032*3024 66.20ms
优化方式 图像分辨率 速度
C语言实现+单线程 4272*2848 20.19ms
SSE优化+单线程 4272*2848 4.22ms
  • speed_common_functions.cpp 对图像处理的一些常用函数的快速实现,个别使用了SSE优化。
  • speed_max_filter_sse.cpp 使用speed_histogram_algorithm_framework框架实现最大值滤波,半径越大越明显。原理请看:https://blog.csdn.net/just_sort/article/details/97280807 。运行的时候记得把工程属性中的sdl检查关掉,不然会报一个变量未初始化的错误。速度测试效果如下:
优化方式 图像分辨率 半径 速度
C语言实现+单线程 4272*2848 7 9445.90ms
SSE优化+单线程 4272*2848 7 2234.55ms
C语言实现+单线程 4272*2848 9 14468.76ms
SSE优化+单线程 4272*2848 9 2221.68ms
C语言实现+单线程 4272*2848 11 23069.10ms
SSE优化+单线程 4272*2848 11 2180.95ms
优化方式 图像分辨率 半径 速度
C语言实现+单线程 4272*2848 11 163.16ms
SSE优化+单线程 4272*2848 11 123.83ms
C语言实现+单线程 4272*2848 21 167.81ms
SSE优化+单线程 4272*2848 21 126.98ms
C语言实现+单线程 4272*2848 31 168.62ms
SSE优化+单线程 4272*2848 31 126.17ms
  • speed_multi_scale_detail_boosting_see.cpp 在speed_box_filter_sse.cpp提供的盒子滤波sse优化的基础上,进一步使用指令集实现了对论文《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》的算法优化。算法原理请看:https://blog.csdn.net/just_sort/article/details/98485746 。在CoreI7-3770速度测试结果如下:
优化方式 图像分辨率 半径 速度
C语言实现+单线程 4272*2848 7 206.00ms
SSE优化+单线程 4272*2848 7 57.12ms
优化方式 图像分辨率 半径 速度
C语言实现 4272*2848 3 5103.22ms
C语言实现+优化排序 4272*2848 3 749.43ms
SSE优化 4272*2848 3 10.26ms
OpenCV3.1.0自带的函数 4272*2848 3 100.09ms
  • speed_rgb2yuv_sse.cpp SSE极致优化RGB和YUV图像空间互转,算法原理请看:https://blog.csdn.net/just_sort/article/details/99545096 。YUV2RGB的SSE高级优化我讲了原理和方法,因为我时间有限就不提供这个函数源码了,速度测试结果如下:
优化方式 图像分辨率 速度
RGB2YUV C语言实现 4272*2848 45.57ms
RGB2YUV SSE初级优化 4272*2848 17.06ms
RGB2YUV SSE高级优化 4272*2848 13.52ms
YUV2RGB C语言实现 4272*2848 81.05ms
YUV2RGB SSE初级优化 4272*2848 14.95ms
优化方式 图像分辨率 插值后大小 速度
C语言原始算法实现 4272*2848 长宽均为原始1.5倍 1856.29ms
C语言实现+查表优化+边界优化 4272*2848 长宽均为原始1.5倍 839.10ms
SSE优化+边界优化 4272*2848 长宽均为原始1.5倍 315.70ms
OpenCV3.1.0自带的函数 4272*2848 长宽均为原始1.5倍 118.77ms

维护了一个微信公众号,分享论文,算法,比赛,生活,欢迎加入。

  • 图片要是没加载出来直接搜GiantPandaCV 就好。

image-processing-algorithm-speed's People

Contributors

bbuf avatar ldpe2g avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.