2011-12-17 6 views
3

Я хотел бы преобразовать Jpeg изображения (его координаты (х, у)) в координатах Цилиндрическая ..преобразование изображения из 2D координат в цилиндрических координатах

Есть функция в OpenCV, которые могут сделать это непосредственно? или какие функции в opencv я могу использовать для создания собственного?

У меня возникла путаница между координатами 2d, 3d-координатами и цилиндрическими координатами. Может кто-нибудь кратко обсудить это?

Есть ли математические алгоритмы, доступные для преобразования 2d в 3d? 2d до цилиндрических координат? 3d в цилиндрические координаты?

Я прочитал предыдущий пост по этой теме, но не понимает ..

Я не пройти курс по обработке изображений, но я в спешке, чтобы читать книги .. я учиться на опыте и изучая другие программисты код .. поэтому исходный код будет высоко ценится ..

спасибо всем и извините за мой элементарный пост ,,

+0

я хотел бы преобразовать 2D-координаты в формате JPEG изображения в цилиндрические координаты. Я буду использовать преобразованную координату tes в функцию сшивания изображений позже .. – njm

ответ

7

в 2D области, у вас есть полярные координаты. OpenCV имеет две приятные функции для преобразования между декартовыми и полярными координатами cartToPolar и polarToCart. Там, кажется, не быть хорошим примером использования этих функций, поэтому я сделал один для вас с помощью функции cartToPolar:

#include <opencv2/core/core.hpp> 
#include <iostream> 

#include <vector> 

using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    vector<double> vX; 
    vector<double> vY; 

    for(int y = 0; y < 3; y++) 
    { 
     for(int x = 0; x < 3; x++) 
     { 
      vY.push_back(y); 
      vX.push_back(x); 
     } 
    } 

    vector<double> mag; 
    vector<double> angle; 

    cartToPolar(vX, vY, mag, angle, true); 

    for(size_t i = 0; i < mag.size(); i++) 
    { 
     cout << "Cartesian (" << vX[i] << ", " << vY[i] << ") " << "<-> Polar (" << mag[i] << ", " << angle[i] << ")" << endl; 
    } 

    return 0; 
} 

Cylindrical coordinates являются 3D версия полярных координат. Ниже приведен небольшой пример, показывающий, как можно реализовать цилиндрические координаты. Я не уверен, где вы будете получать ваши 3D г-координату, так что я только что сделал это произвольно (например, x + y):

Mat_<Vec3f> magAngleZ; 

for(int y = 0; y < 3; y++) 
{ 
    for(int x = 0; x < 3; x++) 
    { 
     Vec3f pixel; 
     pixel[0] = cv::sqrt((double)x*x + (double)y*y); // magnitude 
     pixel[1] = cv::fastAtan2(y, x);     // angle 
     pixel[2] = x + y;        // z 
     magAngleZ.push_back(pixel); 
    } 
} 

for(int i = 0; i < magAngleZ.rows; i++) 
{ 
    Vec3f pixel = magAngleZ.at<Vec3f>(i, 0); 
    cout << "Cylindrical (" << pixel[0] << ", " << pixel[1] << ", " << pixel[2] << ")" << endl; 
} 

Если вы заинтересованы в сшивания изображений, есть взгляд на stitching.cpp и stitching_detailed.cpp образцы, предоставленные OpenCV.

EDIT:
Вы можете найти эти ресурсы cylindrical projection полезно:

Computer Vision: Mosaics
Why Mosaic?
Automatic Panoramic Image Stitching using Invariant Features
Creating full view panoramic image mosaics and environment maps

+0

Да, вы правы Я заинтересован в сшивании изображений. Мне удалось успешно запустить вашу первую программу, но у вас возникли проблемы с вашим вторым исходным кодом с помощью строки >> magAngleZ.push_back (пиксель); – njm

+0

Спасибо за помощь .. Оцените. У меня есть другой вопрос. Изображение имеет значения пикселей, расположенные в каждой (x, y) координатах. Мой вопрос: если я конвертирую координаты (x, y) в цилиндрические координаты, изменится ли значение пикселя на этой координате? Надеюсь, вы получите мой вопрос .. Исправьте меня У меня есть недоразумение .. – njm

+0

@NicoleMontecalvo Если у вас возникли проблемы с функцией 'Mat :: push_back()', возможно, вы используете более старую версию OpenCV. Какую версию ты используешь? – mevatron

 Смежные вопросы

  • Нет связанных вопросов^_^