📄 reconstruction_derivative.m
字号:
function [C, dC] = reconstruction_derivative(V, O, R)%RECONSTRUCTION_DERIVATIVE Computes reconstruction error and derivative%% [C, dC] = reconstruction_derivative(V, original, reconstruction)%% Computes reconstruction error and derivative with respect to the affine % transformation V that is applied on the reconstructions.% % Retrieve the variables from the vector V alpha = V(1); scale = V(2); x0 = V(3); y0 = V(4); n = size(O, 1); % Compute reconstruction error C1 = O(:,1) - (scale .* cos(alpha) .* R(:,1)) - (scale .* sin(alpha) .* R(:,2)) + (scale .* ((x0 .* cos(alpha)) + (y0 .* sin(alpha)))); C2 = O(:,2) + (scale .* sin(alpha) .* R(:,1)) - (scale .* cos(alpha) .* R(:,2)) - (scale .* ((x0 .* sin(alpha)) - (y0 .* cos(alpha)))); C = (1 / n) .* sum((C1 .^ 2) + (C2 .^ 2)); % Compute derivatives (over alpha, scale, x0, and y0) dC = repmat(0, [4 1]); dC(1) = sum((2 .* C1 .* ((scale .* sin(alpha) .* R(:,1)) - (scale .* cos(alpha) .* R(:,2)) + (scale .* ((y0 .* cos(alpha)) - (x0 .* sin(alpha)))))) + ... (2 .* C2 .* ((scale .* cos(alpha) .* R(:,1)) + (scale .* sin(alpha) .* R(:,2)) + (scale .* ((x0 .* cos(alpha)) + (y0 .* sin(alpha))))))) ./ n; dC(2) = sum((2 .* C1 .* ((-cos(alpha) .* R(:,1)) - (sin(alpha) .* R(:,2)) + (x0 .* cos(alpha) + y0 .* sin(alpha)))) + ... (2 .* C2 .* (( sin(alpha) .* R(:,1)) - (cos(alpha) .* R(:,2)) - (x0 .* sin(alpha) + y0 .* cos(alpha))))) ./ n; dC(3) = sum((2 .* C1 .* scale .* cos(alpha)) - (2 .* C2 .* scale .* sin(alpha))) ./ n; dC(4) = sum((2 .* C1 .* scale .* sin(alpha)) + (2 .* C2 .* scale .* cos(alpha))) ./ n;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -