当前位置: 首页 > news >正文

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

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

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

高斯金字塔 ( Gaussian pyramid):

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

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

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

OpenCv 中使用的高斯核

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

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

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

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

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

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

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

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

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

参考代码:

#include <string>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>using namespace std;
using namespace cv;vector<Mat> vecPyUp;//放大
vector<Mat> vecPyDown;//缩小
vector<Mat> vecLapImg; //差值  拉普拉斯金字塔(Laplacian pyramid)
string pyramidDown = "GaussianPyramidDown";
string pyramidDownRestore = "pyramidDownRestore";
string pyramidUp = "Gaussian pyramidUp";
string LaplacianPyramid = "LaplacianPyramid";int MaxLevel=6;void pyramidCreate(Mat imgOri){vecPyUp.clear();vecPyDown.clear();vecLapImg.clear();// Downfor (int i = 0; i < MaxLevel; i++){vecPyDown.push_back(imgOri);pyrDown(imgOri, imgOri);}// UpMat imgMin = vecPyDown[MaxLevel - 1].clone();vecPyUp.push_back(imgMin);for (int i = 0; i < MaxLevel-1; i++){pyrUp(imgMin, imgMin, vecPyDown[MaxLevel - i - 2 ].size());vecPyUp.push_back(imgMin);}Mat temp;// Laplacefor (int i = 0; i < MaxLevel; i++){subtract(vecPyDown[MaxLevel-i-1], vecPyUp[i], temp);// temp = temp + Scalar(127, 127, 127);vecLapImg.push_back(temp);}}//回调函数void callBack(int level, void* ){if(level<0)level=0;imshow(pyramidUp, vecPyUp[level]);imshow(pyramidDown, vecPyDown[MaxLevel-level-1]);imshow(LaplacianPyramid, vecLapImg[level]);Mat restore;add(vecLapImg[level],vecPyUp[level],restore);imshow(pyramidDownRestore, restore);}int main()
{//输入图片srcImage = imread("lady.jpg"); // 读取图像;if (srcImage.empty()) {printf("读取失败");return 0;}pyramidCreate(srcImage);namedWindow(pyramidDown, 0);namedWindow(pyramidUp, 0);namedWindow(LaplacianPyramid, 0);namedWindow(pyramidDownRestore, 0);createTrackbar("Level", pyramidDown, 0, pyramid::MaxLevel-1, callBack);createTrackbar("Level", pyramidUp, 0, pyramid::MaxLevel-1, callBack);createTrackbar("Level", LaplacianPyramid, 0, pyramid::MaxLevel-1, callBack);createTrackbar("Level", ppyramidDownRestore, 0, pyramid::MaxLevel-1, callBack);callBack(0,0);waitKey(0);destroyAllWindows();return 0;
}

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

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

Opencv 图像暗通道调优

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

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

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

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

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

http://www.lryc.cn/news/159014.html

相关文章:

  • gitLab(git)误提交命令
  • Rust个人学习笔记2
  • 深入浅出Android同步屏障机制
  • 工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
  • Python 专栏目录索引
  • SSM学习
  • .net项目部署Docker
  • Ubuntu无法加载exfat的USB存储设备
  • 【计算机网络】网络编程接口 Socket API 解读(2)
  • 【黄啊码】PHP如何防止重复提交
  • 2594. 修车的最少时间
  • vue 使用qrcode生成二维码并可下载保存
  • 网络融合的发展思路
  • 报考浙江工业大学MBA项目如何选择合适的辅导班?
  • 算法训练第五十八天
  • 如何快速生成一个H5滑动的卡片(单页和分页都有)
  • 嵌入式开发笔试面试
  • 2023国赛数学建模B题思路分析 - 多波束测线问题
  • thinkphp6 入门(5)-- 模型是什么 怎么用
  • Hadoop HDFS 高阶优化方案
  • 通俗易懂讲解大模型:Tokenizer
  • nested exception is java.io.FileNotFoundException
  • ARM编程模型-常用指令集
  • MAC M2芯片执行yolov8 + deepsort 实现目标跟踪
  • 使用Python轻松实现文档编写
  • 前后端分离项目,整合成jar包,刷新404或空白页,解决方法
  • 前端、后端面试集锦
  • Web存储
  • 字节对齐(C++,C#)
  • 使用mybatisplus查询sql时,报Error attempting to get column ‘ID‘ from result set错误