原則として詳細画像回転画像スケーリングをシフトOpenCVの画像変換画像

一般的な2次元画像は2×3マトリクス及び透視変換に基づいて、3×3マトリックスを含むアフィン変換原理から変換されました。

アフィン変換

原則

基本的な画像変換は、変換を二次元座標であり:1つの2次元座標(x、y)から線形変換の別の二次元座標(U、V)に:
アフィン変換式
行列形式で書かれている場合である:
アフィン変換行列表現
定義された次のように
各部分は、アフィン変換行列が記載されて表します
行列Tは(2×3)のアフィン変換は、変換行列であると呼ばれる、Rは線形変換行列であり、Tは、単に、アフィン変換が線形変換+翻訳され、変換行列です。変換は、このように3つの非共線点に対応するアフィン変換の一方のみを決定することができる不変の直線との間の相対的な位置関係、直線直線、平行線は依然として平行線で静止した後、線形変換自由並進の4度+自由自由アフィン変換→6度の2度。

OpenCVのアフィン変換を実現

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread('drawing.jpg')
rows, cols = img.shape[:2]

# 变换前的三个点
pts1 = np.float32([[50, 65], [150, 65], [210, 210]])
# 变换后的三个点
pts2 = np.float32([[50, 100], [150, 65], [100, 250]])

# 生成变换矩阵
M = cv.getAffineTransform(pts1, pts2)
# 第三个参数为dst的大小
dst = cv.warpAffine(img, M, (cols, rows))

plt.subplot(121), plt.imshow(img), plt.title('input')
plt.subplot(122), plt.imshow(dst), plt.title('output')
plt.show()

実験結果

図アフィン変換前後の比較。

既製の画像平行移動、回転、拡大縮小、フリップのアプリケーションOpenCVの

参照してください画像の幾何変換を達成するためにOpenCVの

翻訳

グラフィック翻訳
上下のx、y方向の直接並進運動、左/ムーブメント、2の自由度である、変換行列は以下のように表すことができます。
並進変換行列表現

回転

グラフィック回転
時計回りの回転は以下のように表すことができるようにラオは、特定の回転角度θ、自由度1が、翻訳が含まれていないの起源の回転軸方向です。
回転変換行列表現

転倒

フリップは、2つの自由度は、垂直に一例としてここで反転されるように、xまたはy方向又は1つの方向の全てにネゲートされます。
垂直フリップは行列を表し変換します

剛体変換

二点間の画像変換距離の前後が同じままであれば、この変化は、剛体変換と呼ばれていると言うことでも剛体変換として知られている回転+並進(剛体変換)。ボディ変換は平行移動、回転、フリップ、3自由度があります。剛体変換は、直線間の一定の長さのままでのみ回転及び並進するので、それはまた、ヨーロッパの変換(前ユークリッド距離を保持した後の変化)として知られています。変換行列は次のように表すことができます。
剛体変換行列表現

スケーリング

グラフィックズームスケーリングは、xとy方向、ズーム比、また、自由のスケーリング度を押す/情報の一部ではないが、延伸と呼ばれるような、非スケーリング自由の2度、マトリックス缶変換(複数)の尺度であります以下のように表します:
変換行列表現をスケーリング

相似変換

ロータリスケール相似変換として知られ、相似変換、回転、拡大縮小及び並進変換、自由度4を含みます。OpenCVのでは、回転は相似変換することによって達成される:
:スケールは、スケール、回転角θは、回転の中心(centerx、centery)である場合に、アフィン変換のように表すことができる
相似変換行列を表します

計算上式αとβに
剛体変換プラスと比較して、相似変換スケールは、それは変わらないユークリッド距離を保つことはありませんが、直線の間の角度は同じまま。

透視変換

アフィン変換後平行四辺形の前にまだある、と任意の変換を行うことはできません。
様々な視点変換します

原則

透視変換(透視変換)は、二次元画像、三次元ビュー平面に投影し、次に二次元座標に変換され、それは、投影マップ(射影マッピング)と呼ばれます。これは単に→→2次元3次元のプロセスです。
透視変換式:
透視変換式
透視変換行列を表す:
透視変換行列を表します。
アフィン変換は透視変換のサブセットです。次に、その後Z軸との二次元座標に変換することによって分割:
三次元透視変換 - >二次元
変換が新しい四角形を生成した後、透視変換は、アフィン変換と比較してより柔軟であるが、必ずしも平行四辺形、それは、4つの非共線点に必要ですオリジナルの線形変換がまっすぐまだ後にのみ決定します。四辺形平行四辺形すべてを含むので、ので、すべての透視変換のアフィン変換を含みます。

透視変換を達成するためのOpenCV

OpenCVの前と変換後の最初の4つの点は、透視変換のためcv.warpPerspective()とその後cv.getPerspectiveTransform(持つ3×3マトリクス変換)を生成します。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('card.jpg')

# 原图中卡片的四个角点
pts1 = np.float32([[148, 80], [437, 114], [94, 247], [423, 288]])
# 变换后分别在左上、右上、左下、右下四个点
pts2 = np.float32([[0, 0], [320, 0], [0, 178], [320, 178]])

# 生成透视变换矩阵
M = cv.getPerspectiveTransform(pts1, pts2)
# 进行透视变换,参数3是目标图像大小
dst = cv.warpPerspective(img, M, (320, 178))

plt.subplot(121), plt.imshow(img[:, :, ::-1]), plt.title('input')
plt.subplot(122), plt.imshow(dst[:, :, ::-1]), plt.title('output')
plt.show()

実験結果

改定の結果の写真

概要

画像は、様々な変化を示し
画像は、様々な変化を示し
アフィン変換や透視変換特性が要約されています

おすすめ

転載: www.cnblogs.com/wojianxin/p/12591410.html