【OpenCV3影象處理】仿射變換 透視變換
影象處理的仿射變換和透視變換
仿射變換和透視變換更直觀的叫法可以叫做“平面變換”和“空間變換”。一個是二維座標(x,y),一個是三維座標(x,y,z)
仿射變換:二維平面的變換 ; 線性變換 ;已知3對座標點就可以求得變換矩陣
透視變換:三維空間的變換 ; 非線性變換 ;已知4對座標點可以求得變換矩陣
仿射變換(affine transformation)
仿射變換是空間直角座標系的變換,從一個二維座標變換到另一個二維座標,仿射變換是一個線性變換,他保持了影象的“平行性”和“平直性”,即影象中原來的直線和平行線,變換後仍然保持原來的直線和平行線,仿射變換比較常用的特殊變換有平移(Translation)、縮放(Scale)、翻轉(Flip)、旋轉(Rotation)和剪下(Shear)。
用公式可以表示為:
其中,p為變換前原始向量,q為變換後目標向量,A為線性變換矩陣,b為平移變換向量。公式可統一寫成矩陣形式以方便計算:
在影象處理中,我們所謂的向量是二維座標(x,y),所以向量p、q可以如下表示:
因此我們又能將上述矩陣改寫成:
其中
T矩陣只有6個引數,所以只要知道3個點對的對應座標,就可以求出T矩陣,也就得到A矩陣和b向量。
仿射變換也可以看成座標系的旋轉和縮放以及平移:
P點位置不變,座標系由(Xt,Yt)變換到(Xs,Ys),相應的座標有(Xtp,Ytp)變換成(Xsp,Ysp)。
其中(Xtp,Ytp)與(Xsp,Ysp)的關係如下:
OpenCV3中相應的函式:
estimateRigidTransform():計算多個二維點對或者影象之間的最優仿射變換矩陣 (2行x3列),H可以是部分自由度,比如各向一致的切變。
getAffineTransform():計算3個二維點對之間的仿射變換矩陣H(2行x3列),自由度為6.
warpAffine():對輸入影象進行仿射變換
透視變換(Perspective transformation)
透視變換(Perspective Transformation)是將圖片投影到一個新的視平面(Viewing Plane),也稱作投影對映(Projective Mapping)。通用的變換公式為:
變換矩陣可以拆成4部分,表示線性變換,比如scaling,shearing和ratotion。用於平移,產生透視變換。所以可以理解成仿射等是透視變換的特殊形式。經過透視變換之後的圖片通常不是平行四邊形(除非對映視平面和原來平面平行的情況)。
OpenCV3中相應的函式:
findHomography: 計算多個二維點對之間的最優單對映變換矩陣 H(3行x3列) ,使用最小均方誤差或者RANSAC方法 。
getPerspectiveTransform():計算4個二維點對之間的透射變換矩陣 H(3行x3列)
warpPerspective(): 對輸入影象進行透射變換
perspectiveTransform():對二維或者三維向量進行透射變換,也就是對輸入二維座標點或者三維座標點進行投射變換。
estimateAffine3D:計算多個三維點對之間的最優三維仿射變換矩陣H (3行x4列)
transform():對輸入的N維向量進行變換,可用於進行仿射變換、影象色彩變換.
findFundamentalMat:計算多個點對之間的基矩陣H。
相關推薦
【OpenCV3影象處理】仿射變換 透視變換
影象處理的仿射變換和透視變換 仿射變換和透視變換更直觀的叫法可以叫做“平面變換”和“空間變換”。一個是二維座標(x,y),一個是三維座標(x,y,z) 仿射變換:二維平面的變換 ; 線性變換 ;已知3對座標點就可以求得變換矩陣 透視變換:三維空間的變換
【OpenCV3影象處理】Mat類詳解 之 元素的獲取與賦值 ( 對比.at<>()函式 和 .ptr<>()函式)
Mat中畫素的獲取與賦值 計算機視覺中,影象的讀取是影象處理的基礎,影象就是一系列畫素值,OpenCV使用資料結構cv::Mat來儲存影象。cv::Mat是一個矩陣類,矩陣中每一個元素都代表一個畫素,對於灰度影象,畫素用8位無符號數,0表示黑色,255表示白色。對於彩色
【OpenCV3影象處理】RotatedRect類 詳解
RotatedRect是一個儲存旋轉矩形的類,通常用來儲存最小外包矩形函式minAreaRect( )和橢圓擬合函式fitEllipse( )返回的結果。儲存的值,完全取決在於函式的返回 cl
【OpenCV3影象處理】影象載入、顯示、儲存
一、影象載入 Mat cv::imread( const String & filename, int flags = IMREAD_COLOR ) 引數一:圖片所在的
【OpenCV3影象處理】繪圖功能總結(直線,矩形,圓,橢圓,多邊形,文字)
1、直線Line 函式原型: void cv::line ( InputOutputArray img, //影象 Point pt1,
【OpenCV3影象處理】查詢二值影象的邊緣 ( findContours()函式詳解 )
void cv::findContours ( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode
【數字影象處理】灰度變換函式(對數變換、反對數變換、冪次變換)
// 對比度增強.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <opencv2/opencv.hpp> #include <math.h> #include <iostream&g
【OpenCV影象處理】五、影象的幾何變換(下)
5.1 影象的縮放變換 影象的縮放指的是將影象的尺寸變小或變大的過程,也就是減少或增加原影象資料的畫素個數。簡單來說,就是通過增加或刪除畫素點來改變影象的尺寸。當影象縮小時,影象會變得更加清晰,當影象放大時,影象的質量會有所下降,因此需要進行插值處理。 在影象縮放中常常會用
【RAW影象處理】DxO PhotoLab for Mac破解版
DxO PhotoLab for Mac是一款專業的RAW影象處理軟體,可以讓使用者以最佳影象質量輕鬆生成RAW和JPEG影象,並且DxO PhotoLab Mac版還為使用者提供了一整套智慧輔助校正,讓您可以隨時手動進行微調,有需要的朋友快來看看吧! 下載地址DxO PhotoLab for
【數字影象處理】作業二 邊緣檢測與追蹤
作業二 邊緣檢測與追蹤 吳政億 151220129 [email protected] (南京大學 電腦科學與技術系, 南京 210093) 邊緣檢測 在邊緣檢測中,我使用了sobel,roberts,prewitt,marr作為運算元,對
【數字影象處理】作業一 直方圖均衡化
作業一 直方圖均衡化 吳政億 151220129 [email protected] (南京大學 電腦科學與技術系, 南京 210093) 實現細節 單通道直方圖均衡化
【數字影象處理】作業三 地理衛星雲圖處理
作業三 地理衛星雲圖處理 吳政億 151220129 [email protected] (南京大學 電腦科學與技術系, 南京 210093) 1 實驗要求 對衛星雲圖進行處理,保留經緯線,剝離大陸線邊界。允許應用所有matlab函式
【數字影象處理】opencv的安裝及vs2017環境的配置
1.安裝opencv 首先是安裝opencv,我是從官網下的,下載opencv,在官網下載最近的版本即可。 我是windows10系統,下載對應Windows的最新版。 下載後解壓就不說了,解壓後如下(每個版本可能解壓後不太一樣): 然後我們需要修改環境變
【數字影象處理】線性濾波、最大值濾波,最小值濾波、中值濾波、高頻補償濾波(vs2017+openCV)
一、實驗原理 1、線性濾波 ① 不管是低通線性濾波還是高通線性濾波原理都是一樣的,用圖一所示的濾波器模板進行加權處理,將最終得到的R值賦給w5對應的畫素。 ②低通線性濾波和高通線性濾波不同之處就在於: 低通線性濾波w1+w2+…+w9 = 1,且w1~w9全
【數字影象處理】Intensity Transformations and Histogram Equalization
實驗要求: 該實驗使用強度變換方法對影象進行增強。實驗影象為圖 3.8(a) (1.a) 用公式(3.2-2)所示的對數變換方法進行影象增強。 (1.b) 用公式(3.2-3)形式的指數變換方法進行影象增強。 實驗的目的是用(1.a)和(1.b)中的方法獲得最好的視覺化增
【數字影象處理】二維(2D)線性插值的應用
應用情況 在使用matlab對影象進行各種操作的時候經常要使用插值進行計算。 例如:影象縮放、影象旋轉、仿射變換等等。 線性插值 先介紹線性插值的概念。 已知兩個點(x1, y1)、(x2, y2),求它們中間橫座標為x的點的y值。 則可以利用如下公式進行插值
【OpenCV影象處理】十九、數學形態學方法(中)
1.擊中擊不中運算 擊中擊不中(hit or miss)定義在交集為空集的兩個結構元素的膨脹和腐蝕運算的基礎上。設B =(B1,B2)表示結構元素對,且B1 ∩ B2 = ∅ 則結構元素B對集合A的擊中積補種運算,記做 定義為: →運算過程為: (→當且僅當B1平移某一
【數字影象處理】七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
程式碼如下:void CImageProcessingView::OnTxzqPtph2() { if(numPicture==0) { AfxMessageBox("載入圖片後才能影象增強(平滑)!",MB_OK,0); return; } AfxMessageBox("影象
【python影象處理】影象的濾波(ImageFilter類詳解)
在影象處理中,經常需要對影象進行平滑、銳化、邊界增強等濾波處理。在使用PIL影象處理庫時,我們通過Image類中的成員函式filter()來呼叫濾波函式對影象進行濾波,而濾波函式則通過ImageFil
【VC影象處理】直方圖均衡化
/*img 為輸入原圖 outimg為輸出直方圖 probality為輸出的灰度直方概率,是陣列*/ void Histogram(Mat img,Mat &outImg,float *probality) { outImg.create(500,256,CV_8