OpenCV實現圖像拼接案例

一、penCV圖像特征采集

特征提取:

  一幅圖中總存在著一些獨特的像素點,這些點我們可以認為就是這幅圖的特征,成為特征點。

計算機視覺領域特征提取:

獲取一幅圖中存在著一些獨特的像素點。

需要解決問題:

  • 1、提取圖片中的特征點
  •  2、解決尺度不變性問題,不同大小的圖片獲取到的特征是一樣的。
  •  3、提取到的特征點要穩定,能被精確定位。

二、OpenCV 特征提取算法

特征提取算法:

三、OpenCV特征提取 

結果:提取到的特征很粗糙,不是很精確的特征點,導致效果很差。

要求:去粗取精,獲取優秀的匹配點。

四、OpenCV特征取精

取一幅圖像中的一個SIFT關鍵點,並找出其與另一幅圖像中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離得到的比率ratio少於某個閾值T,則接受這一對匹配點。 

五、OpenCV透視轉換

透視變換是按照物體成像投影規律進行變換,即將物體重新投影到新的成像平面。透視變換常用於機器人視覺導航研究中,由於相機視場與地面存在傾斜角使得物體成像產生畸變,通常通過透視變換實現對物體圖像的校正。 

使用cv::warpPerspective()進行透視變換

void cv::warpPerspective(

cv::InputArray src, // 輸入圖像

cv::OutputArray dst, // 輸出圖像

cv::InputArray M, // 3×3 變換矩陣

cv::Size dsize, // 目標圖像大小

int flags = cv::INTER_LINEAR, // 插值方法

int borderMode = cv::BORDER_CONSTANT, // 外推方法

const cv::Scalar& borderValue = cv::Scalar() //常量邊界時使用

);

透視矩陣 :

獲取特征矩陣:

a. 根據圖像的4個頂點來獲取特征矩陣

cv::Mat cv::getPerspectiveTransform( // 返回3×3透視變換矩陣

const cv::Point2f* src, // 源圖像四個頂點坐標(點數組)

const cv::Point2f* dst // 目標圖像上四個頂點的坐標(點數組)

);

b. 函數來計算透視矩陣H(3*3)

findHomography    (   

InputArray     srcPoints,//源平面中點的坐標矩陣.vector<Point2f>類型

InputArray     dstPoints,//目標平面中點的坐標矩陣,vector<Point2f>類型

int     method = 0,

double     ransacReprojThreshold = 3,

OutputArray     mask = noArray(),

const int     maxIters = 2000,

const double     confidence = 0.995

)

六、OpenCV圖像配準融合與圖像反投影優化

圖片拼接流程思想:

到此這篇關於OpenCV實現圖像拼接案例的文章就介紹到這瞭,更多相關OpenCV 圖像拼接內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: