B-Splines を変形モデルとして使用して非剛体画像の自動レジストレーションを作成しようとしていますが、いくつか問題があります。
- 最初に、いくつかのコントロール ポイント (5x5) を配置し、しばらくすると結果は良好になりましたが、処理時間が非常に長くなりました。
- 私はイメージ レジストレーションに関する多くの記事を読みました (Rueckert, et.al, 1999 など)。パフォーマンスを改善するために、著者はマルチレベルの B スプライン変形を使用していますが、アルゴリズムは完全にはわかりません。
- この記事では、著者は一連の数式 (セクション 4.2) を提示して、B スプラインの形状を変更せずに制御点の数を増やしていますが、私の実装では期待した結果が返されません (たとえば、この新しい10x10 コントロール ポイント変換と同じ 5x5 変換があります)。
これが私のMATLAB実装です:
function ref_coeff = refine_coeff_grid(c, ft, delta)
%c -- Control points
%ft -- image to be transformed
%delta -- spacing between the control points
[X,Y]=ndgrid(-delta:delta:(size(ft, 1) +(delta*2)), -delta:delta:(size(ft, 2)+(delta*2)));
[r, co, s] = size(c);
i = 2:(r-2);
j = 2:(co-2);
new_c = zeros(2*(r-3)+3, 2*(co-3)+3, s);
new_c(:, :, 1) = X;
new_c(:, :, 2) = Y;
new_c(2*i, 2*j, :) = (c(i-1, j-1, :) + c(i-1, j+1, :) + c(i+1, j-1, :) + c(i+1, j+1, :) + ...
6*(c(i-1, j, :) + c(i, j-1, :) + c(i, j+1, :) + c(i+1, j, :)) + 36*c(i, j, :))/64;
new_c(2*i, 2*j+1, :) = (c(i-1, j, :) + c(i-1, j+1, :) + c(i+1, j, :) + c(i+1, j+1, :) + 6*c(i, j, :) + 6*c(i, j+1, :))/16;
new_c(2*i+1, 2*j, :) = (c(i, j-1, :) + c(i, j+1, :) + c(i+1, j-1, :) + c(i+1, j+1, :) + 6*c(i, j, :) + 6*c(i+1, j, :))/16;
new_c(2*i+1, 2*j+1, :) = (c(i, j, :) + c(i, j+1, :) + c(i+1, j, :) + c(i+1, j+1, :))/4;
ref_coeff = new_c;
end
私は何を間違っていますか?