affine.m
上传用户:trade789
上传日期:2018-05-10
资源大小:603k
文件大小:1k
源码类别:

2D图形编程

开发平台:

Matlab

  1. function img2 = affine(img, r, sx, sy, a, b, xo, yo)
  2. R = [cos(r) -sin(r) 0; 
  3.      sin(r) cos(r)  0; 
  4.      0      0       1];
  5.  
  6. S = [sx  a   0;
  7.      b  sy   0;
  8.      0   0   1];
  9.  
  10. T2 = [1  0  -xo;
  11.       0  1  -yo;
  12.       0  0   1];
  13.   
  14. T1 = [1  0  xo;
  15.       0  1  yo;
  16.       0  0  1];
  17. A = T1*R*S*T2;
  18. [h,w]=size(img);
  19. [x,y] = meshgrid(1:h,1:w);
  20. x=x(:);
  21. y=y(:);
  22. XP = [x';y';ones(1,length(x))];
  23. X = A*XP;
  24. z = find(X(1,:)>w-1);
  25. X(1,z) = w-1;
  26. z = find(X(1,:)<=1);
  27. X(1,z) = 1.5;
  28. z= find(X(2,:)>h-1);
  29. X(2,z) = h-1;
  30. z= find(X(2,:)<1.5);
  31. X(2,z) = 1.5;
  32. x = X(1,:);
  33. y = X(2,:);
  34. alpha = x - floor(x);   %calculate alphas and betas for each point
  35. beta = y - floor(y);
  36. fx = floor(x);   fy = floor(y);
  37. inw = fy + (fx-1)*h;    %create index for neighboring pixels
  38. ine = fy + fx*h;
  39. isw = fy+1 + (fx-1)*h;
  40. ise = fy+1 + fx*h;
  41. img2 = (1-alpha).*(1-beta).*img(inw) + ...  %interpolate
  42.        (1-alpha).*beta.*img(isw) + ...
  43.        alpha.*(1-beta).*img(ine) + ...
  44.        alpha.*beta.*img(ise);
  45. img2 = reshape(img2,h,w);
  46. imagesc(img2);
  47.