イメージレジストレーションの反復方法について

4 views (last 30 days)
Kaisei Sato
Kaisei Sato on 5 Aug 2022
Answered: Kojiro Saito on 8 Aug 2022
以下の処理を用いて,イメージレジストレーションを行おうと思いますが,
画像データが1000枚程度あり,そのすべてをレジストレーションしたいと思っています.
そのためには,for文による繰り返し処理が必要ですが,どのようにfor分を組めばいいか教えてもらえばと思います.
参考:https://jp.mathworks.com/help/images/registering-multimodal-mri-images.html
以上,お手数ですが,ご回答お願いします.
  2 Comments
Kaisei Sato
Kaisei Sato on 8 Aug 2022
ご連絡ありがとうございます.
経時変化をとっており,その位置づれを補正したいと思っております.
そのため,1枚目と2枚目,2枚目と3枚目・・・・999枚目と1000枚目
というように1000枚の画像の位置補正をできればと思っております.

Sign in to comment.

Answers (1)

Kojiro Saito
Kojiro Saito on 8 Aug 2022
まずはドキュメントのレジストレーション例を繰り返し使えるように関数化します。
関数化についてはこのあたりのドキュメントが参考になります。
ここではdicomImageRegという関数名で、ファイル名もdicomImageReg.mで保存します。
function registeredImage = dicomImageReg(img1, img2)
[optimizer,metric] = imregconfig('multimodal');
optimizer.InitialRadius = optimizer.InitialRadius/3.5;
optimizer.MaximumIterations = 300;
tformSimilarity = imregtform(img2, img1,'similarity',optimizer,metric);
registeredImage = imregister(img2, img1,'affine',optimizer,metric,...
'InitialTransformation',tformSimilarity);
end
元のドキュメントには試行錯誤で色々試していましたが、最後のレジストレーション方法による結果のみリターンするようにしています。
dcmファイルをまとめてdirコマンドでファイル取得して、ファイルの数だけレジストレーションをおこないます。
結果を画像保存する際はimwritedicomwriteを使います。
こちらがサンプルです。
list = dir("*.dcm"); % 現在のフォルダにdcm画像がある場合
%list = dir("image/*.dcm"); % 現在のフォルダのimageサブフォルダにdcm画像がある場合
for n=1:length(list)-1
img1 = dicomread(list(n).name);
img2 = dicomread(list(n+1).name);
registeredImage = dicomImageReg(img1, img2);
%imwrite(registeredImage, sprintf('out%d.jpg', n)) % JPEGフォーマットで保存する場合
dicomwrite(registeredImage, sprintf('out%d.dcm', n)) % DICOMフォーマットで保存する場合
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!