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