码农知识堂 - 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,加好友,请备注:插件软件。

  • 相关阅读:
    webservice接口测试
    【Python基础入门8】关于字符串
    Linux权限
    CentOS7.x 设置 Java 开发运行环境
    写了个基于 MacOS + iTerm2 自动打开窗口执行命令的工具
    SpringCloud+SpringBoot b2b2c 电子商务平台
    C++智能指针(一)——shared_ptr初探
    重磅!Grafana 9 正式发布,更强大、更易用了!
    818专业课【考经】—《信号系统》之章节概要:第六章 连续时间系统的变换域分析
    功率半导体器件静态参数测试都测哪些内容?
  • 原文地址:https://blog.csdn.net/stonewu/article/details/132661100
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号