Không thể hiểu cách lấy (x ', y') của ảnh gốc (x, y) trong hình ảnh, cho sự biến dạng Barrel/Pincushion.Công thức cho sự biến dạng Barrel/Pincushion
Trả lời
Mục 2 của this paper giải thích sự chuyển đổi. Về cơ bản:
Ở đây tôi đưa ra một ví dụ trong Mathematica:
méo pincushion thùng \ đơn giản trong 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;
}
hình thức phức tạp hơn http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html
Một xấp xỉ của mô hình méo xuyên tâm đa thức bạn có thể tìm thấy trong Fitzgibbon, 2001
là
nơi thứ và ru là khoảng cách từ trung tâm của méo. Điều này cũng được sử dụng để lọc méo hình ảnh máy ảnh góc rộng cho mục đích xử lý hình ảnh và máy tính.
Bạn có thể tìm thấy một lời giải thích chi tiết hơn về các nguyên tắc và mã đổ bóng để thực hiện việc lọc undistortion (và cũng có thể chuyển đổi về phía trước) ở đây: http://marcodiiga.github.io/radial-lens-undistortion-filtering
Tôi cũng đăng các giấy tờ bạn nên có một cái nhìn tại nếu bạn muốn biết chi tiết toán học cho phương pháp tôi đã đăng
- Zhang Z. (1999). Hiệu chỉnh máy ảnh linh hoạt bằng cách xem mặt phẳng từ hướng không xác định
- Andrew W. Fitzgibbon (2001). Ước lượng tuyến tính đồng thời của nhiều hình dạng xem và biến dạng ống kính
- 1. Đếm biến số trong một công thức
- 2. Không thể gán biến trong công thức
- 3. Nhận biết sự biến dạng trong lưới điện thường xuyên
- 4. Có một tham chiếu tốt hơn cho các công thức r hơn là công thức không?
- 5. Cách tính công thức đa biến từ bảng dữ liệu
- 6. Cách đặt biến môi trường trong công thức makefile?
- 7. chuyển một vectơ biến thành công thức lm()
- 8. Bảng công thức cho bảng tính org
- 9. Làm cách nào để chuyển các biến cho một phương thức sự kiện nút?
- 10. Thêm phương thức `vào [Col [_]]` cho tập hợp biến đổi
- 11. Tôi có thể sử dụng lại biểu thức trong truy vấn MySQL dưới dạng biến cho trường khác không?
- 12. Công thức cho ma trận chiếu trực giao?
- 13. Biến dạng phối cảnh Opengl
- 14. Công cụ định dạng Python
- 15. Sự khác biệt giữa các phương thức in/định dạng Python
- 16. Giữ lại các functors dưới dạng biến
- 17. định dạng chuỗi python cho độ dài tuple biến thiên
- 18. Tài nguyên cho thuật toán biến dạng hình ảnh
- 19. ASP.Net: Eval Định dạng cho biểu thức tiền
- 20. Java - biểu thức chính quy cho định dạng get số
- 21. C#: Có cách nào để sử dụng biểu thức dưới dạng biến/tham số không?
- 22. Tại sao không có bất kỳ Công thức PHP "chính thức" nào cho Homebrew
- 23. biến công vs biến riêng với accessors
- 24. biến tĩnh công cộng hoặc sử dụng phương thức putExtra của lớp ý định
- 25. Định dạng một tập con của văn bản trong Ô Excel bằng Công thức
- 26. Số biến hoặc đối số Java cho phương thức
- 27. Biến cục bộ tĩnh cho các phương thức trong Ruby?
- 28. ActiveAdmin tùy biến các hình thức cho belongs_to
- 29. Http công cụ kiểm tra tải cho URL biến
- 30. biểu thức cron cho mỗi> công việc 60 phút
Khi tạo lại mã này trong openGL mà không cắt tỉa (như bạn có trong hình ảnh thứ nhất), hình ảnh trông bị rời rạc. Tôi đã thành công hơn khi sử dụng thuật toán này http://www.geeks3d.com/20140213/glsl-shader-library-fish-eye-and-dome-and-barrel-distortion-post-processing-filters/2/ – user819640
Biến đổi của bạn chỉ hợp lệ để biến một hình ảnh trực tuyến thành một hình bị méo, để đảo ngược sự biến dạng đó, bạn cần hàm nghịch đảo là '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 trả lại p1/p2 - p2/p3; ' –