イメージレジストレーションの反復方法について
15 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
以下の処理を用いて,イメージレジストレーションを行おうと思いますが,
画像データが1000枚程度あり,そのすべてをレジストレーションしたいと思っています.
そのためには,for文による繰り返し処理が必要ですが,どのようにfor分を組めばいいか教えてもらえばと思います.
参考:https://jp.mathworks.com/help/images/registering-multimodal-mri-images.html
以上,お手数ですが,ご回答お願いします.
2 commentaires
Kojiro Saito
le 8 Août 2022
参考ドキュメントの例では、固定イメージと移動イメージのペアを使ってレジストレーションをしていますが、今回は画像データ1000枚にそれぞれ500枚ずつペアがあるのでしょうか?
Réponses (1)
Kojiro Saito
le 8 Août 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 commentaires
Voir également
Catégories
En savoir plus sur 幾何学的変換とイメージ レジストレーション dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!