在matlab中调整多边形图像的大小

时间:2016-08-31 09:15:08

标签: image matlab resize polygon scaling

我有两个由25个控制点定义的多边形图像。我想在matlab中用一个多边形替换一个多边形。以下是TC和BP的一个例子。

TC and BP

我添加了代码。我对替换区域中的输出纹理不满意。另外,我发现如果第二个图像的多边形形状小于第一个图像多边形形状,那么输出看起来非常糟糕。

clc;clear all;close all     
im_original = imread('tc.jpg');
im_original=im2double(im_original);

%% ROI (X,Y) coordinates, variable name (pt_original)
load('tc.mat');

im_morphed = imread('bp.jpg');
img_morphed=im2double(im_morphed);  

%% ROI (X,Y) coordinates, variable name (pt_morphed)       
load('bp.mat');         

%% Replace Face
[img_proc,mask] = defineRegion(im_original,pt_original);
img_morphed_proc = histeq_rgb(img_morphed, im_original, mask, mask);

sigma = 5;
se = strel('square',sigma);
mask = imerode(mask,se);
w = fspecial('gaussian',[50 50],sigma);
mask = imfilter(double(mask),w);
img_result = bsxfun(@times,double(img_morphed_proc),double(mask)) + bsxfun(@times,double(im_original),double(1-mask));

imshow(img_result)


function [img_proc,mask] = defineRegion(img, landmark)
   sz = size(img);
   k =convhull(landmark(:,2),landmark(:,1));
   [YY,XX] = meshgrid(1:sz(1),1:sz(2));
   in = inpolygon(XX(:),YY(:),landmark(k,1),landmark(k,2));
   mask = reshape(in,[sz(2),sz(1)])';
   img_proc = bsxfun(@times,im2double(img),double(mask));
end

function img_proc = histeq_rgb(img_src, img_dest, mask_src, mask_dest)
   img_proc = img_src;
   for i = 1 : 3
       tmp_src = img_src(:,:,i);
       tmp_src = tmp_src(mask_src);
       tmp_dest = img_dest(:,:,i);
       tmp_dest = tmp_dest(mask_dest);
       t = histeq(tmp_src,imhist(tmp_dest));
       tmp_proc = img_proc(:,:,i);
       tmp_proc(mask_src) = t;
       img_proc(:,:,i) = tmp_proc;
   end
end

Output Image

0 个答案:

没有答案