2013-05-10 1 views
0

Так что мой предыдущий был Mapping image into cylinder or sphere shape?Используя данные изображения из нитей основы/серфинга функции отображения изображения

Я был в состоянии отобразить изображение в области или цилиндрической формы с помощью функции искривления. Но теперь, как мне получить или использовать сопоставленное изображение? Моя проблема в том, что мне нужно использовать часть обернутого изображения и снова обернуть эту часть в другую фигуру.

Итак, я обернул все свое изображение в цилиндр, и теперь мне нужно обернуть часть изображения цилиндра в сферу. Часть цилиндра может быть отрезком вертикальной линии от (R, Theta, Z0) до (R, Theta, Z1) или половины цилиндра и т. Д.

Если мне нужен способ получить или отобразить часть отображаемых image, мне нужно использовать другую функцию, отличную от функции warp()? Любые советы или идеи, с которых начать, будут оценены.

Концептуальный вопрос: я не очень разбираюсь в обработке изображений. Допустим, у меня квадратное изображение размером 100x100. Таким образом, существует 100 вертикальных линий, и я хочу получить вертикальную линию, которая находится в самом левом конце изображения. Если я отображу все изображение в цилиндр с Theta0 до Theta1, левая вертикальная линия будет отображаться на Theta0 с высотой цилиндра. Затем мне нужно использовать сегмент вертикальной линии, отображаемый в Theta0, и сопоставить эту вертикальную линию в сфере. Тогда мой вопрос заключается в том, когда я хочу, чтобы результат отображения сегмента был сформирован в форме сферы, мне нужно сопоставить этот отрезок левой вертикальной линии от цилиндра или я могу отобразить его прямо из исходного изображения? Мне интересно, будут ли эти два способа давать мне разные результаты из-за выборки/интерполяции изображений и т. Д.

ответ

0

Почему вы хотите вернуть изображение назад?

Я думаю, вы неправильно понимаете идеологию, вам не нужно возвращать изображение. Ваш алгоритм должен быть такой:

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

Как это:

imgRGB = imread('peppers.png'); 
[imgRows,imgCols,imgPlanes] = size(imgRGB); 
for p=1:imgPlanes 
    imgRGBFlipped(:,:,p) = flipud(imgRGB(:,:,p)); 
end 
[CX,CY,CZ] = cylinder(imgRows,imgCols); 

% Now select a part of image 
subimage = imgRGB(1:200, 1:400, :); % rows 1 to 200 columns 1 to 400 
for p=1:imgPlanes 
    subimageFlipped(:,:,p) = flipud(subimage(:,:,p)); 
end 
[SX,SY,SZ] = sphere(200); 

figure; 
subplot(2,2,1);  imshow(imgRGB);      title('Full image') 
subplot(2,2,2);  warp(CX,CY,CZ,imgRGBFlipped);  title('Full image on cylinder') 
subplot(2,2,3);  imshow(subimage);     title('Part of image') 
subplot(2,2,4);  warp(SX,SY,SZ,subimageFlipped);  title('Part of image on sphere') 
Смежные вопросы