Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function oImage = transformImage(iType, iImage, iDim, iP, iBgr,iOrder)
- %
- % pripravimo ozadje
- [Y,X] = size(iImage);
- oImage = ones(Y, X) * iBgr;
- % za afino transformacijo
- if (strcmp(iType, 'affine'))
- for y= 1:Y
- for x= 1:X
- s=0;
- pt = [x, y].*iDim; %skaliramo
- pt = inv(iP)*[pt';1]; %[x;y;1]
- pt = pt(1:2)'; %[u,v,1]->[u;v]
- pt = pt./iDim; %de-skaliramo
- if(iOrder==0)
- px = round(pt); %celo?tevilski indeks
- if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
- s = iImage(px(2), px(1));%prej je bil kle oImage(x,y)
- end
- else
- px=floor(pt);
- if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
- if px(1)<size(iImage,2)&&px(2)<size(iImage,1)
- a=abs((pt(2)-px(2))*(pt(1)-px(1)));
- b=abs((pt(2)-px(2))*(pt(1)-(px(1)+1)));
- c=abs((pt(2)-(px(2)+1))*(pt(1)-px(1)));
- d=abs((pt(2)-(px(2)+1))*(pt(1)-(px(1)+1)));
- sa=iImage(px(2)+1,px(1)+1);
- sb=iImage(px(2)+1,px(1));
- sc=iImage(px(2),px(1)+1);
- sd=iImage(px(2),px(1));
- s=a*sa+b*sb+c*sc+d*sd;
- end
- end
- end
- oImage(y,x)=round(s);
- end
- end
- % za radialno transformacijo
- elseif strcmp(iType, 'radial')
- for y= 1:Y
- for x= 1:X
- s=0;
- pt = [x, y].*iDim; %skaliramo
- U = getRadialValue(pt, iP{1});
- pt = [U' * iP{2}(:, 1), U' * iP{2}(:, 2)];
- pt = pt./iDim; %de-skaliramo
- % px = round(pt); %celo?tevilski indeks
- % if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
- % oImage(px(2), px(1)) = iImage(y, x);
- % end
- if(iOrder==0)
- px = round(pt); %celo?tevilski indeks
- if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
- s = iImage(px(2), px(1));%prej je bil kle oImage(x,y)
- end
- else
- px=floor(pt);
- if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
- if px(1)<size(iImage,2)&&px(2)<size(iImage,1)
- a=abs((pt(2)-px(2))*(pt(1)-px(1)));
- b=abs((pt(2)-px(2))*(pt(1)-(px(1)+1)));
- c=abs((pt(2)-(px(2)+1))*(pt(1)-px(1)));
- d=abs((pt(2)-(px(2)+1))*(pt(1)-(px(1)+1)));
- sa=iImage(px(2)+1,px(1)+1);
- sb=iImage(px(2)+1,px(1));
- sc=iImage(px(2),px(1)+1);
- sd=iImage(px(2),px(1));
- s=a*sa+b*sb+c*sc+d*sd;
- end
- end
- end
- oImage(y,x)=round(s);
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement