一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

計(jì)算機(jī)視覺...

 獵狐肥 2021-05-27

源碼:https://github.com/PacktPublishing/OpenCV3-Computer-Vision-Application-Programming-Cookbook-Third-Edition

  • 訪問像素值
  • 用指針掃描圖像
  • 用迭代器掃描圖像
  • 編寫高效的圖像掃描循環(huán)
  • 掃描圖像并訪問相鄰像素
  • 實(shí)現(xiàn)簡(jiǎn)單的圖像運(yùn)算
  • 圖像重映射

在OpenCV的C++API中,所有的類和函數(shù)都在命名空間cv內(nèi)定義。訪問他們的方法共有兩種:

(1)在定義main函數(shù)前使用如下聲明:

using namespace cv ;

(2)是根據(jù)命名空間規(guī)范給所有OpenCV的類和函數(shù)加上前綴cv::,添加前綴后,代碼中OpenCV的類和函數(shù)將更容易識(shí)別。

highgui模塊中國(guó)有一批能幫助我們輕松顯示圖像并對(duì)圖像進(jìn)行操作的函數(shù)。

  1. //讀取一個(gè)圖像文件,并將其轉(zhuǎn)換為灰度圖像
  2. image = cv::imread("puppy.bmp",CV::IMREAD_GRAYSCALE);

使用imread函數(shù)裝在圖像時(shí),通過設(shè)置選項(xiàng)把它轉(zhuǎn)化為灰度圖像,有些計(jì)算機(jī)視覺算法必須使用灰度圖像。在讀入圖像的同時(shí)進(jìn)行色彩轉(zhuǎn)換,可以提高運(yùn)行速度并減少內(nèi)存的使用。這樣生成的圖像由無符號(hào)字節(jié)(unsigned byte,c++中為unsigned char)構(gòu)成,在OpenCV中用常量CV_8U表示。

  1. //讀取圖像,并將其轉(zhuǎn)換為三通道彩色圖像
  2. image = cv::imread("puppy.bmp",CV::IMREAD_COLOR);

在這樣創(chuàng)建的圖像中,每個(gè)像素有3個(gè)字節(jié),OpenCV中用CV_8UC3表示。如果輸入的圖像文件是灰度圖像,這三個(gè)通道的值就是相同的。如果在讀入圖像時(shí)采用文件本身的格式,只需把第二個(gè)參數(shù)設(shè)置為負(fù)數(shù)。

std::cout<<"this image has "<<image.channels()<<"channel(s)";

可用channels方法檢查圖像的通道數(shù)。

注意:當(dāng)用imread打開路徑置頂不完整的圖像時(shí),imread會(huì)自動(dòng)采用默認(rèn)目錄:

如果從控制臺(tái)運(yùn)行程序,默認(rèn)路錄顯然就是當(dāng)前控制臺(tái)的目錄;

如果直接在IDE中運(yùn)行程序,默認(rèn)目錄就是項(xiàng)目文件所在的目錄(主函數(shù)文件所在目錄);

 

imshow顯示由整數(shù)(CV_16U表示16為無符號(hào)整數(shù),CV_32S表示32為有符號(hào)整數(shù))構(gòu)成的圖像時(shí),圖像每個(gè)像素會(huì)被除以256,以便能夠與在256級(jí)灰度中顯示。同樣在顯示由浮點(diǎn)數(shù)構(gòu)成的圖像時(shí),指的范圍會(huì)被假設(shè)為0.0(顯示黑色)~1.0(顯示白色)。超出這個(gè)范圍的值會(huì)被顯示為白色(大于1.0的值)或者黑色(小于0.0的值)。

  1. cv::flip(image,image,1);//就地處理,對(duì)image進(jìn)行水平翻轉(zhuǎn)
  2. //正數(shù)表示水平,0表示垂直,負(fù)數(shù)表示水平和垂直

回調(diào)函數(shù):響應(yīng)特定事件的時(shí)候被程序調(diào)用。為了能被程序識(shí)別,回調(diào)函數(shù)需要具備特定的簽名,并且必須注冊(cè)。

cv::Mat iamge(240,320,CV_8UC3,cv::Scanlar(0,0,255));//創(chuàng)建一個(gè)紅色圖像,通道次序?yàn)锽GR

CV ::Mat類是用來存放圖像(以及其他矩陣數(shù)據(jù))的數(shù)據(jù)結(jié)構(gòu)。

一旦沒有了指定cv::Mat對(duì)象的引用,分配的內(nèi)存就會(huì)被自動(dòng)釋放。避免了C++動(dòng)態(tài)內(nèi)存分配中經(jīng)常發(fā)生的內(nèi)存泄漏問題。實(shí)現(xiàn)方法是通過cv::Mat實(shí)現(xiàn)計(jì)數(shù)引用和淺復(fù)制。深復(fù)制可以使用copyTo方法?;蛘弋a(chǎn)生一個(gè)圖像副本的方法clone。

把一幅圖像復(fù)制到另一幅圖像中,且兩者的數(shù)據(jù)類型不一定相同,那就要使用convertTo方法;

圖像掩碼:

OpenCV中國(guó)的有些操作(copyTo)可以用來定義掩碼。函數(shù)或方法通常對(duì)圖像中所有的像素進(jìn)行操作,通過定義掩碼可以限制這些函數(shù)或方法的作用范圍。掩碼是一個(gè)8位圖像,如果掩碼中某個(gè)位置的值不為0,在這個(gè)位置上的操作就會(huì)起作用;如果為0,則不起作用。

操作像素:

椒鹽噪聲(salt-and-pepper noise):它隨機(jī)選擇一些像素,把他們的顏色替換成白色或者黑色。如果通信出錯(cuò),部分像素的值在傳輸時(shí)丟失,就會(huì)產(chǎn)生這種噪聲。

為了降低分析的復(fù)雜性,有時(shí)需要減少圖像多種顏色的數(shù)量。一種實(shí)現(xiàn)方法就是把RGB空間細(xì)分到大小相等的方塊中。例如,如果把每種顏色數(shù)量減少到1/8,那么顏色總數(shù)就變?yōu)榱?2*32*32.將舊圖像中的每個(gè)顏色值劃分到一個(gè)方塊,該方塊的中間值就是新的顏色值;新圖像使用新的顏色值,顏色數(shù)就減少了。

減色算法實(shí)現(xiàn):假設(shè)N是減色因子,將圖像中每個(gè)像素的值除以N(這里假設(shè)使用整數(shù)除法,不保留余數(shù))。然后將結(jié)果乘以N,得到N的倍數(shù),并且剛好不超過院士像素值。加上N/2,就得到相鄰的N倍數(shù)之間的中間值。對(duì)所有8位通道值重復(fù)這個(gè)過程,就會(huì)得到(256/N)*(256/N)*(256/N)種可能的顏色值。

