BOUNTY STATUS UPDATE:校正魚眼失真編程
I discovered how to map a linear lens,從destination
座標source
座標。
如何計算從魚眼到直線的中心徑向距離?
1)。我真的很難扭轉它,並將源座標映射到目標座標。在我發佈的轉換函數風格的代碼中,反過來是什麼?
2)。我也看到我的失真在一些鏡頭上不完美 - 大概是那些不是嚴格線性的。這些鏡頭的等效源和目標座標是多少?不僅僅是數學公式,請再次,更多的代碼...
Question as originally stated:
我有一些點,描述與魚眼鏡頭拍攝的照片位置。
我想將這些點轉換爲直線座標。我想要保持圖像的真實。
我發現this description如何產生魚眼效果,但沒有如何扭轉它。
還有一個blog post,它描述瞭如何使用工具來完成它;這些圖片是從該:
(1):SOURCE
Original photo link
輸入:與魚眼失真原圖修正。
(2):DESTINATION
Original photo link
輸出:校正圖像(技術上也與透視校正,但是這是一個單獨的步驟)。
你如何計算從魚眼中心到直線的徑向距離?
我的函數存根看起來是這樣的:
Point correct_fisheye(const Point& p,const Size& img) {
// to polar
const Point centre = {img.width/2,img.height/2};
const Point rel = {p.x-centre.x,p.y-centre.y};
const double theta = atan2(rel.y,rel.x);
double R = sqrt((rel.x*rel.x)+(rel.y*rel.y));
// fisheye undistortion in here please
//... change R ...
// back to rectangular
const Point ret = Point(centre.x+R*cos(theta),centre.y+R*sin(theta));
fprintf(stderr,"(%d,%d) in (%d,%d) = %f,%f = (%d,%d)\n",p.x,p.y,img.width,img.height,theta,R,ret.x,ret.y);
return ret;
}
或者,我可以以某種方式將圖像從魚眼鏡頭轉換找到點之前直線,但我完全被OpenCV documentation迷惑。在OpenCV中有沒有一種簡單的方法來做到這一點,並且它的表現足夠好,可以用於實時視頻Feed嗎?
我不太讓你在做什麼的C#代碼尋找。魚眼從一個球體映射到圖像平面。反向映射將從圖片返回到一個球體的權利?你在找什麼直線座標? – mtrw 2010-03-19 21:56:00
@mtrw我的源圖像是魚眼失真,我想不破壞它 – Will 2010-03-20 06:18:37
所以是http://photo.net/learn/fisheye/上的圖片你在找什麼? – mtrw 2010-03-20 20:46:32