码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Opencv 图像金字塔----高斯和拉普拉斯


    原文:图像金字塔----高斯和拉普拉斯

    图像金字塔是图像中多尺度表达的一种,最初用于机器视觉和图像压缩,最主要用于图像的分割、融合。

    高斯金字塔 ( Gaussian pyramid):

    高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像。最下面的图像分辨率最高,越往上图像分辨率越低。

    高斯金字塔的向下采样过程是:

    1) 对于给定的图像先做一次高斯平滑处理,也就是使用一个大小为的卷积核对图像进行卷积操作.

    OpenCv 中使用的高斯核

    2) 然后再对图像采样,去除图像中的偶数行和偶数列,然后就得到一张图片。

    向下取样会逐渐丢失图像的信息。以上就是对图像的向下取样操作,即缩小图像。

    拉普拉斯金字塔(Laplacian pyramid):

    用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。

    也就是说,拉普拉斯金字塔是通过源图像减去先缩小后再放大的图像的一系列图像构成的。保留的是残差!为图像还原做准备!

    OpenCv中都给我们提供好了API:

    1. CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
    2. const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
    1. CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,
    2. const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );

    高斯金字塔与拉普拉斯金字塔的实测效果如下:

    如上图所示:通过 高斯向上采样,与拉普拉斯金字塔结果,恢复效果有一定差距。

    参考代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. using namespace cv;
    7. vector vecPyUp;//放大
    8. vector vecPyDown;//缩小
    9. vector vecLapImg; //差值 拉普拉斯金字塔(Laplacian pyramid)
    10. string pyramidDown = "GaussianPyramidDown";
    11. string pyramidDownRestore = "pyramidDownRestore";
    12. string pyramidUp = "Gaussian pyramidUp";
    13. string LaplacianPyramid = "LaplacianPyramid";
    14. int MaxLevel=6;
    15. void pyramidCreate(Mat imgOri)
    16. {
    17. vecPyUp.clear();
    18. vecPyDown.clear();
    19. vecLapImg.clear();
    20. // Down
    21. for (int i = 0; i < MaxLevel; i++)
    22. {
    23. vecPyDown.push_back(imgOri);
    24. pyrDown(imgOri, imgOri);
    25. }
    26. // Up
    27. Mat imgMin = vecPyDown[MaxLevel - 1].clone();
    28. vecPyUp.push_back(imgMin);
    29. for (int i = 0; i < MaxLevel-1; i++)
    30. {
    31. pyrUp(imgMin, imgMin, vecPyDown[MaxLevel - i - 2 ].size());
    32. vecPyUp.push_back(imgMin);
    33. }
    34. Mat temp;
    35. // Laplace
    36. for (int i = 0; i < MaxLevel; i++)
    37. {
    38. subtract(vecPyDown[MaxLevel-i-1], vecPyUp[i], temp);
    39. // temp = temp + Scalar(127, 127, 127);
    40. vecLapImg.push_back(temp);
    41. }
    42. }
    43. //回调函数
    44. void callBack(int level, void* )
    45. {
    46. if(level<0)level=0;
    47. imshow(pyramidUp, vecPyUp[level]);
    48. imshow(pyramidDown, vecPyDown[MaxLevel-level-1]);
    49. imshow(LaplacianPyramid, vecLapImg[level]);
    50. Mat restore;
    51. add(vecLapImg[level],vecPyUp[level],restore);
    52. imshow(pyramidDownRestore, restore);
    53. }
    54. int main()
    55. {
    56. //输入图片
    57. srcImage = imread("lady.jpg"); // 读取图像;
    58. if (srcImage.empty()) {
    59. printf("读取失败");
    60. return 0;
    61. }
    62. pyramidCreate(srcImage);
    63. namedWindow(pyramidDown, 0);
    64. namedWindow(pyramidUp, 0);
    65. namedWindow(LaplacianPyramid, 0);
    66. namedWindow(pyramidDownRestore, 0);
    67. createTrackbar("Level", pyramidDown, 0, pyramid::MaxLevel-1, callBack);
    68. createTrackbar("Level", pyramidUp, 0, pyramid::MaxLevel-1, callBack);
    69. createTrackbar("Level", LaplacianPyramid, 0, pyramid::MaxLevel-1, callBack);
    70. createTrackbar("Level", ppyramidDownRestore, 0, pyramid::MaxLevel-1, callBack);
    71. callBack(0,0);
    72. waitKey(0);
    73. destroyAllWindows();
    74. return 0;
    75. }

    《QT 插件化图像算法研究平台》其它内容:

    Opencv 图像金字塔----高斯和拉普拉斯

    OpenCV仿Photoshop曲线调整图像亮度与色彩

    QT 插件化图像算法软件架构

    Opencv 图像暗通道调优去雾

    opencv 提取选中区域内指定 hsv 颜色的水印

    Opencv 手工选择图片区域去水印

    Opencv 基于文字检测去图片水印

    QT 插件化图像算法研究平台

    Opencv 图像亮度调节的几种方式

    Opencv使用QT的线程注意事项

    欢迎广大朋友沟通交流,微信/QQ:23245175,加好友,请备注:插件软件。

  • 相关阅读:
    vue-cli项目打包体积太大,服务器网速也拉胯(100kb/s),客户打开网站需要等十几秒!!! 尝试cdn优化方案
    SELinux零知识学习二十三、SELinux策略语言之类型强制(8)
    apache、iis6、ii7独立ip主机屏蔽限制ip访问
    langchain主要模块(四):Memory
    通过PPM计算MHz晶振频率偏差和32.768KHz晶振计时公式
    Python中的pytest的使用
    NPDP日常练习题
    2023 ChinaJoy后,Flat Ads成为游戏、社交出海的新选择
    python爬虫之多线程threading、多进程multiprocessing、协程aiohttp 批量下载图片
    Python组合数据类型——序列类型:列表、元组
  • 原文地址:https://blog.csdn.net/stonewu/article/details/132661100
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号