其他減色算法:

data[i] = (data[i] / div)*div +div/2;

減色計(jì)算也可以使用取模運(yùn)算符,可以直接得到div的倍數(shù):

data[i] = data[i] - data[i] % div +div /2;

還可以使用位運(yùn)算。如果把減色因子限定為2的指數(shù),即div = pow(2,n),那么把像素值的前n為掩碼后就能得到最接近的div的倍數(shù)。可以用簡(jiǎn)單的位操作獲得掩碼:

  1. //用來截取像素值的掩碼
  2. uchar mask = 0xFF << n; //如div = 16,則mask= 0xF0
  3. *data & = mask; //掩碼
  4. *data++ += div >>1; //加上div/2
  5. //這里的+也可改為“按位或”運(yùn)算符

銳化濾波器:

0

-1

0

-1

5

-1

0

-1

0

在對(duì)像素領(lǐng)域進(jìn)行計(jì)算式,通常用一個(gè)核心矩陣來表示。這個(gè)核心矩陣展現(xiàn)了如何將于計(jì)算相關(guān)的像素組合起來得到預(yù)期的效果。

除非另有說明,當(dāng)前像素用核心矩陣中心單元格表示。核心矩陣中的每個(gè)單元格表示相關(guān)像素的乘法系數(shù),像素應(yīng)用核心矩陣得到的結(jié)果,即這些乘積的累加。核心矩陣的大小就是鄰域的大小。

根據(jù)銳化濾波器的要求,水平和垂直方向的四個(gè)相鄰像素與-1相乘,當(dāng)前像素與5相乘。這也是信號(hào)處理中卷積概念的基礎(chǔ)。

  • 用策略設(shè)計(jì)模式比較顏色
  • 用GrabCut算法分割圖像
  • 轉(zhuǎn)換顏色表示法
  • 用色調(diào)、飽和度和亮度表示顏色

策略設(shè)計(jì)模式:

策略設(shè)計(jì)模式把算法封裝進(jìn)類,盡可能的將算法的復(fù)雜性隱藏在一個(gè)直觀的編程接口后面,更有利于算法的部署??梢酝ㄟ^創(chuàng)建類的實(shí)例來部署算法,實(shí)例通常是在程序初始化的時(shí)候創(chuàng)建的。在運(yùn)行構(gòu)造函數(shù)時(shí),類的實(shí)例會(huì)用默認(rèn)值初始化算法的各種參數(shù),使其立即進(jìn)入可用狀態(tài)。還可以用適當(dāng)?shù)姆椒▉碜x寫算法的參數(shù)值。

GrabCut算法:

背景/前景分割步驟:

  1. 首先,把所有未標(biāo)記的像素臨時(shí)標(biāo)記為前景(cv::GC_PR_FGD)?;诋?dāng)前的分類情況,算法把像素劃分為多個(gè)顏色相似的組(即k個(gè)背景組和k個(gè)前景組)。
  2. 通過引入前景和背景像素之間的邊緣,確定背景/前景的分割(通過一個(gè)優(yōu)化過程來實(shí)現(xiàn)),在此過程中,將試圖連接具有相似標(biāo)記的像素,并且避免邊緣出現(xiàn)在強(qiáng)度相對(duì)均勻的區(qū)域。(Graph Cuts算法可以高效的解決這個(gè)優(yōu)化問題:把問題表示成一幅連通的圖形,然后在圖形上進(jìn)行分割,以形成最優(yōu)的形態(tài)。分割完成后,像素會(huì)有新的標(biāo)記。然后重復(fù)這個(gè)分組過程,找到新的最優(yōu)分割方案,如此反復(fù)。)

GrabCut算法是一個(gè)逐步改進(jìn)分割結(jié)果的迭代過程。

CIEL*a*b顏色模型:

利用RGB色彩空間計(jì)算顏色之間的差距并不是衡量?jī)蓚€(gè)顏色相似度的最好方式。實(shí)際上,RGB并不是感知均勻的色彩空間。

CIEL*a*b*就是一種具有感知均勻特性的顏色表示法。把圖像轉(zhuǎn)換到這種表示法后,就可以真正的使用圖像像素與目標(biāo)顏色之間的歐幾里得距離,來度量顏色之間的視覺相似度。

使用OpenCV的函數(shù)cv::cvtColor可以輕松的轉(zhuǎn)換圖像的色彩空間。

  1. //轉(zhuǎn)換成Lab色彩空間
  2. cv::cvtColor(image,converted,CV_BGR2Lab);

CIEL*u*v*是另一種感知均勻的色彩空間。若想從BGR轉(zhuǎn)換成CIEL*u*v*,可使用代碼CV_BGR2Luv.

L*a*b*和L*u*v*對(duì)亮度通道使用同樣的轉(zhuǎn)換公式,但對(duì)色度通道則使用不同的表示法。,另外,為了實(shí)現(xiàn)視覺感知上的均勻,這兩種色彩空間都扭曲了RGB的顏色范圍,所以這些轉(zhuǎn)換過程都是非線性的(不完全可逆)。

HSV和HLS這兩種色彩空間,把顏色分解成加值的色調(diào)和飽和度組件或亮度組件。用這種方式描述的顏色會(huì)更加自然。

把圖像的通道分割到三個(gè)獨(dú)立的圖像中,看到HSV的組件:

  1. std::vector<cv::Mat> channels;
  2. cv:split(hsv , channels);
  3. //channels[0]是色調(diào)
  4. //channels[1]是飽和度
  5. //channels[2]是亮度

引入色調(diào)/飽和度/亮度的色彩空間概念:因?yàn)槿藗兿矚g憑直覺用色彩、彩度、亮度等直觀屬性來描述分辨各種顏色,色調(diào)(hue)表示主色,飽和度(saturation)表示顏色的鮮艷程度,柔和的顏色飽和度較低,而彩虹的顏色飽和度就很高;亮度(brightness)是一個(gè)主觀的屬性,表示某種顏色的光亮程度。

注意:如果顏色的飽和度很低,計(jì)算出來的色調(diào)就很不靠譜。7

膚色檢測(cè)領(lǐng)域的大量研究已經(jīng)表明:來自不同人種的人群的皮膚顏色,可以在色調(diào)-飽和度色彩空間中很好的歸類。

  • 計(jì)算圖像直方圖
  • 利用查找表修改圖像外觀
  • 直方圖均衡化
  • 反向投影直方圖檢測(cè)特定圖像內(nèi)容
  • 用均值平移算法查找目標(biāo)
  • 比較直方圖搜索相似圖像
  • 用積分圖像統(tǒng)計(jì)像素

