イメージレジストレーションの反復方法について
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
以下の処理を用いて,イメージレジストレーションを行おうと思いますが,
画像データが1000枚程度あり,そのすべてをレジストレーションしたいと思っています.
そのためには,for文による繰り返し処理が必要ですが,どのようにfor分を組めばいいか教えてもらえばと思います.
参考:https://jp.mathworks.com/help/images/registering-multimodal-mri-images.html
以上,お手数ですが,ご回答お願いします.
2 Kommentare
Kojiro Saito
am 8 Aug. 2022
参考ドキュメントの例では、固定イメージと移動イメージのペアを使ってレジストレーションをしていますが、今回は画像データ1000枚にそれぞれ500枚ずつペアがあるのでしょうか?
Antworten (1)
Kojiro Saito
am 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コマンドでファイル取得して、ファイルの数だけレジストレーションをおこないます。
結果を画像保存する際はimwriteかdicomwriteを使います。
こちらがサンプルです。
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
0 Kommentare
Siehe auch
Kategorien
Mehr zu 幾何学的変換とイメージ レジストレーション finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!