function M = ImageMorphingTriangulation(warp_frac,dissolve_frac)if nargin < 1 warp_frac = .5;endif nargin < 2 dissolve_frac= warp_frac; endI = im2double(imread('a.png'));J = im2double(imread('c.png'));load('points.mat'); M = zeros(size(I));MeanShape = (1/2)*Ip+(1/2)*Jp;TRI = delaunay(MeanShape(:,1),MeanShape(:,2));TriangleNum = size(TRI,1);CordInI = zeros(3,3,TriangleNum);CordInJ = zeros(3,3,TriangleNum);for i =1:TriangleNum for j=1:3 CordInI(:,j,i) = [ Ip(TRI(i,j),:)'; 1]; CordInJ(:,j,i) = [ Jp(TRI(i,j),:)'; 1]; endendMp = (1-warp_frac)*Ip+warp_frac*Jp; [x,y] = meshgrid(1:size(M,2),1:size(M,1));TM = tsearchn([Mp(:,1) Mp(:,2)],TRI,[x(:) y(:)]);InvCord = zeros(3,3,TriangleNum);for a = 1:TriangleNum InvCord(:,:,a) = inv([Mp(TRI(a,1),2),Mp(TRI(a,2),2),Mp(TRI(a,3),2);Mp(TRI(a,1),1),Mp(TRI(a,2),1),Mp(TRI(a,3),1);1,1,1]);endIndI = zeros(1,size(M,1)*size(M,2),size(M,3));IndJ = zeros(1,size(M,1)*size(M,2),size(M,3));IndM = zeros(1,size(M,1)*size(M,2),size(M,3));for l = 1:size(M,3) k = 0; indI = zeros(1,size(M,1)*size(M,2)); indJ = zeros(1,size(M,1)*size(M,2)); indM = zeros(1,size(M,1)*size(M,2)); for j = 1:size(M,2) for i = 1:size(M,1) k = k + 1; bay = InvCord(:,:,TM(k)) * [i;j;1];------->(showing error here) a = [CordInI(2,1,TM(k)),CordInI(2,2,TM(k)),CordInI(2,3,TM(k));CordInI(1,1,TM(k)),CordInI(1,2,TM(k)),CordInI(1,3,TM(k));1,1,1] * bay; a = a/a(3); p = sub2ind(size(M),round(a(1)),round(a(2)),l); indI(k) = p; b = [CordInJ(2,1,TM(k)),CordInJ(2,2,TM(k)),CordInJ(2,3,TM(k));CordInJ(1,1,TM(k)),CordInJ(1,2,TM(k)),CordInJ(1,3,TM(k));1,1,1] * bay; b = b/b(3); q = sub2ind(size(M),round(b(1)),round(b(2)),l); indJ(k) = q; r = sub2ind(size(M),i,j,l); indM(k) = r; end end IndI(:,:,l) = indI; IndJ(:,:,l) = indJ; IndM(:,:,l) = indM; endM(IndM)=(1-dissolve_frac)* I(IndI)+ dissolve_frac * J(IndJ);end
Index in position 3 is invalid. Array indices must be positive integers or logical values.
bay = InvCord(:,:,TM(k)) * [i;j;1];
each image is of size 266 by200 by 3. The for loops totally run 200*266*3 times. In Local machine works perfect, different machine its running around 43250 before showing the above error, i am sure TM(k) is positive integer.
Best Answer