扭曲与灰色遮罩中条件对应的图像区域(Matlab)

时间:2020-02-18 21:51:41

标签: matlab image-processing

给出的是RGB图像(img),灰色蒙版(SF,例如圆形蒙版)(均为双精度)和复数值函数fz(例如fz = 0.5 *(z +(1./z)) )),应该用于使img区域变形。 img中的区域由诸如SF> 0的SF条件指定。

我正在使用以下代码,但是输出图像看起来与输入相同。

[h_o,w_o,~] = size(SF);
[h_i,w_i,~] = size(img);
% GENERATE IN-GRID AND NORMALIZE [0 1]
[xi,yi] = meshgrid(linspace(0,w_i+1,w_i),linspace(0,h_i+1,h_i));
xi = xi/w_i;
yi = yi/h_i;
% GENERATE OUT-GRID AND NORMALIZE [-1 1]
[xo0,yo0] = meshgrid(1:w_o,1:h_o);
xo0 = (xo0/w_o)*2 - 1;
yo0 = (yo0/h_o)*2 - 1;
% FIND GRID POINTS WHERE CORRESPONDING COORDINATE IN SF FULFILLS CONDITION
[u, v] = find(SF>0);
y_u = yo0(u);
x_v = xo0(v);
% APPLY fz TO THOSE GRID POINTS
fxiy = 0.5*((x_v+1i.*y_u)+(1./(x_v+1i.*y_u))); 
% SEPARATE real & imag                  
x_v = real(fxiy);
y_u = imag(fxiy);
% EXCHANGE MAPPED GRID POINTS
xo1 = xo0;
xo1(v) = x_v;
yo1 = yo0;
yo1(u) = y_u;
% NORMALIZE OUT-GRID [0 1]
xo1 = (xo1+1)/2;
yo1 = (yo1+1)/2;
% INTERPOLATE OUTPUT IMAGE
img_out = zeros(h_o,w_o,3);
for k = 1:3; img_out(:,:,k) = uint8(interp2(xi, yi, img(:,:,k),  xo1, yo1, 'linear')); end;

目标是在不同条件下对此进行概括:

if the coordinate of SF fulfills condition-1
then deform the corresponding grid point with fz1
ifelse the coordinate fulfills condition-2
then deform the corresponding grid point with fz2
...

0 个答案:

没有答案