Преобразование изображения из декартовой координаты в полярную координату

Мне было интересно, поможет ли мне кто-нибудь понять, как преобразовать верхнее изображение в нижнее. Изображения доступны по следующей ссылке. Верхнее изображение в декартовых координатах. Нижнее изображение представляет собой преобразованное изображение в полярных координатах.

Изображение


person John    schedule 04.08.2013    source источник


Ответы (1)


Это базовое преобразование прямоугольных координат в полярные. Чтобы выполнить преобразование, просмотрите выходное изображение и обработайте x и y, как если бы они были r и тета. Затем используйте их как r и тета для поиска соответствующего пикселя во входном изображении. Что-то вроде этого:

int x, y;
for (y = 0; y < outputHeight; y++)
{
    Pixel* outputPixel = outputRowStart (y); // <- get a pointer to the start of the output row
    for (x = 0; x < outputWidth; x++)
    {
        float r = y;
        float theta = 2.0 * M_PI * x / outputWidth;
        float newX = r * cos (theta);
        float newY = r * sin (theta);
        *outputPixel = getInputPixel ( newX, newY ); // <- Should probably do at least bilinear resampling in this function
        outputPixel++;
    }
}

Обратите внимание, что вы можете захотеть обработать перенос в зависимости от того, чего вы пытаетесь достичь. Тета-значение переносится на 2pi.

person user1118321    schedule 04.08.2013
comment
Не могли бы вы сделать мне огромное одолжение и написать код в MATLAB. Я не знаком с С++? - person John; 04.08.2013
comment
+1 @John, тебе, вероятно, следовало указать язык, когда ты задавал вопрос. В любом случае, если вы уберете слово float, то в значительной степени останутся нужные вам формулы. - person ; 04.08.2013
comment
@rep_movsd Я облажался. Их следует передать getInputPixel(). Спасибо, что поймали это! Я обновил код. - person user1118321; 29.11.2014