直方圖是一個(gè)簡(jiǎn)單的表格,表示一幅圖像(有時(shí)是一組圖像)中具有某個(gè)值的像素的數(shù)量。因此,灰度圖像的直方圖有256個(gè)項(xiàng)目。也叫箱子(bin)。0號(hào)箱子提供值為0的像素的數(shù)量,1號(hào)箱子提供值為1 的像素的數(shù)量,以此類推。如果把直方圖的所有箱子進(jìn)行累加,得到的結(jié)果就是像素的總數(shù)??梢园阎狈綀D歸一化,即所有箱子的累加和等于1。這時(shí),每個(gè)箱子的數(shù)值表示對(duì)應(yīng)的像素?cái)?shù)量占總數(shù)的百分比。

利用查找表修改圖像外觀:

1、對(duì)像素強(qiáng)度進(jìn)行簡(jiǎn)單的反轉(zhuǎn),即強(qiáng)度為0變成255、1變成254、255變成0,生成原始圖像的反向圖像。

2、定義一個(gè)修改原始圖像直方圖的查找表可以提高圖像的對(duì)比度。假設(shè)圖中根本沒有大于200的像素值??梢酝ㄟ^延伸直方圖來生成以個(gè)對(duì)比度更高的圖像。使用以個(gè)百分比閾值,在強(qiáng)度值中找到最小值和最大值,然后重新映射。

3、在彩色圖像上應(yīng)用查找表實(shí)現(xiàn)減色函數(shù)。

直方圖均衡化:

通過伸展直方圖使它布滿可用強(qiáng)度值的全部范圍,增強(qiáng)圖像對(duì)比度。但是很多時(shí)候,圖像的視覺缺陷并不因?yàn)樗氖褂玫膹?qiáng)度值范圍太窄,而是因?yàn)椴糠謴?qiáng)度值的使用頻率遠(yuǎn)高于其他強(qiáng)度值。因此,均衡對(duì)所有像素強(qiáng)度值的使用頻率可以作為提高圖像質(zhì)量的一種手段。(查找表是針對(duì)整幅圖像的多對(duì)一的轉(zhuǎn)換過程,所以直方圖是不能做到完全平穩(wěn)的。)

反向投影直方圖檢測(cè)特定圖像內(nèi)容:

假設(shè)需要在某幅圖像中檢測(cè)出特定的內(nèi)容,首先要做的就是選擇一個(gè)包含所需樣本的感興趣的區(qū)域。接著提取該ROI的直方圖,通過歸一化直方圖,可以得到一個(gè)函數(shù),得到特定強(qiáng)度值的像素屬于這個(gè)區(qū)域的概率。反向投影直方圖的過程:從歸一化后的直方圖中讀取概率值并把輸入圖像中的每個(gè)像素替換成與之對(duì)應(yīng)的概率值。(實(shí)驗(yàn)中除了云彩,其他區(qū)域也被錯(cuò)誤的檢測(cè)到了,這個(gè)概率函數(shù)是從簡(jiǎn)單的灰度直方圖提取的,很多其他像素的強(qiáng)度值域云彩像素的強(qiáng)度值是相同的,在對(duì)直方圖進(jìn)行反向投影時(shí)會(huì)用相同的概率值替換相同強(qiáng)度值的像素。還可以進(jìn)一步利用色彩信息提高檢測(cè)效果。)

均值偏移算法:

均值偏移算法是一個(gè)迭代過程,用于定位概率函數(shù)的局部最大值,方法是尋找預(yù)定義窗口內(nèi)部數(shù)據(jù)點(diǎn)的重心或加權(quán)平均值。然后,把窗口移動(dòng)到重心的位置,并重復(fù)該過程,知道窗口中心收斂到一個(gè)穩(wěn)定的點(diǎn)。OpenCV實(shí)現(xiàn)該算法定義了兩個(gè)停止條件:迭代次數(shù)達(dá)到最大值;窗口中心的偏移值小于某個(gè)限值,可認(rèn)為該位置收斂到一個(gè)穩(wěn)定點(diǎn)。

比較直方圖搜索相似圖像:

計(jì)算機(jī)視覺的重要課題:基于內(nèi)容的圖像檢索;而直方圖是標(biāo)識(shí)內(nèi)容的一種有效方式;

原理:逐個(gè)箱子的比較每個(gè)直方圖中的數(shù)值,并保存最小的值。然后把這些最小值累加,作為相似度測(cè)量值。(兩個(gè)沒有相同顏色的直方圖得到的交叉值為0 ,而兩個(gè)完全相同的直方圖得到的值就等于像素總數(shù)。)

其他算法:

  • 卡方測(cè)量法(cv::HISTCMP_CHISQR標(biāo)志)累加個(gè)箱子的歸一化平方差;
  • 關(guān)聯(lián)性算法(cv::HISTCMP_CORREL標(biāo)志)基于信號(hào)處理中的歸一化交叉關(guān)聯(lián)操作符測(cè)量?jī)蓚€(gè)信號(hào)的相似度。
  • Bhattacharyya測(cè)量法(cv::HISTCMP_BHATTACHARYYA標(biāo)志)和Kullback-Leibler發(fā)散度(cv::HISTCMP_KL_DIV標(biāo)志)都在用統(tǒng)計(jì)學(xué)中,評(píng)估兩個(gè)概率分布得相似度)
  • 推土機(jī)距離(Earth Mover Distance)是另一種流行的直方圖比較方法,在OpenCV中通過cv::EMD函數(shù)實(shí)現(xiàn)。這個(gè)方法的主要優(yōu)勢(shì)在于,它在評(píng)估兩個(gè)直方圖的相似度時(shí),考慮了在鄰近箱子中發(fā)現(xiàn)的數(shù)值。

積分圖像:

快速計(jì)算矩形區(qū)域內(nèi)的像素累加和;

原理:取矩形圖像左上方的全部像素計(jì)算累加和,并利用這個(gè)累加和替換圖像中的每一個(gè)像素,用這種方式得到的圖像稱為積分圖像。計(jì)算積分圖像時(shí),只需要對(duì)圖像掃描一次。實(shí)際上,當(dāng)前像素的積分值等于上方像素的積分值加上當(dāng)前行的累計(jì)值。因此積分圖像就是一個(gè)包含像素累加和的新圖像。為了防止溢出,積分圖像的值通常采用int類型(CV_32S)或float類型(CV_32F)。

積分圖像的像素A包含左上角區(qū)域,計(jì)算完積分圖像后,只需要訪問四個(gè)像素就可以得到任何矩形區(qū)域的像素累加和。計(jì)算有A、B、C、D四個(gè)像素表示區(qū)域的像素累加和,先讀取D的積分值,然后再減去B的像素值和C的左手邊區(qū)域的像素值。但這樣就把A左上角的像素累加和減了兩次,因此需要重新加上A的積分值。所以計(jì)算A、B、C、D區(qū)域內(nèi)的像素累加的公式為A-B-C+D。

