01 引言
想象一下,當你拿起手機拍攝一張風景照時,由于角度或設(shè)備本身的限制,照片可能會有點歪斜或者變形。這時候,你是否希望有一種方法可以簡單地“拉直”這張照片,讓它看起來更加完美?或者,在構(gòu)建虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)的世界時,如何讓虛擬的東西自然地融入真實環(huán)境中?這些都可以靠仿射變換實現(xiàn)。
仿射變換不僅限于修復(fù)和美化靜態(tài)圖像,它還廣泛應(yīng)用于計算機視覺、機器人導(dǎo)航、醫(yī)學影像分析等多個高科技領(lǐng)域。比如:
- 計算機圖形學:在計算機圖形學中,仿射變換用于圖像和模型的變換,如旋轉(zhuǎn)、縮放和傾斜,以實現(xiàn)更豐富的視覺效果。
- 機器人技術(shù):在機器人技術(shù)中,仿射變換用于路徑規(guī)劃和運動變換,幫助機器人在空間中導(dǎo)航。
- 醫(yī)療成像:在醫(yī)療成像領(lǐng)域,仿射變換用于圖像配準,將不同時間或不同模態(tài)的圖像對齊,以便進行比較、分析或融合。
- 遙感圖像處理:在遙感圖像處理中,仿射變換用于對齊不同來源或不同時間拍攝的圖像,以便進行比較、分析或融合。
- 增強現(xiàn)實:在增強現(xiàn)實技術(shù)中,仿射變換用于將虛擬圖像與現(xiàn)實世界對齊,以實現(xiàn)更加自然和無縫的交互體驗。
02 概念解答
什么是仿射變換?
簡單來說,就像是把圖片或者圖形旋轉(zhuǎn)、拉伸、縮放和移動,但是有個特點,就是它不會讓圖形的形狀變得奇奇怪怪,比如直線經(jīng)過仿射變換后還是直線,角度和平行關(guān)系也都保持不變。
想象一下,你有一張紙,上面畫著一些圖案?,F(xiàn)在,你想把這些圖案換個方向,或者讓它們變大變小,或者把整個圖案挪到紙的另一個位置。仿射變換就是幫你實現(xiàn)這些變化的數(shù)學工具。它就像是一套規(guī)則,告訴你怎么通過一些簡單的操作,讓圖案按照你想要的方式變化,但不會扭曲圖案的形狀。

接下來,我們以仿射變換中的“旋轉(zhuǎn)”為例,看一下具體的操作步驟。
03 操作步驟
打開華清遠見人工智能虛擬仿真本地服務(wù)管理平臺,點擊啟動,服務(wù)啟動一次即可。

進入到人工智能虛擬仿真系統(tǒng),單擊“圖像旋轉(zhuǎn)”,進入實驗。

步驟一:圖片輸入
首先,導(dǎo)入一張原始圖片,可以用平臺默認的預(yù)設(shè)圖片,也可以自定義輸入圖片。
步驟二:單點旋轉(zhuǎn)
這一步要操作的是
1.將旋轉(zhuǎn)點平移到原點。
2.應(yīng)用旋轉(zhuǎn)矩陣進行旋轉(zhuǎn)。
3.將旋轉(zhuǎn)后的點移回原來的位置。
這樣可以將任意點的旋轉(zhuǎn)問題簡化為原點旋轉(zhuǎn)問題,便于計算。(具體的計算過程在人工智能在線實驗平臺手冊中查看)

步驟三:圖片旋轉(zhuǎn)
明白了單個點的旋轉(zhuǎn)過程之后,其實圖像旋轉(zhuǎn)也很好理解,就是將圖像里的每個像素點都帶入仿射變換矩陣里,從而得到旋轉(zhuǎn)后的新坐標。在OpenCV中,要得到仿射變換矩陣可以使用cv2.getRotationMatrix2D(),通過這個函數(shù)即可直接獲取到上面的旋轉(zhuǎn)矩陣,該函數(shù)需要接收的參數(shù)為:
Center:表示旋轉(zhuǎn)的中心點,是一個二維的坐標點(x,y)
Angle:表示旋轉(zhuǎn)的角度
Scale:表示縮放比例,可以通過該參數(shù)調(diào)整圖像相對于原始圖像的大小變化
所以在這一步填入兩個參數(shù):即要給圖像旋轉(zhuǎn)的角度(angle)和要縮放的比例(scale),根據(jù)這兩個數(shù)據(jù),求出旋轉(zhuǎn)之后的坐標,就可以進行整個圖像的旋轉(zhuǎn)。

