当前位置: 首页>編程日記>正文

计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)

计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)

目录

  • 1 金字塔
  • 2 什么是图像金字塔?
  • 3 图像金字塔有什么用?
  • 4 OpenCV实战图像金字塔

1 金字塔

平时你听到、见到的金字塔是什么样的?

这样?

在这里插入图片描述

还是这样?

在这里插入图片描述

实际上除了这些,还有图像金字塔

图像金字塔有什么用?为什么要称作图像金字塔?本文带你研究这些问题。

2 什么是图像金字塔?

正如生物视觉系统会处理分层次的尺寸一样,计算机视觉系统实现多分辨率图像处理的基础是图像金字塔

考虑这样一个场景:输入系统一幅图像来检测人脸。由于事先并不知道人脸在这张图片中可能的尺寸,所以需要根据输入生成一个不同大小图像组成的金字塔(应用时常用向量存储),扫描不同层次来检测可能的人脸。

此外,图像金字塔在保持细节的条件下进行图像融合等多尺度编辑操作非常有用。

图像金字塔分为两种:

  • 高斯金字塔
    高斯金字塔是最基本的图像金字塔,用于获得原图像尺度连续的的降采样序列。高斯金字塔共分OOO组(Octave),每组分为SSS层(Layer)。组内各层图像分辨率相同但尺度逐层递增;组间图像按隔点降采样取得。
    在这里插入图片描述
  • 拉普拉斯金字塔
    拉普拉斯金字塔通过高斯差分得到残差图像序列,用于图像重建、图像融合、特征点检测等。具体做法如图所示:构造高斯金字塔,每组图像内相邻两层相减得到残差图像序列,从而得到拉普拉斯金字塔。所以高斯金字塔每组有s+3s+3s+3层,而拉普拉斯金字塔每组只有s+2s+2s+2层。
    在这里插入图片描述

3 图像金字塔有什么用?

前面已经提到,图像金字塔的作用主要有:

  • 图像重建
  • 图像多尺度特征检测
  • 图像修复
  • 图像融合

下面给出一个基于图像金字塔的图像融合算法。

  1. 选择待融合图像A与B,以及融合掩码M,并重采样使之具有相同大小;
  2. 分别取得A、B的拉普拉斯金字塔,以及M的高斯金字塔;
  3. 使用M的高斯金字塔作为加权,对A、B的每层特征进行融合,得到融合金字塔;
    在这里插入图片描述
  4. 融合金字塔仍为拉普拉斯金字塔,对其图像重建得到融合图像。

上面的图可能有点抽象,看看下面的例子。

在这里插入图片描述

4 OpenCV实战图像金字塔

主函数非常简单易懂

int main()
{Mat img_1 = imread("1.jpg", 1);Mat img_2 = imread("2.jpg", 1);Mat dstImg;imgFusion(img_1, img_2, dstImg, 0.2);waitKey(0);return 0;
}

试试效果

原图
在这里插入图片描述
在这里插入图片描述

融合效果图

在这里插入图片描述

是不是毫无违和感?其中关键的融合函数imgFusion()具体是如何实现的呢?

void imgFusion(Mat leftImg, Mat rightImg, Mat& dstImg, float threshold)
{vector<Mat> gaussPyrLeft, gaussPyrRight, laplacePyrLeft, laplacePyrRight;		// 声明高斯金字塔数据结构vector<Mat> maskGaussPyr;														// 声明掩码的高斯金字塔vector<Mat> blendLapPyr;														// 声明融合拉普拉斯金字塔Mat imgHighest;																	// 声明图像融合的起点图像Mat mask = Mat::zeros(PYRHEIGHT, PYRWIDTH, CV_32FC1);							// 构造掩码,大小与金字塔原图像相同mask(Range::all(), Range(mask.cols * threshold, mask.cols)) = 1.0;cvtColor(mask, mask, COLOR_GRAY2BGR);											// 将掩码颜色通道拓展,以适配原图像buildGaussPyr(mask, maskGaussPyr, 3);											// 建立掩码的高斯金字塔resize(leftImg, leftImg, Size(PYRWIDTH, PYRHEIGHT));resize(rightImg, rightImg, Size(PYRWIDTH, PYRHEIGHT));leftImg.convertTo(leftImg, CV_32F);		//转换成CV_32F, 用于和mask类型匹配,且CV_32F 类型精度高, 有利于计算rightImg.convertTo(rightImg, CV_32F);// 建立高斯金字塔与拉普拉斯金字塔buildGaussPyr(leftImg, gaussPyrLeft, 3);buildGaussPyr(rightImg, gaussPyrRight, 3);buildLaplacePyr(gaussPyrLeft, laplacePyrLeft, 3);buildLaplacePyr(gaussPyrRight, laplacePyrRight, 3);// 确定起点图像imgHighest = gaussPyrLeft.back().mul(maskGaussPyr.back()) +((gaussPyrRight.back()).mul(Scalar(1.0, 1.0, 1.0) - maskGaussPyr.back()));// 融合拉普拉斯金字塔blendLaplacePyr(laplacePyrLeft, laplacePyrRight, maskGaussPyr, blendLapPyr);// 融合图像重建dstImg = imgLaplaceBlend(imgHighest, blendLapPyr);dstImg.convertTo(dstImg, CV_8UC3);imshow("imgProcess::seamOpt_laplace", dstImg);
}

限于篇幅,其中部分函数的实现无法贴完整,本文的完整工程代码请通过下方名片联系我获取


🚀 计算机视觉基础教程说明

章号                                    内容
  0                              色彩空间与数字成像
  1                              计算机几何基础
  2                              图像增强、滤波、金字塔
  3                              图像特征提取
  4                              图像特征描述
  5                              图像特征匹配
  6                              立体视觉
  7                              项目实战


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇


https://www.fengoutiyan.com/post/16222.html

相关文章:

  • 图像金字塔怎么实现的
  • 图像金字塔压缩图像
  • 图像金字塔算法
  • 计算机视觉和图像识别
  • 计算机视觉中什么是图像的空间频率
  • 数字图像处理和计算机视觉
  • 图像处理金字塔
  • 图像算法工程师和计算机视觉工程师
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機