自適應(yīng)閾值化:

即采用局部閾值,根據(jù)美國(guó)像素的鄰域計(jì)算閾值。將每個(gè)像素的值域鄰域的平均值進(jìn)行比較。如果某像素的值域它的局部平均值差別很大,就會(huì)被當(dāng)做異常值在閾值化過程中剔除。(自適應(yīng)閾值化需要計(jì)算每個(gè)像素周圍的局部平均值,這需要多次計(jì)算圖像窗口的累計(jì)值,可以通過積分圖像提高計(jì)算效率。)

bug

OpenCV的顏色空間轉(zhuǎn)換函數(shù):

參數(shù)dstCn原來一直沿用CV_BGR2GRAY, CV_RGB2GRAY, CV_GRAY2BGR, CV_GRAY2RGB等格式,但最新幾個(gè)版本的OpenCV已改為COLOR_BGR2GRAY類似形式,今天才看源代碼imgproc.hpp才發(fā)現(xiàn),但官方文檔還沒修改,如下圖,如果程序中使用較新的版本OpenCV,采用CV_BGR2GRAY可能會(huì)一直出錯(cuò)。

新的OpenCV中imgproc.hpp的定義如下:

  1. ...
  2. COLOR_BGR2HSV =40,
  3. COLOR_RGB2HSV =41,
  4. COLOR_BGR2Lab =44,
  5. COLOR_RGB2Lab =45,
  6. ...

解決:使用OpenCV3.4版本,導(dǎo)入opencv2

  • 用形態(tài)學(xué)濾波器腐蝕和膨脹圖像
  • 用形態(tài)學(xué)濾波器開啟和閉合圖像
  • 在灰度圖像中應(yīng)用形態(tài)學(xué)運(yùn)算
  • 在分水嶺算法實(shí)現(xiàn)圖像分割
  • 用MSER算法提取特征區(qū)域

數(shù)學(xué)形態(tài)學(xué):用于分析和處理離散圖像。它定義了一系列運(yùn)算,用預(yù)先定義的形狀元素探測(cè)圖像,從而實(shí)現(xiàn)圖像的轉(zhuǎn)換。這個(gè)形狀元素與像素鄰域的相交方式?jīng)Q定了運(yùn)算的結(jié)果。

用形態(tài)學(xué)濾波器腐蝕(cv::erode)和膨脹(cv::dilate)圖像

結(jié)構(gòu)元素:像素的組合。在對(duì)應(yīng)的像素上定義了一個(gè)原點(diǎn)(也稱錨點(diǎn))

形態(tài)學(xué)濾波器的應(yīng)用過程就包含了用這個(gè)結(jié)構(gòu)元素探測(cè)圖像中每個(gè)像素的操作過程。把某個(gè)像素設(shè)為結(jié)構(gòu)元素的原點(diǎn)后,結(jié)構(gòu)元素的圖像重疊部分的像素集就是特定形態(tài)學(xué)運(yùn)算的應(yīng)用對(duì)象。

用形態(tài)學(xué)濾波器開啟和閉合圖像

開啟和閉合濾波器的定義只與基本的腐蝕和膨脹運(yùn)算有關(guān);

定義:

閉合:是對(duì)圖像先膨脹后腐蝕;開啟:是對(duì)圖像先腐蝕后膨脹;

  1. //膨脹原圖像
  2. cv::dilate(image,result,cv::Mat());
  3. //就地腐蝕膨脹后的圖像
  4. cv::erode(result,result,cv::Mat());

調(diào)換這兩個(gè)函數(shù)的調(diào)用次序,就能得到開啟濾波器;濾波器常用于目標(biāo)檢測(cè);

閉合濾波器:可以把錯(cuò)誤分裂成小碎片的物體連接起來;

開啟濾波器:可以移除因圖像噪聲產(chǎn)生的斑點(diǎn);

因此:最好按一定的順序調(diào)用這些濾波器。如果優(yōu)先考慮過濾噪聲,可以先開啟后閉合,但這樣做的壞處是會(huì)消除部分物體碎片;

注意:對(duì)同一幅圖像進(jìn)行多次同樣的開啟運(yùn)算是沒有作用的(閉合運(yùn)算也一樣),因?yàn)榈谝淮问褂瞄_啟濾波器時(shí)已經(jīng)填充了空隙,再使用同一個(gè)濾波器將不會(huì)使圖像產(chǎn)生變化。即這些運(yùn)算是冪等(idempotent)的。

形態(tài)學(xué)梯度運(yùn)算可以提取圖像的邊緣(cv::morpholgyEx函數(shù))得到圖像中物體的輪廓。

  1. //用3*3結(jié)構(gòu)元素得到梯度圖像
  2. cv::Mat result;
  3. cv::morphlogyEx(image,result,cv::MORPH_GRADIENT,cv::Mat());

形態(tài)學(xué)頂帽(hat-top)變換可以從圖像中提取出局部的小型前景物體。(提取圖像中的文字)

  1. //使用7*7結(jié)構(gòu)元素做頂帽變換
  2. cv::Mat element7(7,7,CV_8U,cv::Scanlar(1));
  3. cv::morphologyEx(image,result,cv::MORPH_BLACKHAT,element7);

 形態(tài)學(xué)運(yùn)算在灰度圖像上的效果理解:

把圖像看做是一個(gè)拓?fù)涞孛玻煌叶燃?jí)別代表不同的高度(海拔),明亮的區(qū)域代表高山,黑暗的區(qū)域代表深谷;邊緣相當(dāng)于黑暗和明亮像素之間的快速過渡,因此可以比作陡峭的懸崖。腐蝕這種地形的最終結(jié)果是:每個(gè)像素被替換成特定領(lǐng)域內(nèi)的最小值,從而降低它的高度。結(jié)果是懸崖“縮小”,山谷“擴(kuò)大”。膨脹的效果剛好相反,即懸崖“擴(kuò)大”,山谷“縮小”。但不管哪種情況,平地(即強(qiáng)度值固定的區(qū)域)都會(huì)相對(duì)保持不變。

根據(jù)這個(gè)結(jié)論,可以得到一種檢測(cè)圖像邊緣(懸崖)的簡(jiǎn)單方法Beucher梯度:通過計(jì)算膨脹后的圖像與腐蝕后的圖像之間的差距得到邊緣。因?yàn)檫@兩種轉(zhuǎn)換后的圖像的差別主要在邊緣地帶。顯然,結(jié)構(gòu)元素越大,檢測(cè)到的邊緣就越寬。

另外兩種簡(jiǎn)單的方法得到類似效果:用膨脹后的圖像減去原始圖像,或者用原始圖像減去腐蝕后的圖像,那樣得到的邊緣會(huì)更窄。

分水嶺算法實(shí)現(xiàn)圖像分割

