最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ OpenCV學(xué)習(xí)之圖像金字塔與圖像融合詳解

 更新時間:2022年03月02日 09:28:43   作者:FrigidWinter  
圖像金字塔分為兩種:高斯金字塔和拉普拉斯金字塔。圖像金字塔在保持細(xì)節(jié)的條件下進(jìn)行圖像融合等多尺度編輯操作非常有用。本文將利用圖像金字塔實(shí)現(xiàn)圖像融合,需要的可以參考一下

1 金字塔

平時你聽到、見到的金字塔是什么樣的?

這樣?

還是這樣?

實(shí)際上除了這些,還有圖像金字塔

 

圖像金字塔有什么用?為什么要稱作圖像金字塔?本文帶你研究這些問題。

2 什么是圖像金字塔?

正如生物視覺系統(tǒng)會處理分層次的尺寸一樣,計(jì)算機(jī)視覺系統(tǒng)實(shí)現(xiàn)多分辨率圖像處理的基礎(chǔ)是圖像金字塔。

考慮這樣一個場景:輸入系統(tǒng)一幅圖像來檢測人臉。由于事先并不知道人臉在這張圖片中可能的尺寸,所以需要根據(jù)輸入生成一個不同大小圖像組成的金字塔(應(yīng)用時常用向量存儲),掃描不同層次來檢測可能的人臉。

此外,圖像金字塔在保持細(xì)節(jié)的條件下進(jìn)行圖像融合等多尺度編輯操作非常有用。

圖像金字塔分為兩種:

高斯金字塔

高斯金字塔是最基本的圖像金字塔,用于獲得原圖像尺度連續(xù)的的降采樣序列。高斯金字塔共分O組(Octave),每組分為S層(Layer)。組內(nèi)各層圖像分辨率相同但尺度逐層遞增;組間圖像按隔點(diǎn)降采樣取得。

拉普拉斯金字塔

拉普拉斯金字塔通過高斯差分得到殘差圖像序列,用于圖像重建、圖像融合、特征點(diǎn)檢測等。具體做法如圖所示:構(gòu)造高斯金字塔,每組圖像內(nèi)相鄰兩層相減得到殘差圖像序列,從而得到拉普拉斯金字塔。所以高斯金字塔每組有s+3層,而拉普拉斯金字塔每組只有s層。

3 圖像金字塔有什么用?

前面已經(jīng)提到,圖像金字塔的作用主要有:

  • 圖像重建
  • 圖像多尺度特征檢測
  • 圖像修復(fù)
  • 圖像融合

下面給出一個基于圖像金字塔的圖像融合算法。

1.選擇待融合圖像A與B,以及融合掩碼M,并重采樣使之具有相同大?。?/p>

2.分別取得A、B的拉普拉斯金字塔,以及M的高斯金字塔;

3.使用M的高斯金字塔作為加權(quán),對A、B的每層特征進(jìn)行融合,得到融合金字塔;

4.融合金字塔仍為拉普拉斯金字塔,對其圖像重建得到融合圖像。

上面的圖可能有點(diǎn)抽象,看看下面的例子。

4 OpenCV實(shí)戰(zhàn)圖像金字塔

主函數(shù)非常簡單易懂

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;
}

試試效果

原圖

融合效果圖

是不是毫無違和感?其中關(guān)鍵的融合函數(shù)imgFusion()具體是如何實(shí)現(xiàn)的呢?

void imgFusion(Mat leftImg, Mat rightImg, Mat& dstImg, float threshold)
{
	vector<Mat> gaussPyrLeft, gaussPyrRight, laplacePyrLeft, laplacePyrRight;		// 聲明高斯金字塔數(shù)據(jù)結(jié)構(gòu)
	vector<Mat> maskGaussPyr;														// 聲明掩碼的高斯金字塔
	vector<Mat> blendLapPyr;														// 聲明融合拉普拉斯金字塔
	Mat imgHighest;																	// 聲明圖像融合的起點(diǎn)圖像
	Mat mask = Mat::zeros(PYRHEIGHT, PYRWIDTH, CV_32FC1);							// 構(gòu)造掩碼,大小與金字塔原圖像相同
	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);		//轉(zhuǎn)換成CV_32F, 用于和mask類型匹配,且CV_32F 類型精度高, 有利于計(jì)算
	rightImg.convertTo(rightImg, CV_32F);

	// 建立高斯金字塔與拉普拉斯金字塔
	buildGaussPyr(leftImg, gaussPyrLeft, 3);
	buildGaussPyr(rightImg, gaussPyrRight, 3);
	buildLaplacePyr(gaussPyrLeft, laplacePyrLeft, 3);
	buildLaplacePyr(gaussPyrRight, laplacePyrRight, 3);

	// 確定起點(diǎn)圖像
	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);
}

