所以我尝试使用 Matlab 中包含的基本“car.jpg”图像来解决我的问题。
到目前为止,我已经拍摄了汽车图片的正方形部分,并将其包裹在圆柱体的一部分表面上。
这是我的代码:
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 函数来做到这一点)。
我希望得到反馈的另一种可能性是找到平面和圆柱图像上相应水平点之间的数学关系,然后将该方程的倒数应用于平面图像,这样一旦打印出来出来并粘在一个圆柱形表面上,它看起来是平的。