分水嶺變換是一種流行的圖像處理算法,用于快速將圖像分割成多個(gè)同質(zhì)區(qū)域。

思想:如果把圖像看作一個(gè)擴(kuò)屏地貌,那么同類區(qū)域就相當(dāng)于陡峭邊緣內(nèi)相對(duì)平坦的盆地。平、分水嶺算法通過逐步增高水位,把地貌分割成多個(gè)部分。(cv::watershed函數(shù))

MSER算法提取特征區(qū)域

最大穩(wěn)定外部區(qū)域(MSER)

該算法用相同的水淹類比,以便從圖像中提取有意義的區(qū)域。創(chuàng)建這些區(qū)域時(shí)也使用逐步提高水位的方法,但是該算法關(guān)注的是水淹過程中的某段時(shí)間內(nèi),保持相對(duì)穩(wěn)定的盆地。這個(gè)穩(wěn)定的盆地就是MSER。檢測(cè)方法:計(jì)算區(qū)域的當(dāng)前面積以及該區(qū)域原先的面積(比當(dāng)前水位低一個(gè)特定值的時(shí)候),并比較這兩個(gè)面積,如果相對(duì)變化達(dá)到局部最小值,就認(rèn)為這個(gè)區(qū)域時(shí)MSER。

  • 用低通濾波器進(jìn)行圖像濾波
  • 用濾波器進(jìn)行縮減像素采樣
  • 用中值濾波器進(jìn)行圖像濾波
  • 用定向?yàn)V波器檢測(cè)邊緣
  • 計(jì)算圖像的拉普拉斯算子

濾波是信號(hào)和圖像處理中的基本操作,它的目的是選擇性的提取圖像中某些方面的內(nèi)容;濾波可以去除圖像中的噪聲,提取有用的視覺特征,對(duì)圖像重新采樣。

頻域(frequency domain):圖像中灰度級(jí)的變化頻率;傅里葉變換或余弦變換顯示圖像的頻率成分;

圖像是二維的,因此,頻率分為:垂直頻率和水平頻率;

空域(spatial domain):灰度分布來描述圖像特征;

在頻域分析框架下,濾波器時(shí)一種放大(也可以不變)圖像中的某些頻段,同時(shí)濾掉(或減弱)其他頻段的算子。eg:低通濾波器的作用是消除圖像中的高頻部分;高通濾波器剛好相反,用來消除圖像中的低頻部分;

縮減像素采樣(downsampling):降低圖像精度的過程;

提升像素采樣(upsampling):提升圖像精度的過程;

Nyquist-Shannon定理:如果把圖像縮小一半,那么其可見的頻率帶寬也將減少一半。為了避免混疊現(xiàn)象的發(fā)生,在縮減圖像之前必須進(jìn)行低筒濾波(低通濾波可以消除在縮減后的圖像中無法表示的高頻部分)

像素插值:進(jìn)行插值的最基本的方法是使用最近鄰策略。把待生成圖像的像素網(wǎng)格放在原圖像的上方,每個(gè)新像素被賦予原圖像中最鄰近像素的值。當(dāng)像素升采樣(即新網(wǎng)格比原始網(wǎng)格更密集時(shí)),會(huì)根據(jù)同一個(gè)院士像素,確定新網(wǎng)格中多個(gè)像素的值。

中值濾波器:因?yàn)橹兄禐V波器是非線性的,所以不能用核心矩陣表示,也不能進(jìn)行卷積運(yùn)算。但它也是通過操作一個(gè)像素的鄰域,來確定輸出的像素值的。(中值濾波器把當(dāng)前像素和它的鄰域組成一個(gè)集合,然后計(jì)算出這個(gè)集合的中間值,以此作為當(dāng)前像素的值)。

中值濾波器對(duì)消除椒鹽噪聲非常有用;因?yàn)?,如果在某個(gè)像素鄰域中有一個(gè)異常的黑色或白色像素,該像素將無法作為中間值(它是最大值或最小值),因此肯定會(huì)被鄰域的值替換掉。

中值濾波器還有利于保留邊緣的尖銳度,但它會(huì)洗去均質(zhì)區(qū)域中的紋理(例如背景中的樹木)

因?yàn)?strong>中值濾波器具有良好的視覺效果,因此照片編輯軟件常用它創(chuàng)建特效??梢杂貌噬掌深愃瓶ㄍǖ膱D像。

用定向?yàn)V波器檢測(cè)邊緣:

高通濾波器進(jìn)行邊緣檢測(cè):放大圖像中的高頻成分;

Sobel濾波器:它只對(duì)垂直或水平方向的圖像頻率起作用(具體方向取決于濾波器選用的內(nèi)核)所以是一種定向?yàn)V波器。(圖像浮雕化的特效就是定向?yàn)V波器生成的)Sobel算子稱作邊緣檢測(cè)器,是一種典型的用于邊緣檢測(cè)的線性濾波器。如果把圖像看作二維函數(shù),那么Sobel算子就是圖像在垂直和水平方向變化的速度(梯度),它是一個(gè)二維向量,向量的元素時(shí)橫豎兩個(gè)方向的函數(shù)的一階導(dǎo)數(shù);

Sobel算子在水平和垂直方向計(jì)算像素值的差分,得到圖像梯度的近似值。它在像素周圍的一定范圍內(nèi)進(jìn)行運(yùn)算,以減少噪聲帶來的影響。cv::Sobel函數(shù)使用Sobel內(nèi)核來計(jì)算圖像的卷積。

梯度是一個(gè)二維向量,所以它有范數(shù)和方向,梯度向量的范數(shù)表示變化的振幅,計(jì)算時(shí)通常被當(dāng)做歐幾里得范數(shù)(L2范數(shù))。

梯度向量總是指向變化最劇烈的方向。對(duì)于一幅圖像來說,這意味著梯度的方向與邊緣垂直;

梯度算子:Prewitt算子;Roberts算子;Scharr算子;所有的這些定向?yàn)V波器都會(huì)計(jì)算圖像函數(shù)的一階導(dǎo)數(shù)。計(jì)算圖像導(dǎo)數(shù)的濾波器被稱為高通濾波器。

拉普拉斯算子(cv::Laplacian):一種基于圖像導(dǎo)數(shù)運(yùn)算的高通線性濾波器,它通過計(jì)算二階導(dǎo)數(shù)來度量圖像函數(shù)的曲率;

用拉普拉斯算子增強(qiáng)圖像的對(duì)比度:通過圖像中減去它的拉普拉斯圖像,可以增強(qiáng)圖像的對(duì)比度;

