無法理解如何獲得圖像中原始(x,y)(桶,枕形失真)的(x',y')。桶/枕形失真的公式
13
A
回答
18
0
在OpenCV中C++
IplImage* barrel_pincusion_dist(IplImage* img, double Cx,double Cy,double kx,double ky)
{
IplImage* mapx = cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
IplImage* mapy = cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);
int w= img->width;
int h= img->height;
float* pbuf = (float*)mapx->imageData;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
float u= Cx+(x-Cx)*(1+kx*((x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)));
*pbuf = u;
++pbuf;
}
}
pbuf = (float*)mapy->imageData;
for (int y = 0;y < h; y++)
{
for (int x = 0; x < w; x++)
{
*pbuf = Cy+(y-Cy)*(1+ky*((x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)));
++pbuf;
}
}
/*float* pbuf = (float*)mapx->imageData;
for (int y = 0; y < h; y++)
{
int ty= y-Cy;
for (int x = 0; x < w; x++)
{
int tx= x-Cx;
int rt= tx*tx+ty*ty;
*pbuf = (float)(tx*(1+kx*rt)+Cx);
++pbuf;
}
}
pbuf = (float*)mapy->imageData;
for (int y = 0;y < h; y++)
{
int ty= y-Cy;
for (int x = 0; x < w; x++)
{
int tx= x-Cx;
int rt= tx*tx+ty*ty;
*pbuf = (float)(ty*(1+ky*rt)+Cy);
++pbuf;
}
}*/
IplImage* temp = cvCloneImage(img);
cvRemap(temp, img, mapx, mapy);
cvReleaseImage(&temp);
cvReleaseImage(&mapx);
cvReleaseImage(&mapy);
return img;
}
更復雜的形式簡單桶\枕形失真 http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html
1
多項式徑向畸變模型,你可以在Fitzgibbon, 2001
找到的近似
其中RD和RU是從失真的中心的距離。這也用於過濾廣角相機圖像中的失真,以用於計算機視覺和圖像處理目的。
您可以在這裏找到的原則更詳細的解釋,並且着色器代碼來實現undistortion過濾(也正向轉換):http://marcodiiga.github.io/radial-lens-undistortion-filtering
我還張貼的文件,你應該看看如果你想知道我發佈的方法的數學細節
- Zhang Z.(1999)。通過從未知方向觀察飛機進行靈活的攝像機校準
- Andrew W. Fitzgibbon(2001)。多視圖幾何和鏡頭失真的同時線性估計
相關問題
- 1. 將桶形失真應用到UIView
- 2. 使用多個靜態圖像修正GoPro的桶形失真?
- 3. 手動校正OpenCV桶形失真,沒有棋盤圖像
- 4. 糾正FishEye鏡頭的桶形失真校正算法 - 未能用Java實現
- 5. Excel 2007公式爲真正
- 6. 圓形Excel公式
- 7. 枕形和透視圖像的核心
- 8. 帶有湍流的SVG形狀失真
- 9. 的SharePoint公共形式
- 10. 無法下載圖像形式S3桶
- 11. 生成真值表小數的公式
- 12. extjs形式的失去事件形式
- 13. 如何將字符串公式轉換爲「真實」公式
- 14. S3和半公共桶
- 15. 屏幕失真64位win win csharp形式
- 16. Kineticjs圖像/形狀/圖層失真
- 17. 圖形在QVGA Android手機中失真
- 18. 在ubuntu上安裝枕頭失敗14.04
- 19. 公式爲lm圖形
- 20. 點公式爲多邊形
- 21. Xcode 6.1 IOS真的很長的形式
- 22. 在圓形公式上繪製矩形
- 23. 公式消失php excel
- 24. 形式valdiation失敗
- 25. 值消失形式
- 26. 如何刪除不再存在的自制公式/小桶?
- 27. 表演形式PHP的if語句真
- 28. 檢測哪種形式真的活躍?
- 29. 刀鋒形式的字體真棒?
- 30. Django CreateView消失的形式
在openGL中重新創建此代碼時,如果沒有修整(就像您在前兩張圖片中那樣),圖像看起來會脫節。我使用這種算法取得了更大的成功http://www.geeks3d.com/20140213/glsl-shader-library-fish-eye-and-dome-and-barrel-distortion-post-processing-filters/2/ – user819640 2015-09-29 08:42:23
您的變換隻適用於將直線圖像轉換爲失真圖像,爲了逆轉該失真,需要反函數p1 = cbrt(2 /(3 * a)); \t p2 = cbrt(sqrt(3 * a)* sqrt(27 * a * x * x + 4)-9 * a * x); \t p3 = cbrt(2)* pow(3 * a,2/3); \t return p1/p2-p2/p3;' – 2017-04-16 19:43:37