轉(zhuǎn):opencv 坐標(biāo)系變換 logPolar()和linearPolar()

轉(zhuǎn)載:https://blog.csdn.net/zhubaohua_bupt/article/details/83932171

logPolar是把數(shù)據(jù)從笛卡爾轉(zhuǎn)到對數(shù)極坐標(biāo)系,linearPolar把數(shù)據(jù)從笛卡爾坐標(biāo)系轉(zhuǎn)到極坐標(biāo)坐標(biāo)系。

說到笛卡爾坐標(biāo)系到極坐標(biāo)系的轉(zhuǎn)換,大家并不陌生,公式如下:


image.png
image.png

笛卡爾轉(zhuǎn)到對數(shù)極坐標(biāo)系的轉(zhuǎn)換多了一層對數(shù),可表示如下

image.png

這里log以自然數(shù)e為底。

接下來,首先分析一下logPolar和linearPolar輸入輸出參數(shù)的含義以及用法,然后給出一些實(shí)驗(yàn)結(jié)果。

1 logPolar()

image

這里把imgproc.hpp里的函數(shù)接口粘了過來,從接口說明里我們可以看到,

輸入輸出圖像類型尺寸一致,輸入?yún)?shù)還包括center():轉(zhuǎn)換中心,M: scale 參數(shù)和flags(變換后圖像插值方法)

logPolar()是這樣做的轉(zhuǎn)換:


I = (dx,dy) = (x - center.x,y - center.y) \\
\rho = M \cdot log_e(\texttt{magnitude} (I)) ,\\
\phi = Ky \cdot \texttt{angle} (I)_{0..360 deg} \\

M = src.cols / log_e(maxRadius) \\
Ky = src.rows / 360 \\

上述說明中,除了基本的變換公式外,M和Ky這兩個(gè)參數(shù)需要注意一下,這兩個(gè)參數(shù)決定著變換后半徑[圖片上傳失敗...(image-ca21af-1604301036485)]

和角度[圖片上傳失敗...(image-c1d07e-1604301036485)]

的尺度,也就是說,在變換后的極坐標(biāo)圖像上,x、y方向上單位像素與半徑[圖片上傳失敗...(image-bb889a-1604301036485)]

和角度[圖片上傳失敗...(image-33dad6-1604301036485)]

的關(guān)系。

  • M決定輸出圖像x軸([圖片上傳失敗...(image-cbe3ef-1604301036484)]

    )的尺度,Ky決定y軸([圖片上傳失敗...(image-dc4d21-1604301036484)]

    )的尺度。

  • 注意到,函數(shù)沒有讓我們手動設(shè)置Ky的值,Ky =src.rows / 360已經(jīng)寫死,這樣的話,輸出極坐標(biāo)圖像y軸從y=0到y(tǒng)y=row-1的范圍表示角度從0到360度的變化。

參數(shù)M沒有寫死,我們可以通過接口改變,那M = src.cols / log_e(maxRadius), 代表什么意思呢, maxRadius是什么呢?

`回過頭來看笛卡爾向極坐標(biāo)的變換,現(xiàn)在把輸入圖像看作是一個(gè)二維笛卡爾坐標(biāo)系,如下圖我們可以自己設(shè)定center,假設(shè)center為圖像中心,那么maxRadius=[圖片上傳失敗...(image-85e64c-1604301036484)]

,那么我們就可以看出,此時(shí)乘M的作用就是在輸出圖像的x軸上,將log(`[圖片上傳失敗...(image-9479bd-1604301036485)]

)從x=0拉伸到x=col-1。

![image](https://upload-images.jianshu.io/upload_images/4688503-dce4d2219e4dbbc4?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

image

                  笛卡爾坐標(biāo)系圖輸入圖像                                         對數(shù)極坐標(biāo)系下圖像

2 linearPolar()

image

linearPolar和logPolar類似,比logPolar簡單些,其變換如下圖。

image
image
      笛卡爾坐標(biāo)系圖輸入圖像                                                        極坐標(biāo)系下圖像

3實(shí)驗(yàn)

下面來看幾個(gè)比較特殊的實(shí)驗(yàn),為了方便,用python實(shí)現(xiàn):

def polar(img):
  h, w = img.shape[:2]
  maxRadius = math.hypot(w/2,h/2)
  m = w / math.log(maxRadius)
  log_polar = cv2.logPolar(img, (w/2, h/2), m, cv2.WARP_FILL_OUTLIERS + cv2.INTER_LINEAR) 
  linear_polar = cv2.linearPolar(img, (w/2, h/2), maxRadius, cv2.WARP_FILL_OUTLIERS + cv2.INTER_LINEAR) 
  cv2.imshow("log_polar",log_polar)
  cv2.imshow("linear_polar",linear_polar)
  cv2.waitKey(1000)

第一組: logPolar()

image
image
image
                     src                                   m = `src.cols / log_e(maxRadius)` /2        m = `src.cols /log_e(maxRadius)`

第二組:

image
          ![image](https://upload-images.jianshu.io/upload_images/4688503-ffa8c87293bfa9ce?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
image
                                                                                        logPolar()                                                      linearPolar()

         src                                                  m = `src.cols /log_e(maxRadius)`                                   `maxRadius`    

第三組:

image
    ![image](https://upload-images.jianshu.io/upload_images/4688503-54b63a5058210a71?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

         ![image](https://upload-images.jianshu.io/upload_images/4688503-a8d0689816fe805f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

                                                                            logPolar()                                                      linearPolar()

                src                                    m = `src.cols /log_e(maxRadius)`                              `maxRadius`
  • 可以想一下在這幾個(gè)例子中,變換后最右側(cè)的尖兒為什有的能連延伸到最右側(cè),有的不能。
  • 從笛卡爾坐標(biāo)系來看,這三組的src貌似形狀很完美,但經(jīng)過轉(zhuǎn)換后可以看出后兩組的瑕疵了,如果后兩組也是完美對稱的,那么在極坐標(biāo)系下,第二組縱向應(yīng)該是筆直的,第三組橫行應(yīng)該是平行的。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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