在影象對映章節初始,老師向我們介紹了影象之間變換的幾種形式,其中包括平移、旋轉、尺度變換、仿射變換、透視變換等。而對影象塊應用仿射變換稱之為影象扭曲或者仿射扭曲,仿射變換的乙個簡單例子是能夠將影象或影象的一部分放置在另一幅影象中,使他們能夠和指定的區域或者標記物對齊。扭曲操作可以使用 scipy 工具包中的 ndimage 包完成。
仿射變換:它相當於乙個平移變換和乙個非均勻變換的復合,用a矩陣表示,a為3×3矩陣,a=,,} 其中a可以分解為:a=r(a)r(-b)dr(b),其中d=,},左上角2×2矩陣為旋轉部分,tx和ty為平移因子,它有6個自由度,即旋轉4個,x方向平移,y方向平移。他能保持平行性,不能保持垂直性,image中各部分變換前後面積比保持不變,共線線段或者平行線段的長度比保持不變,向量的線性組合不變。面積被縮放了c1*c2=deta倍。仿射變換引數( t )求解時,可以用等式兩邊同時乘上已知矩陣的轉置矩陣的方法將往往不可逆的矩陣變換求解:
a t = b
at a t = at b
t = ( at a ) -1 at b
放置影象的過程中,使用warp.py檔案中的image_in_image()函式可以將目標影象中的角點座標作為輸入引數將第一幅扭曲後的影象與目標影象融合成了 alpha 影象,扭曲的影象是在扭曲區域邊界之外用 0 填充的影象,因此可以得到放置後的覆蓋效果,而當前我們處理過程中的角點座標是通過檢視繪製好的影象人為手工確定的。
alpha是乙個8位的灰度影象通道,該通道用256級灰度來記錄像象中的透明度資訊,定義透明、不透明和半透明區域,其中黑表示透明,白表示不透明,灰表示半透明。**如下:
warp.py 當中的image_in_image()函式如下:
def image_in_image(im1,im2,tp):
""" put im1 in im2 with an affine transformation
such that corners are as close to tp as possible.
tp are homogeneous and counter-clockwise from top left. """
# points to warp from
m,n = im1.shape[:2]
fp = array([[0,m,m,0],[0,0,n,n],[1,1,1,1]])
h = homography.haffine_from_points(tp,fp)
im1_t = ndimage.affine_transform(im1,h[:2,:2],(h[0,2],h[1,2]),im2.shape[:2])
alpha = (im1_t > 0)
return (1-alpha)*im2 + alpha*im1_t
原書中的**在我的環境中直接執行會出現報錯:
要將 warp.py 中首行匯入語句修改為:
from scipy.spatial import delaunay
(上述**中已修改)
使用的兩張原圖:
融合後的結果:
**image_in_image()函式中:
shape方法的功能是讀取矩陣的長度,比如shape[0]就是讀取矩陣第一維度的長度。它的輸入引數可以使乙個整數表示維度,也可以是乙個矩陣。
haffine_from_points()會返回給定對應點對的最優仿射變換,適用於透視效應比較弱的情況下。
(計算機視覺)計算機視覺基礎
opencv cximage cimg freeimage opencv中vc庫的版本與visual studio版本的對應關係 vc8 2005 vc9 2008 vc10 2010 vc11 2012 vc12 2013 vc14 2015 vc15 2017 visual studio中的輔助...
Python計算機視覺程式設計
本書是計算機視覺程式設計的權威實踐指南,通過python語言講解了基礎理論與演算法,並通過大量示例細緻分析了物件識別 基於內容的影象搜尋 光學字元識別 光流法 跟蹤 3d重建 立體成像 增強現實 姿態估計 全景建立 影象分割 降噪 影象分組等技術。另外,書中附帶的練習還能讓讀者鞏固並學會應用程式設計...
計算機視覺
主講老師 曹洋 課程 視覺 基礎 底 層處理 影象處理 特徵提 取 中 層處理 影象分割 相機標 定 深度 估計 運 動估計 高層處 理 3d 重建 目 標識別 視 覺基 礎 底層 處理 圖 像處理 特徵提取 中層 處理 圖 像分割 相機標定 深度估 計 運動 估計 高層處理 3d重 建 目標 識別...