tft每日頭條

 > 生活

 > pythonopencv圖像怎麼弄

pythonopencv圖像怎麼弄

生活 更新时间:2024-10-13 04:58:13

1.投影變換

在仿射變換的過程中,物體的轉換都是在二維空間中完成的,但是如果物體在三維空間中發生了轉換,這種轉換一般叫作投影變換。

因為投影變換是在三維空間内進行的,所以對其進行修正十分困難。但是如果物體是平面的,那麼就能通過二維投影變換對此物體三維變換進行模型化,這就是專用的二維投影變換,可由如下公式描述:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)1

在OpenCV中提供了cv2.getPerspectiveTransform()函數來計算投影變換矩陣,其一般格式為:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)2

dst表示目标圖像。 src表示原始圖像。注意 這裡需要輸入4組對應的坐标變換,src和dst分别是4×2的二維矩陣,其中每一行代表一個坐标,而且數據類型必須是32位浮點型,否則會報錯。

python實現:類似于仿射變換,OpenCV提供了cv2.warpPerspective()函數來實現投影變換功能,其一般格式為:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)3

其中:src表示原始的圖像。M表示投影變換矩陣。dsize表示投影後圖像的大小。flags表示插值方式。borderMode表示邊界模式。borderValue表示邊界值。其使用方法與仿射變換相似,隻是輸入的變換矩陣變為3行3列的投影變換矩陣。

實例:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)4

執行結果:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)5

可以看出,變換的效果與一個平面物體在三維空間中進行旋轉、平移等變換後的結果相似。因為投影變換矩陣是由4組對應的坐标決定的,所以通過投影變換可以将一幅圖“放在”任何不規則的四邊形中,而仿射變換卻保持了線的平行性。

ps:用人話解釋就是,我們如果想要将2維的平面圖片在三維空間中進行操作,就必須要先找到你要操作圖片的區域坐标,然後再找到你想要将其形變的位置坐标。這樣通過公式計算出最終我們需要的M數值,最後将M數值代入到轉換函數。最終呈現出來的就是這種效果。

2.極坐标變換

通常利用極坐标變換來校正圖像中的圓形物體或被包含在圓環中的物體。

1.笛卡爾坐标轉極坐标原理

笛卡兒坐标系xoy平面上的任意一點(x, y),以為中心,通過以下計算公式對應到極坐标系θor上的極坐标(θ, r):

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)6

上式中,θ的取值範圍用角度表示為0~360 °,反正切函數arctan 2返回的角度和笛卡兒坐标點所在的象限有關,如果[插圖]在第一象限,反正切的角度範圍為0~90°;如果在第二象限,反正切的角度範圍為90°~180°;如果在第三象限,反正切的角度範圍為-180°~-90°;如果在第四象限,反正切的角度範圍為-90°~0°。通常将時返回的正切角度加上一個周期360°,所以經過極坐标變換後的角度範圍為0~360°。

2.極坐标轉笛卡爾坐标原理

在已知極坐标(θ, r)和笛卡兒坐标的條件下,計算笛卡兒坐标以(x, y)為中心的極坐标變換是(θ, r),可通過以下公式計算:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)7

3.圖像中的應用:

假設輸入圖像矩陣為I, [插圖]代表極坐标空間變換的中心,輸出圖像矩陣為O,比較直觀的策略是利用極坐标和笛卡兒坐标的一一對應關系得到O的每一個像素值,即

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)8

這裡的θ和r都是以1為步長進行離散化的,由于變換步長較大,輸出圖像矩陣O可能會損失原圖的很多信息。可以通過以下方式進行改進,假設要将[插圖]與的距離範圍為[插圖]rmin, rmax[插圖]、角度範圍在[θmin,θmax ]内的點進行極坐标向笛卡兒坐标的變換,當然這個範圍内的點也是無窮多的,仍需要離散化;假設r的變換步長為rstep,0<rstep≤1, θ的變換步長為θstep, θstep一般取[插圖], N≥2,則輸出圖像矩陣的寬[插圖],高[插圖],圖像矩陣O的第i行第j列的值可通過以下公式進行計算:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)9

4.python中的極坐标變換

在OpenCV中提供了兩種進行極坐标變換的函數,分别是linearPolar()函數和logPolar()函數,其中linearPolar()函數的一般格式為:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)10

其中:src表示原始的圖像。 dst表示輸出圖像。center表示極坐标變換中心。maxRadius表示極坐标變換的最大距離。flags表示插值算法。

logPolar()函數的一般格式為:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)11

其中: src表示原始的圖像。 dst表示輸出圖像。center表示極坐标變換中心。M表示極坐标變換的系數。flags表示轉換的方向。

linearPolar()實例:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)12

執行結果:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)13

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)14

函數linearPolar()生成的極坐标,θ在垂直方向上,r在水平方向上。可以看到裡面的圖形在垂直方向上被壓縮了,這是極坐标變換時θ的步長較大造成的。請注意,linearPolar()函數有兩個缺點,第一是變換時的步長不可控,第二是隻能對整個圓進行變換。

logPolar()實例:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)15

執行結果:

pythonopencv圖像怎麼弄(6.基于python和opencv的圖像處理-幾何變換2)16

顯示了logPolar()函數對原始圖像的對數極坐标變換,可以看出,M的值越大,變換後得到的圖像信息越多。

ps:極坐标的原理确實晦澀難懂,但是在python實現時,我們隻要關注這兩個函數就行,知道極坐标的兩個函數中,每一個參數代表什麼意思,如何修改即可。

(以上内容為機器學習:基于OpenCV和Python的智能圖像處理個人學習筆記,此書由高敬鵬、江志烨、趙娜編寫,如有侵權,聯系删除)

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved