【问题标题】:How can i insert an image into the phone shell如何将图像插入手机外壳
【发布时间】:2015-09-24 00:47:36
【问题描述】:

我有一张图片,

我想像这样将它们插入手机壳:

得到这个:

是否有任何图像处理算法可用于自动化此过程?

我想有一些想法来实现这一点

【问题讨论】:

  • 这四个手机壳图片是一成不变的吗?或者您想提供任意手机外壳图像并让算法自动放置图像?如果您只想处理这四个图像,您可以为每个图像设置转换,将输入图像映射到 iPhone 上很容易。

标签: matlab image-processing 3d photoshop adobe-illustrator


【解决方案1】:

编辑:

这是带有impoly的修订版:

% Read images
skull = imread('skull.jpg');
skull_mask = true(size(skull,1),size(skull,2)); % Use mask for overlay

shell = imread('shell2.jpg');
imshow(shell);
hold on;
p_h = impoly;

% Find transformation (either set this manually or find it with something
% like sift)
input_points = [0              size(skull,1); 
                size(skull,2)  size(skull,1); 
                size(skull,2)  0;
                0              0];

base_points = getPosition(p_h);

% Perform transformation
tform = cp2tform(input_points,base_points,'projective');

skull = imtransform(skull, tform, ...
                    'XData', [1 size(shell,2)], ...
                    'YData', [1 size(shell,1)], ...
                    'Size', [size(shell,1) size(shell,2)]);

skull_mask = imtransform(skull_mask, tform, ...
                         'XData', [1 size(shell,2)], ...
                         'YData', [1 size(shell,1)], ...
                         'Size', [size(shell,1) size(shell,2)]);

skull_mask = imerode(skull_mask,strel('disk',2)); % Prevents rough edges

% Overlay images
skull_r = skull(:,:,1);
skull_g = skull(:,:,2);
skull_b = skull(:,:,3);

shell_overlay_r = shell(:,:,1);
shell_overlay_g = shell(:,:,2);
shell_overlay_b = shell(:,:,3);

shell_overlay_r(skull_mask) = skull_r(skull_mask);
shell_overlay_g(skull_mask) = skull_g(skull_mask);
shell_overlay_b(skull_mask) = skull_b(skull_mask);

% Combine into one image
shell_overlay(:,:,1) = shell_overlay_r;
shell_overlay(:,:,2) = shell_overlay_g;
shell_overlay(:,:,3) = shell_overlay_b;

% Show overlay
imshow(shell_overlay);

如果您想为任意输入的 shell 图像提供一个健壮的实现,您将需要使用 SIFT 之类的东西,我不建议这样做,因为它很困难。我建议只为一组 shell 图像找到合适的 base_points,然后你可以提供任何你想要的输入图像并覆盖它。

输出:

【讨论】:

  • 非常好。 +1。然而,只是为了给你一个公平的警告——cp2tformimtransform 很快就会被弃用。考虑使用affine2dimwarp 以确保您不使用已弃用的函数。
  • @jucestain 你是个天才!是的,理想的是自动找到转换,所以我想提供任意手机外壳图像并让算法自动放置图像。否则半自动找到转换示例(通过鼠标单击定义外壳)是否可能?
  • @user3210664 我进行了编辑以使用impoly。很简单。只要确保你检查代码 - 它非常粗糙。可能有 1 个错误或其他原因,但这个想法是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2011-01-14
  • 2010-10-07
  • 1970-01-01
相关资源
最近更新 更多