高斯差分:用兩個(gè)不同帶寬的高斯濾波器對(duì)一幅圖像做濾波,然后將這兩個(gè)結(jié)果相減,就能得到由較高的頻率構(gòu)成的圖像。這些頻率被一個(gè)濾波器保留,被另一個(gè)濾波器拋棄。

  • 用Canny算子檢測(cè)圖像輪廓
  • 用霍夫變換檢測(cè)直線
  • 點(diǎn)集的直線擬合
  • 提取連續(xù)區(qū)域
  • 計(jì)算區(qū)域的形狀描述子

要進(jìn)行基于內(nèi)容的圖像分析,就必須從構(gòu)成圖像的像素集中提取出有意義的特征:輪廓、直線、斑點(diǎn)等基本的圖像圖元;

用Canny算子檢測(cè)圖像輪廓

核心原理:用兩個(gè)不同的閾值來判斷哪個(gè)點(diǎn)屬于輪廓,一個(gè)是低閾值,一個(gè)是高閾值;

選擇低閾值:保證它能包含所有屬于重要圖像輪廓的邊緣像素。(由于使用了比較寬松的閾值,所以很多并不需要的邊緣也被檢測(cè)出來了)

選擇高閾值:作用就是界定重要輪廓的邊緣,排除掉異常的邊緣。(得到肯定屬于本場(chǎng)景中的重要輪廓)

Canny算法將這兩種邊緣分布圖結(jié)合,生成最優(yōu)的輪廓分布圖(在低閾值邊緣分布圖上只保留具有連續(xù)路徑的邊緣點(diǎn),同時(shí)把那些邊緣點(diǎn)連接到屬于高閾值邊緣分布圖的邊緣上。)這種基于兩個(gè)閾值獲得二值分布圖的策略被稱為滯后閾值化;

用霍夫變換(Hough transform)檢測(cè)直線

在霍夫變換中,用這個(gè)方程式表示直線:

ρ = X cosθ + Y sin θ    //ρ可以為負(fù)數(shù)

霍夫變換的目的是在二值圖像中找出全部直線,并且這些直線必須穿過足夠多的像素點(diǎn)。

處理方法:檢查輸入的二值分布圖中每個(gè)獨(dú)立的像素點(diǎn),識(shí)別出穿過該像素帶你的所有可能直線。如果同一條直線穿過很多像素點(diǎn),就說明這條直線明顯到足以被認(rèn)定。為了統(tǒng)計(jì)某條直線被標(biāo)識(shí)的次數(shù),霍夫變換使用了一個(gè)二維累加器。

霍夫變換也能用來檢測(cè)其他任何可以用一個(gè)參數(shù)方程來表示的物體,但一般來說參數(shù)越多,累加器的維數(shù)越多,霍夫變換就越復(fù)雜,可靠性也越低;

點(diǎn)集的直線擬合:

使每個(gè)點(diǎn)到直線的距離之和最小化(歐幾里得距離的計(jì)算速度最快),最小化計(jì)算的基礎(chǔ)是M估算法技術(shù),它采用迭代方式解決加權(quán)最小二乘法問題,其中權(quán)重與點(diǎn)到直線的距離成反比。

提取連續(xù)區(qū)域

原理:提取輪廓的算法,它系統(tǒng)的掃描圖像,直到找到連續(xù)區(qū)域。從區(qū)域的起點(diǎn)開始,沿著它的輪廓對(duì)邊界像素做標(biāo)記。處理完這個(gè)輪廓后,就從上個(gè)位置繼續(xù)掃描,直到發(fā)現(xiàn)新的區(qū)域。

計(jì)算區(qū)域的形狀描述子

連續(xù)區(qū)域通常代表著場(chǎng)景中的某個(gè)物體。為了識(shí)別該物體,或?qū)⑺c其他圖像元素作比較,需要對(duì)此區(qū)域進(jìn)行測(cè)量,以提取出部分特征。

邊界框:

在表示和定位圖像中區(qū)域的方法中,邊界框可能是最簡(jiǎn)潔的。

定義:能完整包含該形狀的最小垂直矩形。比較邊界框的高度和寬度,可以獲得物體在垂直或水平方向的特征,最小覆蓋圓通常在只需要區(qū)域尺寸和位置的近似值時(shí)使用;

如果要更緊湊的表示區(qū)域的形狀,可采用多邊形逼近。在創(chuàng)建時(shí)要制定精確度參數(shù),表示形狀與對(duì)應(yīng)的簡(jiǎn)化多邊形之間能接受的最大距離。

  • 檢測(cè)圖像中的角點(diǎn)
  • 快速檢測(cè)特征
  • 尺度不變特征的檢測(cè)
  • 多尺度FAST特征的檢測(cè)

興趣點(diǎn)(關(guān)鍵點(diǎn)或特征點(diǎn)):在圖像中選取某些特征點(diǎn)并對(duì)圖像進(jìn)行局部分析(提取局部特征),而非觀察整幅圖像(提取全局特征)只要圖像中有足夠多可檢測(cè)的興趣點(diǎn),并且這些興趣點(diǎn)各不相同且特征穩(wěn)定、能被精確定位。

檢測(cè)圖像中的角點(diǎn)

在圖像中搜索有價(jià)值的特征點(diǎn)時(shí),使用角點(diǎn)是一種不錯(cuò)的方法。角點(diǎn)是很容易在圖像中定位的局部特征。并且大量存在于人造物體中,角點(diǎn)的價(jià)值在于它是兩條邊緣線的結(jié)合點(diǎn),是一種二維特征,可以被精確的檢測(cè),Harris特征檢測(cè)是檢測(cè)角點(diǎn)的經(jīng)典方法。

Harris特征檢測(cè):在假定的興趣點(diǎn)周圍放置了一個(gè)小窗口,并觀察窗口內(nèi)某個(gè)方向上強(qiáng)度值的平均變化;

首先獲得平均強(qiáng)度值變化最大的方向,然后檢查垂直方向上的平均強(qiáng)度變化值,看它是否也很大;如果是,就說明這是一個(gè)角點(diǎn);判斷一個(gè)點(diǎn)為角點(diǎn)的條件是它的協(xié)方差矩陣的最小特征值要大于指定的閾值。

快速檢測(cè)特征:

FAST對(duì)角點(diǎn)的定義基于候選特征點(diǎn)周圍的圖像強(qiáng)度值。以某個(gè)點(diǎn)為中心做一個(gè)圓,根據(jù)圓上的像素值判斷該點(diǎn)是否為關(guān)鍵點(diǎn)。如果存在這樣一段圓弧,它的連續(xù)長(zhǎng)度超過周長(zhǎng)的3/4,并且它上面所有像素的強(qiáng)度值都與圓心的強(qiáng)度值明顯不同,那么久認(rèn)為這是一個(gè)關(guān)鍵點(diǎn)。

尺度不變特征的檢測(cè)

