Формулы для искажения Баррель / Подушечка

private static boolean ready;
private static int number;

Способ работы модели памяти состоит в том, что каждый поток может считывать и записывать свою собственную копию этих переменных (проблема также затрагивает нестатические переменные-члены). Это является следствием того, как может работать базовая архитектура.

Джереми Мэнсон и Брайан Гетц :

В многопроцессорных системах процессоры обычно имеют один или несколько уровней кеша памяти, что повышает производительность как путем ускорения доступа к данным (поскольку данные ближе к процессору), так и уменьшения трафика на шине общей памяти (поскольку многие операции с памятью могут выполняться локальными кэшами.) Кассеты памяти могут значительно улучшить производительность, но они представляют множество новых задач. Что, например, происходит, когда два процессора одновременно проверяют одну и ту же ячейку памяти? В каких условиях они будут видеть одно и то же значение?

blockquote>

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

16
задан breethe 1 June 2011 в 10:21
поделиться

4 ответа

Раздел 2 из этой статьи объясняет преобразование. В основном:

enter image description here

Здесь я сделал пример в Mathematica :

enter image description here

22
ответ дан Dr. belisarius 1 June 2011 в 10:21
поделиться

простое бочкообразное \ подушечное искажение в 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

2
ответ дан mrgloom 1 June 2011 в 10:21
поделиться

Аппроксимация модели полиномиального радиального искажения, которую вы можете найти в Fitzgibbon, 2001, равна

enter image description here

, где rd и ru - расстояния от центра искажения. Это также используется для фильтрации искажений изображения широкоугольной камеры для целей компьютерного зрения и обработки изображений.

Более подробное объяснение принципа и кода шейдера для реализации фильтрации искажения (а также прямого преобразования) можно найти здесь: http://marcodiiga.github.io/radial-lens-undistortion- filtering

Я также публикую статьи, на которые стоит обратить внимание, если вы хотите узнать математические подробности метода, который я опубликовал

  • Чжан З. (1999 ). Гибкая калибровка камеры путем просмотра плоскости с неизвестной ориентацией
  • Andrew W. Fitzgibbon (2001). Одновременная линейная оценка геометрии нескольких видов и искажения линзы
2
ответ дан Marco A. 1 June 2011 в 10:21
поделиться

Согласно Википедии, также может быть термин к степени 4. Знаки двух констант (для терминов от r до 2 и от r до 4) могут быть противоположными, что приводит к искажению руля, когда центр изображения имеет бочкообразное искажение, а край имеет искажение подушкообразной булавкой, создавая прямые линии в виде усов на руле .

0
ответ дан Phil Rosenberg 1 June 2011 в 10:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: