Итак, я попытался подойти к своей проблеме, используя изображение basi c "car.jpg", включенное в Matlab.
Пока что я сделал квадратную часть изображения машины, и обернул его вокруг поверхности части цилиндра.
Вот мой код:
close all, clf, clear all
%% Creating cylinder
r = 6; %centimeter
h = 25; %centimeter
[X,Y,Z] = cylinder(r,100);
x = X(:,1:ceil(length(X)/3));
y = Y(:,1:ceil(length(Y)/3));
z = Z(:,1:ceil(length(Z)/3));
%% Plotting cylinder surface
figure(1), clf
h = surf(x,y,z); hold on
axis([-r r -r r]*2.2)
plot3([-r -r], get(gca,'ylim'), [0 0]);
plot3([r r], get(gca,'ylim'), [0 0]);
plot3(get(gca,'xlim'), [-r -r], [0 0]);
plot3(get(gca,'xlim'), [r r], [0 0]);
xlabel('x');
ylabel('y');
zlabel('z');
rotate3d on
axis vis3d
%% Car image
img = imread('car.jpg');
img = imrotate(img,180);
figure(2), clf
%imshow(img(1:340, 1:340, :));
imagesc(img(1:340, 1:340, :));
figure(), clf
warped_plot = warp(x,y,z,img(1:340, 1:340, :))
Следующим шагом может быть проекция искаженного изображения на плоскую поверхность (но я не уверен, как это сделать математически, и не имею Я нашел встроенную функцию Matlab для этого).
Другая возможность, на которую я надеялся получить обратную связь, - найти математическое соотношение между соответствующими горизонтальными точками на плоском и цилиндрическом изображении, а затем применить обратное уравнение к плоскому изображению, так что после того, как оно распечатано и прикреплено к цилиндрической поверхности, оно выглядит плоским.