SURF特征(加速穩(wěn)健特征)不僅是尺度不變特征,而且是具有較高計(jì)算效率的特征。是SIFT算法的加速版。SURT和SIFT是受專利保護(hù)的,在用于商業(yè)應(yīng)用程序是必須遵守許可協(xié)議。這也是它們被放在cv::xfeatures2d包中的原因之一。

多尺度FAST特征的檢測(cè)

BRISK(二元穩(wěn)健恒定可擴(kuò)展關(guān)鍵點(diǎn))檢測(cè)法

ORB(定向FAST和旋轉(zhuǎn)BRIEF)檢測(cè)法 (原理基于每個(gè)被檢測(cè)的興趣點(diǎn)總是關(guān)聯(lián)了一個(gè)方向,ORB算法建議使用關(guān)鍵點(diǎn)周圍的圓形鄰域的重心方向。因?yàn)楦鶕?jù)定義,F(xiàn)AST關(guān)鍵點(diǎn)肯定有一個(gè)偏離中心點(diǎn)的重心,中心點(diǎn)與重心連線的角度重視非常明確) 這兩種可以實(shí)現(xiàn)快速可靠的圖像匹配,如果搭上相關(guān)的二值描述子,它們的性能可以進(jìn)一步提高。

  • 局部模板匹配
  • 描述并匹配局部強(qiáng)度值模式
  • 用二值描述子匹配關(guān)鍵點(diǎn)

局部模板匹配:

通過特征點(diǎn)匹配,可以將一幅圖像的點(diǎn)集和另一幅圖像(或一批圖像)的點(diǎn)集關(guān)聯(lián)起來。如果兩個(gè)點(diǎn)集對(duì)應(yīng)著現(xiàn)實(shí)世界中的同一個(gè)場(chǎng)景元素,它們就應(yīng)該是匹配的。

僅憑單個(gè)像素就判斷兩個(gè)關(guān)鍵點(diǎn)的相似度顯然是不夠的,因此要在匹配過程中考慮每個(gè)關(guān)鍵點(diǎn)周圍的圖像塊。如果兩幅圖像塊對(duì)應(yīng)著同一場(chǎng)景元素,那么它們的像素值應(yīng)該會(huì)比較相似。

最常見的圖像塊是邊長(zhǎng)為奇數(shù)的正方形,關(guān)鍵點(diǎn)的位置就是正方形的中心??赏ㄟ^比較塊內(nèi)像素的強(qiáng)度值來衡量?jī)蓚€(gè)正方形圖像塊的相似度。(常見的方案是采用簡(jiǎn)單的差的平方和(Sum of Squared Differents,SSD)先使用FAST檢測(cè)器檢測(cè)每幅圖像的關(guān)鍵點(diǎn)。

只要兩幅圖像的視角和光照都比較相似,僅用差值平方和來比較兩個(gè)圖像窗口也能得到較好的結(jié)果。

實(shí)際上,只要光照有變化,圖像塊中所有像素的強(qiáng)度值就會(huì)增強(qiáng)或降低,差值平方也會(huì)發(fā)生很大的變化。為了減少光照對(duì)匹配結(jié)果的影響,還可以采用衡量圖像窗口相似度的其他公式:如歸一化的差值平方和

模板匹配:

圖像分析中的常見任務(wù)是檢測(cè)圖像中是否存在特定的圖案或物體。實(shí)現(xiàn)方法是把包含該物體的小圖像作為模板,然后在指定圖像上搜索與模板相似的部分。搜索的范圍通常僅限于可能發(fā)現(xiàn)該物體的區(qū)域。在這個(gè)區(qū)域上滑動(dòng)模板,并在每個(gè)像素位置計(jì)算相似度。

cv::matchTemplate  //函數(shù)的輸入對(duì)象是一個(gè)小圖像模板和一個(gè)被搜索的圖像。

模板尺寸M×N,圖像尺寸為W×H,則結(jié)果矩陣的尺寸就是(W-M+1)×(H-N+1)

描述并匹配局部強(qiáng)度值模式:

在圖像分析中,可以用鄰域包含的視覺信息來標(biāo)識(shí)每個(gè)特征點(diǎn),以便區(qū)分各個(gè)特征點(diǎn)。特征描述子通常是一個(gè)N維向量,在光照變化和拍攝角度發(fā)生微小扭曲時(shí),它描述特征點(diǎn)的方式不會(huì)發(fā)生變化。通??梢杂煤?jiǎn)單的差值矩陣來比較描述子(歐幾里得距離)。

 

使用SURF和SIFT的特征和描述子可以進(jìn)行尺度無關(guān)的匹配。

1、交叉檢查匹配項(xiàng)

有一種簡(jiǎn)單的方法可以驗(yàn)證得到的匹配項(xiàng),即重新進(jìn)行同一個(gè)匹配過程,但在第二次匹配時(shí),將第二幅圖像的每個(gè)關(guān)鍵點(diǎn)逐個(gè)與第一幅圖像的關(guān)鍵點(diǎn)進(jìn)行比較。只有在兩個(gè)方向都匹配了同一對(duì)關(guān)鍵點(diǎn)(即兩個(gè)關(guān)鍵點(diǎn)互為最佳匹配)時(shí),才認(rèn)為是一個(gè)有效的匹配項(xiàng)。

  1. cv::BFMatcher matcher2(cv::NORM_L2, //度量差距
  2. true); //交叉檢查標(biāo)志

2、比率檢驗(yàn)法

當(dāng)場(chǎng)景中有很多相似的物體,一個(gè)關(guān)鍵點(diǎn)可以與多個(gè)其他關(guān)鍵點(diǎn)匹配,錯(cuò)誤匹配項(xiàng)非常多,需要將其排除。因此需要找到兩個(gè)最佳的匹配項(xiàng)。循環(huán)遍歷每個(gè)關(guān)鍵點(diǎn)匹配項(xiàng),然后執(zhí)行比率檢驗(yàn)法。

3、匹配差值的閾值化

把描述子之間的差值太大的匹配項(xiàng)排除。(多個(gè)策略結(jié)合使用提升匹配效果)

 

 

  • 計(jì)算圖像對(duì)的基礎(chǔ)矩陣
  • 用RANSAC算法匹配圖像
  • 計(jì)算兩幅圖像之間的單應(yīng)矩陣
  • 檢測(cè)圖像中的平面目標(biāo)

 

計(jì)算圖像對(duì)的基礎(chǔ)矩陣:

