画像の位置合わせについて

28 views (last 30 days)
弘達 土亀
弘達 土亀 on 25 Jun 2021
Commented: Megumi Fukuda on 5 Jul 2021
2つの画像(DICOM形式)の位置合わせを行い、出力(DICOM形式)したいと考えております。
Pro_A90.dcm:装置Aで作成した90スライスの投影データ(DICOMファイル)
Pro_B90.dcm:装置Bで作成した90スライスの投影データ(DICOMファイル)
Pro_A90.dcmとPro_B90.dcmは同じ形の物のデータであります。
これらの位置合わせて、それぞれのファイルをDICOM形式で出力したいと考えております。
この処理は可能でしょうか。
ご教授頂ければと思います。
何卒宜しくお願い致します。

Accepted Answer

Megumi Fukuda
Megumi Fukuda on 27 Jun 2021
お話伺った感じですと、マルチモーダル 3 次元医用画像のレジストレーションdicomwriteを使ってできるのではないか?と思います。「マルチモーダル 3 次元医用画像のレジストレーション」のページの例に沿って処理をしていただき、最後に出てきたものをdicomwriteで書き出すというワークフローになると思います。
もし良ければ、お手持ちのデータで上記の処理がうまくいったか、教えていただけますと大変うれしいです。よろしくお願いいたします。

More Answers (3)

弘達 土亀
弘達 土亀 on 27 Jun 2021
貴重な情報ありがとうございます。
「マルチモーダル 3 次元医用画像のレジストレーション」のページを拝見させて頂きました。
難しそうだったので、同じことができるかやってみたいと思います。
「マルチモーダル 3 次元医用画像のレジストレーション」の例についても、またご教示頂けると助かります。
今後とも何卒宜しくお願い致します。
  1 Comment
Megumi Fukuda
Megumi Fukuda on 27 Jun 2021
お返事ありがとうございます。
示したURLでは、RIRE形式のデータを読み込んでいますが、DICOM形式ですとdicomreadで読んでそのままいけるかもしれませんし、少し工夫が必要になるかもしれません。
データを見せていただかないと難しい部分もあるかもしれないですが、何か困った点や詰まった点などあれば、またお知らせください。

Sign in to comment.


弘達 土亀
弘達 土亀 on 30 Jun 2021
返信ありがとうございます。
今回のデータ(pro_A90.dcmとpro_B90.dcm)を添付させて頂きます。
もし可能でしたら、コードなどをご教示頂けると大変助かります。
お忙しいところ恐縮ですが、何卒宜しくお願い致します。
  1 Comment
Megumi Fukuda
Megumi Fukuda on 3 Jul 2021
どのあたりで詰まってしまった、などありますでしょうか?
以下のコードを利用すると、ご添付いただいたファイルで位置を確認するところまでできます。
(変数名は少し変更してしまいました。分かりづらくなってしまったかもしれません)
img_orig = "pro_A90.dcm";
img_dist = "pro_B90.dcm";
hdr_orig = dicominfo(img_orig);
hdr_dist = dicominfo(img_dist);
X_orig = dicomread(hdr_orig);
X_dist = dicomread(hdr_dist);
X_orig = squeeze(X_orig);
X_dist = squeeze(X_dist);
centerOrig = size(X_orig)/2;
centerDist = size(X_dist)/2;
figure
imshowpair(X_orig(:,:,centerOrig(3)), X_dist(:,:,centerDist(3)));
ちなみに、「マルチモーダル 3 次元医用画像のレジストレーション」のサンプルについて、
[optimizer,metric] = imregconfig('multimodal');
については、
[optimizer,metric] = imregconfig('monomodal');
に書き換えたほうがいいかもしれません。

Sign in to comment.


弘達 土亀
弘達 土亀 on 4 Jul 2021
お忙しいにも関わらず、大変貴重な情報ありがとうございます。
自分は最初の画像入力のところから、良く分からなかったので大変助かります。
頂いたコードを参考に進めて行ければと思います。
勝手ありますが、この続きのコードについてもわかりましたら教えて頂ければと思います。
何卒宜しくお願い致します。
一つ質問です。
この位置合わせは、90枚の投影データに全て一括で行うのはむずかしいでしょうか?
もしかすると、画像再構成したデータの方が扱いやすいのでしょうか?
いろいろと相談に乗ってもらいながら、こんな事を聞いてしまい申し訳ありません。
  1 Comment
Megumi Fukuda
Megumi Fukuda on 5 Jul 2021
> この位置合わせは、90枚の投影データに全て一括で行うのはむずかしいでしょうか?
マルチモーダル 3 次元医用画像のレジストレーションにならって、DICOM画像を読み込んで(ここで画像再構成 = 128x128x90の3次元画像データにします)、読み込んだ画像に対して変換を行う、というやり方が可能です。なので、投影データ(スライス1枚分、ということかと思います。間違っていたら教えてください)90枚分に変換を行っていると言えると思います。
先日のDICOM読み取りについて、マルチモーダル3次元医用画像のレジストレーションの見本に沿った変数になるように書き換えると、以下のような感じになります。頑張ってください :)
path_moving = "pro_A90.dcm";
path_fixed = "pro_B90.dcm";
movingHeader = dicominfo(path_moving);
fixedHeader = dicominfo(path_fixed);
movingVolume = dicomread(movingHeader);
fixedVolume = dicomread(fixedHeader);
movingVolume = squeeze(movingVolume);
fixedVolume = squeeze(fixedVolume);
% ここまでで手順1のコードが書かれた最初のボックスと同じところまで進んでいますので、
% 「関数 helperVolumeRegistration は、3 次元レジストレーションの結果の質を判断するために
% 提供されている補助関数です。ビューは対話方式で回転でき、両軸は一致したまま動きます。」の
% 先からすすめてみてください。
また、処理後のデータですが、DICOMにすることも可能ですが、そのままnifti形式に保存することもできます。

Sign in to comment.

Categories

Find more on DICOM Format 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!