001.opencv圖像幾何變換

1. 數(shù)學背景

1. 幾何變換的含義:改變圖像的幾何位置、形狀、尺寸等幾何特征
2018042310533551.jpeg
1.1 位置變換:(剛性變換)
  • 平移
    平移后:(x1,y1)
    平移前:(x0-tx,y0-ty)

    如果對應的平移前的點不在原圖中,則需要考慮賦0或255
    \left[\begin{array}{c}{x_{0}} \\ {y_{0}} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{1} & {0} & {-t x} \\ {0} & {1} & {-t y} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{x 1} \\ {y{1}} \\ {1}\end{array}\right]

  • 鏡像
    水平鏡像(假設原圖寬w)
    \left[\begin{array}{c}{x 0} \\ {y_{0}} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{-1} & {0} & {w} \\ {0} & {1} & {0} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{x 1} \\ {y 1} \\ {1}\end{array}\right]
    垂直鏡像(假設原圖高h)
    \left[\begin{array}{c}{x 0} \\ {y_{0}} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{1} & {0} & {0} \\ {0} & {-1} & {\mathrm{h}} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{x 1} \\ {y 1} \\ {1}\end{array}\right]

  • 旋轉
    以圖像中心點為旋轉中心:
    \left[\begin{array}{c}{x 1} \\ {y^{1}} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{\cos (a)} & {\sin (a)} & {0} \\ {-\sin (a)} & {\cos (a)} & {0} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{x{0}} \\ {y{0}} \\ {1}\end{array}\right]
    以指定點(a,b)為旋轉中心:

\begin{aligned}\left[\begin{array}{c}{x_{0}} \\ {y_{0}} \\ {1}\end{array}\right] &=\left[\begin{array}{ccc}{1} & {0} & {a} \\ {0} & {-1} &  \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{ccc}{\cos \theta} & {\sin \theta} & {0} \\ {-\sin \theta} & {\cos \theta} & {0} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{ccc}{1} & {0} & {-c} \\ {0} & {-1} & u0z1t8os \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{x_{1}} \\ {y_{1}} \\ {1}\end{array}\right] \\ =\left[\begin{array}{ccc}{\cos \theta} & {-\sin \theta} & {-c \cos \theta+d \sin \theta+a} \\ {\sin \theta} & {\cos \theta} & {-c \sin \theta-d \cos \theta+b} \\ {0} & {0} & {1}\end{array}\right] \end{aligned}

  • 轉置:
    \left[\begin{array}{c}{\mathrm{x} 0} \\ {\mathrm{y} 0} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{0} & {1} & {0} \\ {1} & {0} & {0} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{\mathrm{x} 1} \\ {\mathrm{y} 1} \\ {1}\end{array}\right]
1.2 形狀變換:縮放、錯切
  • 縮放:
    以圖像中心為原點
    \left[\begin{array}{c}{x_{0}} \\ {y_{\mathrm{o}}} \\ {1}\end{array}\right]=\left(\begin{array}{ccc}{\frac{1}{f_{x}}} & {0} & {0} \\ {0} & {\frac{1}{f_{y}}} & {0} \\ {0} & {0} & {1}\end{array}\right)\left[\begin{array}{c}{x} \\ {y} \\ {1}\end{array}\right]
    x_{0}=\frac{x}{f_{x}} \quad y_{0}=\frac{y}{f_{y}}
  • 錯切:圖像的錯切變換實際上是平面景物在投影平面上的非垂直投影效果


    Screen Shot 2019-07-21 at 10.58.21 PM.png

沿Y方向錯切:
\begin{array}{l}{X+\sin (\theta) * Y=\hat{X}} \\ {Y * \cos (\theta)=\dot{Y}}\end{array}
\left[\begin{array}{c}{\dot{X}} \\ {\dot{Y}} \\ {1}\end{array}\right]=\left[\begin{array}{ccc}{1} & {\sin (\theta)} & {0} \\ {0} & {\cos (\theta)} & {0} \\ {0} & {0} & {1}\end{array}\right] *\left[\begin{array}{l}{X} \\ {Y} \\ {1}\end{array}\right]
沿X方向錯切與沿Y方向錯切類似

1.3 仿射變換:仿射變換是圖像的位置變換、形狀變換的各種組合,位置圖像的“平直性”“平行性”
  • 仿射以及其他更復雜幾何變換


    20180423105453782.jpeg
  1. 幾何變換的特點:變換前后只改變圖像像素的空間位置,不改變像素的像素值

2.實現(xiàn)方式及效果

2.1 【平移+鏡像+旋轉+縮放】 都可以以仿射矩陣實現(xiàn)

1??生成一個和原始圖像等大的全黑/全白的矩陣
2??計算出平移后圖像的起點和終點
3??memcpy每行數(shù)據(jù)填充

OPENCV函數(shù):仿射變換(afftine transformation)來實現(xiàn)
warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)

src: 輸入圖像
M: 變換矩陣 (2X3)
dsize: 指定圖像輸出尺寸
dst: 輸出圖像,尺寸由dsize指定,圖像類型與原圖像一致
flags: 插值算法標識符
borderMode: 邊界像素模式,有默認值BORDER_CONSTANT
borderValue: 邊界取值,有默認值Scalar()即0

image = imread('cat.jpeg')
image = cv2.resize(image,(0,0),fx=0.5,fy=0.5,interpolation=cv2.INTER_LINEAR)
[h,w] = (image.shape[0],image.shape[1])
##以圖像中心為原點
M1 = np.float32([[-1,0,w-1],[0,1,0]])# 水平鏡像
M2 = np.float32([[1,0,0],[0,-1,h-1]])#垂直鏡像
M3 = np.float32([[1,0,5],[0,1,10]])#水平方向右移5個像素,垂直方向下移10個像素
xmirror = cv2.warpAffine(image,M1,(image.shape[1],image.shape[0]))
ymirror = cv2.warpAffine(image,M2,(image.shape[1],image.shape[0]))
shitfed = cv2.warpAffine(image,M3,(image.shape[1],image.shape[0]))
image_T = cv2.warpAffine(image,M4,(image.shape[1],image.shape[0]))
show(image)
show(xmirror)
show(ymirror)
show(shitfed)
Screen Shot 2019-07-21 at 10.12.13 PM.png

2.2 仿射等復雜變換

可以參考這篇blog:這是個鏈接

3.應用

圖像配準(雙光融合、雙攝或多攝像、AR/VR...)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容