這里可能會有一個問題,由于三角函數(shù)的值是小數(shù),那么其乘積也會是小數(shù),雖然OpenCV中會對其進行取整操作,但是像素點旋轉(zhuǎn)之后的取整結(jié)果也有可能重合,這樣就會導(dǎo)致可能會在旋轉(zhuǎn)的過程中丟失-部分原始的像素信息。并且如果使用了scale參數(shù)進行圖像的縮放的話,當圖像放大時,比如一個10*10的圖像放大成20*20,圖像由100個像素點變成400個像素點,那么多余的300個像素點是怎么來的?而當圖像縮小時,比如一個20*20的圖像縮小為10*10的圖像,需要丟掉300個像素點,那到底要怎么丟才能保證圖像還能是一個正常的圖像?因此我們需要一種方法來幫我們計算旋轉(zhuǎn)后的圖像中每一個像素點所對應(yīng)的像素值,從而保證圖像的完整性,這種方法就叫做插值法。
步驟四:插值方法
這一步可以看到平臺有五種插值方法:
- 最近鄰插值:目標像素點的像素值與對應(yīng)的原圖像像素值相同。
- 雙線性插值:利用原圖中四個真實像素點的值來決定目標圖中的一個像素點的值。
- 像素區(qū)域插值:縮小圖像時取平均值,放大圖像時使用最近鄰或雙線性插值。
- 雙三次插值:需要原圖像中近鄰的16個點來加權(quán)。
- Lanczos插值:需要原圖像周圍的64個像素點,使用不同的權(quán)重函數(shù)。

通過這幾種方式可以解決圖像縮放或者旋轉(zhuǎn)等操作時,由于像素之間的間隔不一致而導(dǎo)致的信息丟失和圖像質(zhì)量下降的問題。具體的每種方法計算方法,可在元宇宙實驗平臺操作手冊中查看。
步驟五:邊緣填充
為什么要填充邊緣呢?
可以看到,左圖在逆時針旋轉(zhuǎn)45度之后原圖的四個頂點在右圖中已經(jīng)看不到了,同時,右圖的四個頂點區(qū)域其實是什么都沒有的,因此我們需要對空出來的區(qū)域進行一個填充。右圖就是對空出來的區(qū)域進行了像素值為(0,0,0)的填充,也就是黑色像素值的填充。除此之外,后續(xù)的一些圖像處理方式也會用到邊緣填充,平臺介紹了五個常用的邊緣填充方法。
- 邊界復(fù)制:復(fù)制邊界像素值。
- 邊界反射:根據(jù)原圖邊緣進行反射。
- 邊界反射101:反射邊緣像素點,但方式不同。
- 邊界常數(shù):填充指定的常數(shù)值,默認為0。
- 邊界包裹:特殊類型的邊界處理。

步驟六:圖片輸出
點擊驗證,如顯示校驗成功,即代表邏輯無誤,驗證按鈕與校驗成功界面如下圖所示。

點擊運行,可以實現(xiàn)功能運行,并顯示結(jié)果輸出。點擊某張圖片可放大查看效果。
以上就是一個完整的圖像旋轉(zhuǎn)操作過程,仿射變換中的圖像旋轉(zhuǎn)在圖像識別應(yīng)用場景中主要解決圖像因拍攝角度不同而導(dǎo)致的方向不一致問題,通過旋轉(zhuǎn)圖像使其與標準方向?qū)R,確保了識別算法能夠準確地識別和分析圖像內(nèi)容,不受角度的影響,從而提高了識別系統(tǒng)的準確性和魯棒性。
仿射變換不只是圖像處理中的一個關(guān)鍵技術(shù),它也是計算機視覺領(lǐng)域的重要組成部分。因此,如果你對圖像的幾何變換感興趣,想要深入了解其原理和應(yīng)用,我們的Python+圖像處理OpenCV課程就能幫到你。
我們的課程會帶你從基礎(chǔ)開始,學習如何用Python編程,怎么用OpenCV處理圖像,還會手把手帶你實戰(zhàn)OpenCV車牌識別項目。重要的是,我們的課程還提供元宇宙人工智能在線實驗平臺,讓你能在一個模擬的環(huán)境中,邊學邊練,高效學習。自由探索,嘗試不同的算法,看看它們對圖像有什么影響,這對理解圖像增強的原理和應(yīng)用特別有幫助。
后臺私信雯雯老師,一起學習人工智能OpenCV~!
?5年時間打造,元宇宙人工智能在線實驗平臺
?30天趣玩趣學,算法原理+代碼實現(xiàn)+項目實戰(zhàn)
?200余講課程,邊學邊練,在線答疑
-
圖像處理
+關(guān)注
關(guān)注
27文章
1329瀏覽量
58060 -
AI
+關(guān)注
關(guān)注
88文章
35164瀏覽量
280015 -
人工智能
+關(guān)注
關(guān)注
1807文章
49029瀏覽量
249581 -
仿射變換
+關(guān)注
關(guān)注
0文章
2瀏覽量
5790
發(fā)布評論請先 登錄
嵌入式人工智能的就業(yè)方向有哪些?
FPGA在人工智能中的應(yīng)用有哪些?
人工智能技術(shù)—AI
了解AI人工智能背后的科學?
人工智能的就業(yè)方向詳解
初學AI人工智能需要哪些技術(shù)?這幾本書為你解答
人工智能:超越炒作
人工智能——MATLAB圖像處理及機器學習
史上最全AI人工智能入門+進階學習視頻全集(200G)【免費領(lǐng)取】
《移動終端人工智能技術(shù)與應(yīng)用開發(fā)》人工智能的發(fā)展與AI技術(shù)的進步
【每天學點AI】實戰(zhàn)圖像增強技術(shù)在人工智能圖像處理中的應(yīng)用

評論