我有一個徑向失真函式,它以百分比為單位提供從 0(影像中心)到相對完整影像場(場高 1)的相對失真。例如,這個函式會在全相對場高 1 處產生高達 5% 的失真。
我試圖將它與 opencv undistort 函式一起使用來應用失真,但不知道如何填充矩陣。
如前所述,我只有一個源影像,除了我知道失真函式之外,我對焦距等相機引數一無所知。
我應該如何在 cv2.undistort(src_image, matrix, ...) 中設定矩陣?
uj5u.com熱心網友回復:
在您的情況下更容易使用的 OpenCv 例程是cv::remap,而不是 undistort 。
在下文中,我假設您的失真純粹是徑向的。如果您已經在 (x, y) 中分解了它,則類似的考慮也適用。
所以你有一個像素到影像中心d(r)距離r = sqrt((x - x_c)^2 (y - y_c)^2)的失真函式。該函式表示失真影像中像素半徑與未失真影像的相對變化:,或等效地,。(x, y)(x_c, y_c)r_dr(r_d - r) / r = d(r)r_d = r * (1 - d(r))
如果給你一個扭曲的影像,并想去除扭曲,你需要反轉上面的方程(即決議或數值求解),找到感興趣范圍內r每個的值r_d。然后,您可以輕松地創建兩個陣列,map_x和map_y,它們表示從失真坐標到未失真坐標的映射:對于(x_d, y_d)失真影像中給定的一對整數像素坐標,您計算關聯的r_d = sqrt(((x_d - x_c)^2 (y_d - y_c)^2),然后計算對應的r函式r_d求解方程,去回到(x, y),并分配map_x[y_d, x_d] = x; map_y[y_d, x_d] = y。最后,您將它們傳遞給 cv::remap。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327248.html
下一篇:獲取給定推文的圖片網址的腳本
