質問: 一度最適化したレジストレーション処理を使いまわす方法 https://jp.mathworks.com/help/images/ref/imregconfig.html 上の例の通りにレジストレーションを行いました。 この際、同じサイズの別の画像に上記で行った変換と全く同じ変換を行う方法はありますか?
回答: 同じ変換を行うにはどのような変換を行ったのかを示す情報 = 変換行列 が必要ですが、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が同じ画像になっていることを確認できると思います。