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

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

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

1 金字塔

平時(shí)你聽(tīng)到、見(jiàn)到的金字塔是什么樣的?

這樣?

還是這樣?

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

 

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

2 什么是圖像金字塔?

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

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

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

圖像金字塔分為兩種:

高斯金字塔

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

拉普拉斯金字塔

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

3 圖像金字塔有什么用?

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

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

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

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

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

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

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

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

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

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

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

試試效果

原圖

融合效果圖

是不是毫無(wú)違和感?其中關(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    詳談c++11 final與override說(shuō)明符

    下面小編就為大家?guī)?lái)一篇詳談c++11 final與override說(shuō)明符。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C語(yǔ)言獲取Linux系統(tǒng)精確時(shí)間的方法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

大埔区| 海城市| 酒泉市| 阜平县| 霍邱县| 平阴县| 泰宁县| 尚义县| 定西市| 奉新县| 文水县| 昆明市| 会同县| 邢台市| 宜兰市| 东莞市| 清徐县| 罗源县| 青海省| 威远县| 新宁县| 沙坪坝区| 佛教| 德兴市| 璧山县| 蕉岭县| 托克逊县| 甘孜县| 绥阳县| 循化| 阳朔县| 南投市| 乐山市| 绍兴县| 胶州市| 木里| 扶余县| 页游| 宜丰县| 尖扎县| 汪清县|