使用来自warp / surf图像映射功能的图像数据

时间:2013-05-10 19:52:35

标签: image image-processing matlab

所以我以前是 Mapping image into cylinder or sphere shape?

我可以使用warp函数将图像映射到球形或圆柱形。但是现在,我如何检索或使用映射图像?我的问题是我需要使用包裹图像的部分并再次将该部分包裹到另一个形状。

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

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

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

1 个答案:

答案 0 :(得分:0)

为什么要恢复图像?

我猜你误解了意识形态,你不需要找回你的形象。你的算法应该是这样的:

  1. 加载图片(现在它在一个大矩阵中)
  2. 使用整个图像将纹理映射到一个表面
  3. 使用图像的部分将纹理映射到另一个表面
  4. 像这样:

    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')