Advertisement
osipyonok

Untitled

Mar 28th, 2017
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.62 KB | None | 0 0
  1. clear
  2. clc
  3. X = double(imread('x1.bmp'));
  4. Y = double(imread('y4.bmp'));
  5. %Z = imread('x2.bmp');
  6. X = [X; ones(1,size(X, 2))];
  7.  
  8. %AA = [1 2 3;4 5 6;7 8 9];
  9. %A = MoorePenrose(X, Y);
  10.  
  11. [hx, wx] = size(X);
  12. [hy, wy] = size(Y);
  13. X_pinv = [];
  14. best = 1e9;
  15. beps = 1e9;
  16. for d=1:-0.01:0%1:-0.01:0
  17.     x_pinv = inv((X' * X + d * eye(wx, wy))) * X';
  18.        
  19.     a = Y * x_pinv + eye(hy, hx) * (eye(hx, hx) - X * x_pinv)';
  20.     eps = max(max(a * X - Y));
  21.     if eps < best
  22.     X_pinv = x_pinv;
  23.     best = eps;
  24.     beps = d;
  25.     end
  26. end
  27.  
  28. A = Y * X_pinv;
  29.  
  30. res = A * X;
  31. %X = [1 , -1 , 0 ; -1 , 2 , 1 ; 2 , -3 , -1 ; 0 , -1 , 1];
  32. [h,w] = size(X);
  33. x = X(1,:);
  34. x_pinv = x'/(x*x');
  35. eps = 1e-6;
  36. for i=2:h
  37.     a = X(i,:);
  38.     I = eye(w, w);
  39.     XPX = x_pinv * x;
  40.     Z = I - XPX;
  41. %   fprintf('a*Z*a is equal to %6.2f  %d.\n',a*Z*a',i);
  42.     CK = a * Z * a';
  43.     if a * Z * a' > eps
  44.         d = a * Z * a';
  45.         FI1 = Z*(a')*a*x_pinv;
  46.         FI1 = FI1 / d;
  47.         FI = x_pinv - FI1;
  48.         SE = Z*a';
  49.         SE = SE / d;
  50.         x_pinv = [FI, SE];
  51.         %    fprintf('fi\n');
  52.     else
  53.         R = x_pinv * (x_pinv');
  54.         d = 1 + a * R * a';
  55.         x_pinv = [x_pinv - (R*(a')*a*x_pinv) / d, R*a' / d];
  56.     end;
  57.     x = [x; a];
  58. end;
  59.  
  60. %z = X(1,:);
  61. %zz = z'/(z*z');
  62. %
  63.  A_G = Y * x_pinv;%Greville(X, Y);
  64.  res_G = A_G * X;
  65. %
  66.  subplot(2, 2, 1); imshow(uint8(X)); title('X');
  67.  subplot(2, 2, 2); imshow(uint8(Y)); title('Y');
  68. %
  69.  subplot(2, 2, 3); imshow(uint8(res)); title('Метод РњСѓСЂР°-Пенроуза');
  70.  subplot(2, 2, 4); imshow(uint8(res_G)); title('Метод Гревіля');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement