Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. function oImage = transformImage(iType, iImage, iDim, iP, iBgr,iOrder)
  2. %
  3. % pripravimo ozadje
  4. [Y,X] = size(iImage);
  5. oImage = ones(Y, X) * iBgr;
  6. % za afino transformacijo
  7. if (strcmp(iType, 'affine'))
  8. for y= 1:Y
  9. for x= 1:X
  10. s=0;
  11. pt = [x, y].*iDim; %skaliramo
  12. pt = inv(iP)*[pt';1]; %[x;y;1]
  13. pt = pt(1:2)'; %[u,v,1]->[u;v]
  14. pt = pt./iDim; %de-skaliramo
  15. if(iOrder==0)
  16. px = round(pt); %celo?tevilski indeks
  17. if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
  18. s = iImage(px(2), px(1));%prej je bil kle oImage(x,y)
  19. end
  20.  
  21. else
  22. px=floor(pt);
  23. if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
  24.  
  25. if px(1)<size(iImage,2)&&px(2)<size(iImage,1)
  26.  
  27. a=abs((pt(2)-px(2))*(pt(1)-px(1)));
  28.  
  29. b=abs((pt(2)-px(2))*(pt(1)-(px(1)+1)));
  30.  
  31. c=abs((pt(2)-(px(2)+1))*(pt(1)-px(1)));
  32.  
  33. d=abs((pt(2)-(px(2)+1))*(pt(1)-(px(1)+1)));
  34.  
  35. sa=iImage(px(2)+1,px(1)+1);
  36. sb=iImage(px(2)+1,px(1));
  37. sc=iImage(px(2),px(1)+1);
  38. sd=iImage(px(2),px(1));
  39. s=a*sa+b*sb+c*sc+d*sd;
  40. end
  41. end
  42. end
  43. oImage(y,x)=round(s);
  44. end
  45. end
  46. % za radialno transformacijo
  47. elseif strcmp(iType, 'radial')
  48. for y= 1:Y
  49. for x= 1:X
  50. s=0;
  51. pt = [x, y].*iDim; %skaliramo
  52. U = getRadialValue(pt, iP{1});
  53. pt = [U' * iP{2}(:, 1), U' * iP{2}(:, 2)];
  54. pt = pt./iDim; %de-skaliramo
  55. % px = round(pt); %celo?tevilski indeks
  56. % if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
  57. % oImage(px(2), px(1)) = iImage(y, x);
  58. % end
  59. if(iOrder==0)
  60. px = round(pt); %celo?tevilski indeks
  61. if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
  62. s = iImage(px(2), px(1));%prej je bil kle oImage(x,y)
  63. end
  64.  
  65. else
  66. px=floor(pt);
  67. if (px(1)<X && px(2)<Y && px(1)>0 && px(2)>0) %samo znotraj koordinat
  68.  
  69. if px(1)<size(iImage,2)&&px(2)<size(iImage,1)
  70.  
  71. a=abs((pt(2)-px(2))*(pt(1)-px(1)));
  72.  
  73. b=abs((pt(2)-px(2))*(pt(1)-(px(1)+1)));
  74.  
  75. c=abs((pt(2)-(px(2)+1))*(pt(1)-px(1)));
  76.  
  77. d=abs((pt(2)-(px(2)+1))*(pt(1)-(px(1)+1)));
  78.  
  79. sa=iImage(px(2)+1,px(1)+1);
  80. sb=iImage(px(2)+1,px(1));
  81. sc=iImage(px(2),px(1)+1);
  82. sd=iImage(px(2),px(1));
  83. s=a*sa+b*sb+c*sc+d*sd;
  84. end
  85. end
  86. end
  87. oImage(y,x)=round(s);
  88. end
  89. end
  90. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement