2011-06-01 16 views

उत्तर

18

this paper की धारा 2 परिवर्तन को बताती है। मूल रूप से:

enter image description here

यहाँ मैं Mathematica में एक उदाहरण बना दिया:

enter image description here

+2

जब आप इस कोड को ट्रिमिंग के बिना ओपनजीएल में पुन: प्रयास करते हैं (जैसे कि आपके पास पहले 2 चित्र हैं) तो छवि अलग दिखती है। मुझे इस एल्गोरिदम का उपयोग करके और अधिक सफलता मिली http://www.geeks3d.com/20140213/glsl-shader-library-fish-eye-and-dome-and-barrel-distortion-post-processing-filters/2/ – user819640

+0

आपका रूपांतरण एक विकृत छवि में एक रेक्टिलिनर छवि को बदलने के लिए केवल वैध है, उस विरूपण को विपरीत करने के लिए आपको उलटा फ़ंक्शन की आवश्यकता है जो 'p1 = cbrt (2/(3 * a)) है; \t पी 2 = सीआरटीटी (वर्ग (3 * ए) * वर्ग (27 * ए * एक्स * एक्स + 4) - 9 * ए * एक्स); \t पी 3 = सीआरटीटी (2) * पाउ (3 * ए, 2/3); \t वापसी पी 1/पी 2 - पी 2/पी 3; ' –

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 में पा सकते हैं का एक सन्निकटन

enter image description here

जहां वां और आरयू विरूपण के केंद्र से दूरी हो रहा है। यह कंप्यूटर दृष्टि और छवि प्रसंस्करण उद्देश्यों के लिए एक चौड़े कोण छवि छवि से विकृति को फ़िल्टर करने के लिए भी प्रयोग किया जाता है।

आप सिद्धांत की एक अधिक विस्तृत विवरण और undistortion छानने लागू करने के लिए शेडर कोड (और भी आगे परिवर्तन) यहाँ पा सकते हैं: http://marcodiiga.github.io/radial-lens-undistortion-filtering

मैं भी कागजात पोस्टिंग कर रहा हूँ आप पर एक नज़र रखना चाहिए यदि आप

  • झांग जेड (1 999) पोस्ट किए गए विधि के लिए गणितीय विवरण जानना चाहते हैं। अज्ञात अभिविन्यास से विमान को देखकर लचीला कैमरा अंशांकन
  • एंड्रयू डब्ल्यू फिट्जगिबोन (2001)। एकाधिक दृश्य ज्यामिति और लेंस विरूपण के साथ-साथ रैखिक अनुमान
संबंधित मुद्दे