Matlab 如何将图像插入手机外壳

Matlab 如何将图像插入手机外壳,matlab,image-processing,3d,photoshop,adobe-illustrator,Matlab,Image Processing,3d,Photoshop,Adobe Illustrator,我有一个形象 我想像这样将它们插入手机外壳: 要获得此信息: 是否有任何图像处理算法可用于自动化此过程 我想有一些想法来实现这一点编辑: 这是一个修订版,带有不礼貌的: % Read images skull = imread('skull.jpg'); skull_mask = true(size(skull,1),size(skull,2)); % Use mask for overlay shell = imread('shell2.jpg'); imshow(shel

我有一个形象

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

要获得此信息:

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

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

编辑:

这是一个修订版,带有
不礼貌的

% 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之类的工具,我不推荐使用SIFT,因为这很困难。我建议您为一组shell图像找到合适的
基点
,然后您可以提供所需的任何输入图像并将其覆盖

输出:


这四个手机外壳图像是用石头镶嵌的吗?或者你想提供一个任意的手机外壳图像,并让算法自动放置图像?如果你只想处理这四幅图像,你可以为每幅图像设置转换,将输入图像映射到iphone上非常容易。非常好+1.然而,只是给你一个合理的警告-
cp2tform
imtransform
很快就会被弃用。考虑使用和确保你不要使用贬低的功能。@ Juestin你是个天才!是的,理想的方法是自动找到变换,所以我想提供一个任意的手机外壳图像,并让算法自动放置图像。否则,请半自动地查找转换示例(用鼠标单击定义shell)是否可能?@user3210664我进行了一次编辑,不小心地使用了
。很简单。只要确保你仔细检查了代码,它相当粗糙。可能有1个错误或其他错误,但想法是正确的。