一度最適化したレジストレーション処理を使いまわす方法
2 views (last 30 days)
Show older comments
Motohiro Horiuchi
on 28 Jun 2020
Commented: Motohiro Horiuchi
on 29 Jun 2020
上の例の通りにレジストレーションを行いました。
この際、同じサイズの別の画像に上記で行った変換と全く同じ変換を行う方法はありますか?
0 Comments
Accepted Answer
Kei Otsuka
on 28 Jun 2020
同じ変換を行うにはどのような変換を行ったのかを示す情報 = 変換行列 が必要ですが、imregister関数の出力として
この変換行列を得ることができるようになっていないため、まず始めにimregisterの内容を少し修正します。
1.imregisterをエディタで開く。
edit imregister
2.別名(imregister2.m)で保存
3.1行目を以下の内容と差し替えて上書き保存
function [movingReg,Rreg,tform] = imregister2(varargin)
これで、変換行列を出力できる関数imregister2が出来ました。
動作を確認してみます。
%% 2つの画像の読込・表示
orig = dicomread('knee1.dcm');
moving = dicomread('knee2.dcm');
%% 輝度ベースのレジストレーション実行・表示 (変換行列が必要な場合は、imregtform を使用)
[optimizer,metric] = imregconfig('multimodal'); % パラメタ設定 (別々のデバイス:異なる輝度範囲)
optimizer.MaximumIterations = 150; % 反復回数
optimizer.InitialRadius = 0.002; % 初期検索範囲
[Registered, ~, tform] = imregister2(moving, orig, 'affine', optimizer, metric); %アフィン変換:拡大縮小・平行移動・回転
figure, imshowpair(Registered, orig)
%% 得られた変換行列を利用し、幾何学変換実行
Registered2 = imwarp(moving, tform, 'OutputView', imref2d(size(orig)));
figure, imshowpair(Registered2, orig)
imwarpで変換した結果(Registered2)とRegisteredが同じ画像になっていることを確認できると思います。
More Answers (0)
See Also
Categories
Find more on 幾何学的変換とイメージ レジストレーション in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!