我們知道,沿著三維點(diǎn)X和相機(jī)中心點(diǎn)之間的連線,可在圖像上找到對(duì)應(yīng)的點(diǎn)x。反過來,在三維空間中,與成像平面上的位置x對(duì)應(yīng)的腸鏡點(diǎn)可以位于線條上的任何位置。這說明如果要根據(jù)圖像中的一個(gè)點(diǎn)找到另一幅圖像中對(duì)應(yīng)的點(diǎn),就需要在第二個(gè)成像平面上沿著這條線的投影搜素。這條虛線稱為點(diǎn)x的對(duì)極線。它規(guī)定了兩個(gè)對(duì)應(yīng)點(diǎn)必須滿足的基本條件,即對(duì)于一個(gè)點(diǎn),在另一個(gè)視圖中與它匹配的點(diǎn)必須位于它的對(duì)極線上,并且對(duì)極線的準(zhǔn)確方向取決于兩個(gè)相機(jī)的相對(duì)位置。事實(shí)上,所有對(duì)極線組成的結(jié)構(gòu)決定了雙視圖系統(tǒng)的幾何形狀。

用RANSAC(隨機(jī)抽樣一致性)算法匹配圖像

計(jì)算兩幅圖像之間的單應(yīng)矩陣

仍然考慮三維點(diǎn)和它在相機(jī)中的影像之間的投影關(guān)系,會(huì)發(fā)現(xiàn)有兩種特殊情況,這種特殊的矩陣稱為單應(yīng)矩陣:

第一:同一場(chǎng)景中兩個(gè)視圖之間的差別只有(這是外部矩陣的第四列全部變?yōu)?,即沒有平移量),在這種特殊情況下,投影關(guān)系就變?yōu)榱?×3的矩陣。

第二:如果拍攝目標(biāo)是一個(gè)平面,也會(huì)出現(xiàn)類似的情況,這時(shí),可以假設(shè)仍能保持通用性,即平面上的點(diǎn)都位于Z=0的位置。場(chǎng)景點(diǎn)中值為0 的坐標(biāo)會(huì)消除掉投影矩陣的第三列,從而又變成一個(gè)3×3的矩陣。

在這種特殊情況下,世界坐標(biāo)系的點(diǎn)和它的影像之間是線性關(guān)系。由于該矩陣是可逆的,所以只要兩個(gè)視圖只是經(jīng)過了旋轉(zhuǎn)或者拍攝的是平面物體,那么就可以將一個(gè)視圖中的像素點(diǎn)與另一個(gè)視圖中的對(duì)應(yīng)的像素點(diǎn)直接關(guān)聯(lián)起來。單應(yīng)矩陣的格式為:

其中H是一個(gè)3×3矩陣。這個(gè)關(guān)系式包含了一個(gè)尺度因子,用s表示。計(jì)算得到這個(gè)矩陣后,一個(gè)視圖中的所有點(diǎn)都可以根據(jù)這個(gè)關(guān)系式轉(zhuǎn)換到另一個(gè)視圖。(注意,在使用單位矩陣關(guān)系式后,基礎(chǔ)矩陣就沒有意義了。)

檢測(cè)圖像中的平面目標(biāo)

采取的方法是檢測(cè)這個(gè)平面物體的特征點(diǎn),然后試著在圖像中匹配這些特征點(diǎn)。然后用魯棒匹配方案來驗(yàn)證這些匹配項(xiàng),但要基于單應(yīng)矩陣。如果有效匹配項(xiàng)的數(shù)量很多,就說明該平面目標(biāo)在當(dāng)前圖像中。

由于不知道圖像中目標(biāo)物體的大小,所以我們把目標(biāo)圖像轉(zhuǎn)換成一系列不同的尺寸,構(gòu)建成一個(gè)金字塔。除了這種方法,也可以采用尺度不變特征。

執(zhí)行三個(gè)步驟:

1、在輸入圖像中檢測(cè)興趣點(diǎn)。

2、將圖像與目標(biāo)金字塔總的每幅圖像進(jìn)行魯棒匹配,并把優(yōu)質(zhì)匹配項(xiàng)最多的那一層保留下來;如果這一層的匹配項(xiàng)小足夠多,就可以認(rèn)為已經(jīng)找到目標(biāo)。

3、使用得到的單應(yīng)矩陣和cv::getPerspectiveTransform函數(shù),把目標(biāo)中的四個(gè)角點(diǎn)重新投影到輸入圖像中。

  • 相機(jī)標(biāo)定
  • 相機(jī)姿態(tài)還原
  • 用標(biāo)定相機(jī)實(shí)現(xiàn)三維重建
  • 計(jì)算立體圖像的深度

相機(jī)標(biāo)定

相機(jī)標(biāo)定的基本原理是,確定場(chǎng)景中一系列點(diǎn)的三維坐標(biāo)并拍攝這個(gè)場(chǎng)景,然后觀測(cè)這些點(diǎn)再圖像上投影的位置。有了足夠多的三維點(diǎn)和圖像上對(duì)應(yīng)的二維點(diǎn),就可以根據(jù)投影方程推斷出準(zhǔn)確的相機(jī)參數(shù)。顯然,為了得到精確的結(jié)果,就要觀測(cè)盡可能多的點(diǎn)?!?】是對(duì)一個(gè)包含大量三維點(diǎn)的場(chǎng)景取像。但是在實(shí)際操作中,這種做法幾乎是不可行的。【2】更實(shí)用的做法是從不同的視角為一些三維點(diǎn)拍攝多個(gè)照片。但是它除了需要計(jì)算相機(jī)本身的參數(shù),還需要計(jì)算每個(gè)相機(jī)視圖的位置。

 

 

 

 

 

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧洲一区二区三区自拍天堂| 日韩人妻有码一区二区| 欧美高潮喷吹一区二区| 日韩不卡一区二区三区色图| 俄罗斯胖女人性生活视频| 色综合伊人天天综合网中文| 福利专区 久久精品午夜| 久久国产精品热爱视频| 欧美日韩亚洲国产精品| 伊人天堂午夜精品草草网| 在线懂色一区二区三区精品| 成年人免费看国产视频| 青青操日老女人的穴穴| 精品人妻一区二区三区免费| 在线中文字幕亚洲欧美一区| 99日韩在线视频精品免费| 欧美日韩国产另类一区二区| 加勒比日本欧美在线观看| 日韩欧美高清国内精品| 高清一区二区三区大伊香蕉| 欧美一二三区高清不卡| 日本免费一区二区三女| 国产麻豆视频一二三区| 亚洲中文字幕视频一区二区| 一区二区三区日韩经典| 在线中文字幕亚洲欧美一区| 尹人大香蕉中文在线播放| 99精品人妻少妇一区二区人人妻| 久久综合九色综合欧美| 成人午夜爽爽爽免费视频| 一区二区三区人妻在线| 黄色国产精品一区二区三区| 精品少妇人妻av免费看| 亚洲国产成人久久一区二区三区| 亚洲国产精品久久网午夜| 麻豆在线观看一区二区| 亚洲二区欧美一区二区| 激情中文字幕在线观看| 人妻少妇av中文字幕乱码高清| 日韩夫妻午夜性生活视频| 亚洲内射人妻一区二区|