完整源碼 提取碼:1234

到此這篇關(guān)于C++ OpenCV學(xué)習(xí)之圖像金字塔與圖像融合詳解的文章就介紹到這了,更多相關(guān)C++ OpenCV圖像金字塔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c語言中單引號和雙引號的區(qū)別(順利解決從字符串中提取IP地址的困惑)

    c語言中單引號和雙引號的區(qū)別(順利解決從字符串中提取IP地址的困惑)

    c語言中的單引號和雙引號可是有很大區(qū)別的,使用之前一定要了解他們之間到底有什么不同,下面小編就給大家詳細(xì)的介紹一下吧,對此還不是很了解的朋友可以過來參考下
    2013-07-07
  • 手把手帶你了解C++最小棧

    手把手帶你了解C++最小棧

    這篇文章主要介紹了C++的最小棧,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳談c++11 final與override說明符

    詳談c++11 final與override說明符

    下面小編就為大家?guī)硪黄斦刢++11 final與override說明符。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言獲取Linux系統(tǒng)精確時間的方法

    C語言獲取Linux系統(tǒng)精確時間的方法

    下面小編就為大家?guī)硪黄狢語言獲取Linux系統(tǒng)精確時間的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C++獲取項(xiàng)目路徑的兩種方式詳解

    C++獲取項(xiàng)目路徑的兩種方式詳解

    這篇文章主要介紹了C++獲取項(xiàng)目路徑的兩種方式的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • 基于getline()函數(shù)的深入理解

    基于getline()函數(shù)的深入理解

    本篇文章是對getline()函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++ 面向?qū)ο蟮念愒O(shè)計(jì)

    c++ 面向?qū)ο蟮念愒O(shè)計(jì)

    類的設(shè)計(jì)在于用恰到好處的信息來完整表達(dá)一個職責(zé)清晰的概念,恰到好處的意思是不多也不少,少了,就概念就不完整;多了,就顯得冗余,累贅,當(dāng)然特例下,允許少許的重復(fù),但是,這里必須要有很好的理由
    2017-07-07
  • C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器

    C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器

    這篇文章主要介紹了C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器,文章圍繞主題展開詳細(xì)的內(nèi)容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • C++中拷貝構(gòu)造函數(shù)的總結(jié)詳解

    C++中拷貝構(gòu)造函數(shù)的總結(jié)詳解

    深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當(dāng)這個類的對象發(fā)生復(fù)制過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝
    2013-09-09
  • C語言中函數(shù)棧幀的創(chuàng)建和銷毀的深層分析

    C語言中函數(shù)棧幀的創(chuàng)建和銷毀的深層分析

    在C語言中,每一個正在運(yùn)行的函數(shù)都有一個棧幀與其對應(yīng),棧幀中存儲的是該函數(shù)的返回地址和局部變量。從邏輯上講,棧幀就是一個函數(shù)執(zhí)行的環(huán)境:函數(shù)參數(shù)、函數(shù)的局部變量、函數(shù)執(zhí)行完后返回到哪里等等
    2022-04-04

最新評論

大埔区| 东平县| 乐至县| 缙云县| 桐乡市| 中宁县| 太仓市| 梅河口市| 论坛| 富平县| 社旗县| 松潘县| 贵阳市| 英德市| 陇川县| 天等县| 华蓥市| 关岭| 清丰县| 新田县| 古蔺县| 望谟县| 华容县| 平江县| 介休市| 四子王旗| 吴江市| 台东市| 柞水县| 宁波市| 岑巩县| 六安市| 洪洞县| 伊宁市| 贵州省| 图片| 成武县| 沂南县| 昔阳县| 柳江县| 孟津县|