MATLAB: Running image morphing code on one machine gives correct answer and another machine gives error

image morphing

function M = ImageMorphingTriangulation(warp_frac,dissolve_frac)
if nargin < 1
warp_frac = .5;
end
if nargin < 2
dissolve_frac= warp_frac;
end
I = 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];
end
end
Mp = (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]);
end
IndI = 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;
end
M(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

"tsearchn returns NaN for all points outside the convex hull of X"