0

所以我以前是 将图像映射成圆柱体或球体形状?

我能够通过使用变形功能将图像映射为球体或圆柱体形状。但是现在,我如何检索或使用映射的图像?我的问题是我需要使用包装图像的部分并将该部分再次包装成另一个形状。

所以我已经将整个图像包裹到圆柱体中,现在我需要将部分圆柱体图像包裹到球体中。圆柱的部分可以是从(R,Theta,Z0)到(R,Theta,Z1)的垂直线段或圆柱的一半等。

如果我需要一种方法来检索或映射映射图像的一部分,我是否需要使用除 warp() 函数之外的其他函数?任何建议或想法从哪里开始将不胜感激。

概念性问题:我对图像处理了解不多。假设我有一个 100x100 的正方形图像。所以有 100 条垂直线,我想得到图像最左端的垂直线。如果我将整个图像映射到具有 Theta0 到 Theta1 的圆柱体中,则左侧垂直线将在 Theta0 处映射为圆柱体的高度。然后我需要使用映射在 Theta0 的垂直线段,并将这条垂直线映射成一个球体。那么我的问题是,当我想要球体形状上的线段映射结果时,我需要从圆柱体映射这条左垂直线段还是可以直接从原始图像映射它?我想知道这两种方法是否会因为图像采样/插值等而给我不同的结果。

4

1 回答 1

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')
于 2013-05-11T05:50:16.377 回答