如何将图像插入 phone shell
How can i insert an image into the phone shell
我有一张图片,
我想像这样将它们插入 phone shell :
得到这个:
是否有任何图像处理算法可用于自动执行此过程?
我想有一些想法来实现这个
编辑:
这是 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
,然后你可以提供任何你想要的输入图像并覆盖它。
输出:
我有一张图片,
我想像这样将它们插入 phone shell :
得到这个:
是否有任何图像处理算法可用于自动执行此过程?
我想有一些想法来实现这个
编辑:
这是 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
,然后你可以提供任何你想要的输入图像并覆盖它。
输出: