日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

镜头桶形失真校正算法

發布時間:2024/3/24 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 镜头桶形失真校正算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

短焦鏡頭通常會產生桶形失真,以下是校正算法的matlab代碼:

view plaincopy to clipboard
  • %%?鏡頭桶形失真校正(短焦鏡頭)??
  • ??
  • img_origin1?=?imread('Still001.bmp');??
  • img_origin?=?rgb2gray(img_origin1);??
  • ??
  • k1?=?-0.00000037;???%?形變參數,根據實際情況調整??
  • k2?=?-0.00000037;??
  • ??
  • img_size?=?size(?img_origin?);??
  • img_undist?=?zeros(?img_size?);??
  • img_undist?=?uint8(?img_undist?);??
  • ??
  • ??
  • for?l1?=?1:img_size(1)??%?垂直方向??
  • ??????
  • ????y?=?l1?-?img_size(1)/2;??
  • ??????
  • ????for?l2?=?1:img_size(2)??%?水平方向??
  • ??????????
  • ????????x?=?l2?-?img_size(2)/2;??
  • ??????????
  • ????????x1?=?round(?x?*?(?1?+?k1?*?x?*?x?+?k2?*?y?*?y?)?);??
  • ????????y1?=?round(?y?*?(?1?+?k1?*?x?*?x?+?k2?*?y?*?y?)?);??
  • ????????y1?=?y1?+?img_size(1)/2;??
  • ????????x1?=?x1?+?img_size(2)/2;??
  • ??????????
  • ????????img_undist(l1,l2)?=?img_origin(y1,?x1);??
  • ??????????
  • ????end??
  • end??
  • ??
  • ??
  • figure(1);??
  • subplot(121);?imshow(img_origin);??
  • subplot(122);?imshow(img_undist);??
  • ??
  • imwrite(img_origin,'1.bmp');??
  • imwrite(img_undist,'2.bmp');??
  • [cpp]?view plaincopy
  • %%?鏡頭桶形失真校正(短焦鏡頭)??
  • ??
  • img_origin1?=?imread('Still001.bmp');??
  • img_origin?=?rgb2gray(img_origin1);??
  • ??
  • k1?=?-0.00000037;???%?形變參數,根據實際情況調整??
  • k2?=?-0.00000037;??
  • ??
  • img_size?=?size(?img_origin?);??
  • img_undist?=?zeros(?img_size?);??
  • img_undist?=?uint8(?img_undist?);??
  • ??
  • ??
  • for?l1?=?1:img_size(1)??%?垂直方向??
  • ??????
  • ????y?=?l1?-?img_size(1)/2;??
  • ??????
  • ????for?l2?=?1:img_size(2)??%?水平方向??
  • ??????????
  • ????????x?=?l2?-?img_size(2)/2;??
  • ??????????
  • ????????x1?=?round(?x?*?(?1?+?k1?*?x?*?x?+?k2?*?y?*?y?)?);??
  • ????????y1?=?round(?y?*?(?1?+?k1?*?x?*?x?+?k2?*?y?*?y?)?);??
  • ????????y1?=?y1?+?img_size(1)/2;??
  • ????????x1?=?x1?+?img_size(2)/2;??
  • ??????????
  • ????????img_undist(l1,l2)?=?img_origin(y1,?x1);??
  • ??????????
  • ????end??
  • end??
  • ??
  • ??
  • figure(1);??
  • subplot(121);?imshow(img_origin);??
  • subplot(122);?imshow(img_undist);??
  • ??
  • imwrite(img_origin,'1.bmp');??
  • imwrite(img_undist,'2.bmp');??
  • 在實時視頻處理中,如果對每幀圖像都要重復進行坐標轉換運算,就是個很大的浪費,我們可以在初始化過程中先將坐標對應關系建立一個二維查找表,之后每幀處理只需要查表,C++代碼如下(用到了OpenCV):

    view plaincopy to clipboard
  • //?鏡頭校正查找表???
  • CvPoint?CorrInd[480][640];??
  • ??
  • //?鏡頭徑向畸變校正初始化???
  • void?LensCorrectInit(?double?k1?=?-0.00000035,?double?k2?=?-0.00000035?);??
  • ??
  • ??
  • //?鏡頭徑向畸變校正初始化???
  • void?LensCorrectInit(?double?k1,?double?k2?)??
  • {??
  • ????int?imgWidth?=?camera.GetWidth();???//?獲得攝像頭圖像尺寸???
  • ????int?imgHeight?=?camera.GetHeight();??
  • ??
  • ????int?imgWd2?=?imgWidth>>1;??
  • ????int?imgHd2?=?imgHeight>>1;??
  • ??
  • ????int?it;??
  • ????int?jt;??
  • ????int?it2;??
  • ????int?jt2;??
  • ??
  • ????for(?int?i=0;?i<imgHeight;?i++?)??
  • ????{??
  • ????????it?=?(?i?+?1?)?-?imgHd2;?//?(i+1)?是其真正的圖像坐標???
  • ????????for(?int?j=0;?j<imgWidth;?j++?)??
  • ????????{??
  • ????????????double?temp;??
  • ??
  • ????????????jt?=?(?j?+?1?)?-?imgWd2;?//?(j+1)?是其真正的圖像坐標???
  • ????????????temp?=?1?+?k1*it*it?+?k2*jt*jt;??
  • ????????????it2?=?(int)(temp?*?it);??
  • ????????????jt2?=?(int)(temp?*?jt);??
  • ??
  • ????????????it2?=?it2?+?imgHd2?+?1;??
  • ????????????jt2?=?jt2?+?imgWd2?+?1;??
  • ??
  • ????????????CorrInd[i][j].x?=?jt2;??
  • ????????????CorrInd[i][j].y?=?it2;??
  • ????????}??
  • ????}??
  • }??
  • ??
  • ??
  • ??
  • ??
  • //?鏡頭徑向畸變校正???
  • void?LensCorrect(?IplImage*?src,?IplImage*?dst?)??
  • {??
  • ????int?imgWidth?=?dst->width;??
  • ????int?imgHeight?=?dst->height;??
  • ??
  • ????int?it2;??
  • ????int?jt2;??
  • ??
  • ????for(?int?i=0;?i<imgHeight;?i++?)??
  • ????{??
  • ????????uchar?*pdstdata?=?(uchar*)(dst->imageData)?+?i*dst->widthStep;??
  • ??
  • ????????for(?int?j=0;?j<imgWidth;?j++?)??
  • ????????{??
  • ????????????it2?=?CorrInd[i][j].y;??
  • ????????????jt2?=?CorrInd[i][j].x;??
  • ??
  • ????????????uchar?*?psrcdata?=?cvPtr2D(?src,?it2,?jt2?);??
  • ??
  • ????????????*(pdstdata++)?=?*(psrcdata++);??
  • ????????????*(pdstdata++)?=?*(psrcdata++);??
  • ????????????*(pdstdata++)?=?*(psrcdata++);??
  • ????????}??
  • ????}??
  • }??


  • 總結

    以上是生活随笔為你收集整理的镜头桶形失真校正算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。