MATLAB [Japanese] - Radi_tech’s blog

https://radi-tech.hatenablog.com/archive/category/MATLAB%20%5BJapanese%5D

Radiological technologist in Japan / MRI / AI / Deep learning / MATLAB / R / Python

フィード

記事のアイキャッチ画像
【MATLAB】MRI画像をRescale slope, Scale factorで補正する
MATLAB [Japanese] - Radi_tech’s blog
MRI画像をRescale slope, Scale factorで補正する。 PHILIPSの場合 ちなみにこれはSignal intensityをそのまま使うときようのものであって、SNR、CNRなど”比”をとるときは必要ない。 〜 dcm_path = "DICOMデータのpathを書く" dcm_data = dicomread(dcm_path); dcm_data = double(dcm_data); info = dicominfo(dcm_path); RescaleSlope = info.RescaleSlope; Scale_factor = info.Private_2005_100e; ifs = RescaleSlope * Scale_factor ifs = double(ifs) ifs_dcm_data = immultiply(dcm_data ,ifs); imshow(ifs_dcm_data,[]) 〜
1年前
記事のアイキャッチ画像
【MATLAB】DICOM のタグを任意に編集して保存する
MATLAB [Japanese] - Radi_tech’s blog
DICOM のタグを任意に編集して保存する。 今回は、すべてのタグを一度からにして、任意のタグの値を編集する。 % DICOMファイルからinfoを読み込む dcm_path = "パスを書く"; info = dicominfo(dcm_path) % タグの数を得る names=fieldnames(info) length(names) %タグを一旦空にする emp_info = info for x= 1:length(names) emp_info = setfield(emp_info,names{x},""); end % タグを編集する ed_info = emp_info ed_info.Format = 'DICOM'; ed_info.FormatVersion = 3; ed_info.Width = 1024; ed_info.Height = 1024; ed_info.BitDepth = 16; ed_info.ColorType = 'grayscale' ed_info.Modality = 'MR' % 保存する writestruct(ed_info, "ed_dcm_info.xml")
1年前
記事のアイキャッチ画像
【MATLAB】画像の信号強度の平均,SNRを求める
MATLAB [Japanese] - Radi_tech’s blog
% 読み込んだ画像をいったん”x”に代入. x=img; % 信号が0の部分をnanに置き換える x(x==0) = nan; % nan以外の部分を抽出 x = x(~isnan(x)); ave = mean(x,"all"); sd = std(x,"omitnan");
1年前
記事のアイキャッチ画像
【MATLAB】任意のWW,WLでDICOMを表示する
MATLAB [Japanese] - Radi_tech’s blog
; img = dicomread(dcm_path); WL = 3000; WW = 2000; W_min = WL - WW/2; W_max = WL + WW/2; img = dicomread(dcm_path); imshow(img,[W_min,W_max]);
1年前
記事のアイキャッチ画像
【MATLAB】DICOMデータをCSVへ一括変換
MATLAB [Japanese] - Radi_tech’s blog
DICOMデータをCSVへ一括変換する。 MRIのT1 mapなどの処理に有用。 % dcm 2 csv main_fd = "DICOMデータが入っているフォルダを指定"; imgs = dir(main_fd); imgs = imgs(3:end); csv_fd = "CSVファイルを保存するフォルダを指定"; for x = 1:length(imgs) img_path = fullfile(main_fd, imgs(x).name); img = dicomread(img_path); nm = split(imgs(x).name,"."); csv_path = fullfile(csv_fd,strcat(nm{1},".csv")); csvwrite(csv_path,img) end
1年前
記事のアイキャッチ画像
【MATLAB】DICOMデータをCSVへ一括変換
MATLAB [Japanese] - Radi_tech’s blog
DICOMデータをCSVへ一括変換する。 MRIのT1 mapなどの処理に有用。 % dcm 2 csv main_fd = "DICOMデータが入っているフォルダを指定"; imgs = dir(main_fd); imgs = imgs(3:end); csv_fd = "CSVファイルを保存するフォルダを指定"; for x = 1:length(imgs) img_path = fullfile(main_fd, imgs(x).name); img = dicomread(img_path); nm = split(imgs(x).name,"."); csv_path = fullfile(csv_fd,strcat(nm{1},".csv")); csvwrite(csv_path,img) end
1年前
記事のアイキャッチ画像
【MATLAB】DICOMのCT画像をWW、WLを設定してJPEG変換する
MATLAB [Japanese] - Radi_tech’s blog
JPEGに変換できません。 1) DICOM 画像を読み込み JPEG保存 radi-tech.hatenablog.com 〜 CT_dcm_path = fullfile(tmp_sub_fd,fls{z}); tmp_img = dicomread(tmp_fl); tmp_info = dicominfo(tmp_fl); % processing ww,wl img = double(tmp_img); img = imresize(img,[1024 1024]); ww = tmp_info.WindowWidth; wl = tmp_info.WindowCenter; min = double(wl - ww / 2); max = double(wl + ww / 2); img(img>max) = max; img(img<min) = min; No = tmp_info.InstanceNumber; No = sprintf('%04d',No); % save into save_fd sv_path = fullfile(save_fd,strcat(No,".jpg")); figure(1) imshow(img,[],'Border','tight'); set(figure(1),'Units','inches'); pos = get(figure(1),'Position'); set(figure(1),'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3), pos(4)]); print(figure(1),sv_path,'-djpeg','-r0'); 〜
2年前
記事のアイキャッチ画像
【MATLAB】CNN用にtrainとtestにデータを分ける
MATLAB [Japanese] - Radi_tech’s blog
MRIのシーケンスの疾患の分類精度を比較する フォルダ構造はこんな感じ 手順 フォルダ構造を得る 保存用のフォルダを作成する 分割用のインデックスを乱数を用いて発生させる movefileでファイルを移動 各シーケンスで繰り返す [a,b,c]= fileparts(main_fd); sub_fd =dir(main_fd); %remove waste files sub_fd =sub_fd (~ismember({sub_fd.name}, {'.','..','.DS_Store','._.DS_Store','._*'})); %covert to cell sub_fd ={sub_fd.name} 分割したファイルの送り先フォルダを作成する 元データのバックアップはとっておく(重要) for x= 1:length(sub_fd) sub_sub_fd = dir(fullfile(main_fd,sub_fd{x})); %remove waste files sub_sub_fd =sub_sub_fd(~ismember({sub_sub_fd.name}, {'.','..','.DS_Store','._.DS_Store','._*'})); %covert to cell sub_sub_fd ={sub_sub_fd.name} for y= 1:length(sub_sub_fd) test_img_fd_path = fullfile(a,strcat('test_',b),sub_fd{x},sub_sub_fd{y}); mkdir(test_img_fd_path); end end msgbox("save fd created") length でファイル数を得て、乱数でインデックスを発生させる % Create idx of each fd for yyy = 1: length(sub_sub_fd) tmp_fd = fullfile(main_fd,sub_fd{1},sub_sub_fd{yyy}); img_lst = dir(tmp_fd); %remove waste files img_lst =img_lst(~ismember({img_lst.name}, {...
3年前
記事のアイキャッチ画像
【MATLAB】画像のResizeをparforで行う
MATLAB [Japanese] - Radi_tech’s blog
parforは並列で処理を行なってくれるので、高速で作業が終わります。 手順はこんな感じ フォルダの構造を得る 保存用フォルダを作成する for文でコードを作成 最後にresiezeに関わる部分をparforに変更する ・まずはメインフォルダを選択して内部構造を得ていく main_fd = uigetdir(); [a,b,c]= fileparts(main_fd); sub_fd =dir(main_fd); %remove waste files sub_fd =sub_fd (~ismember({sub_fd.name}, {'.','..','.DS_Store','._.DS_Store','._*'})); %covert to cell sub_fd ={sub_fd.name}; ・次に、画像を保存するフォルダを作成。どんどんデータは増えていくが、オリジナルのデータはいじらずに置いておきたい。 for x= 1:length(sub_fd) sub_sub_fd = dir(fullfile(main_fd,sub_fd{x})); %remove waste files sub_sub_fd =sub_sub_fd(~ismember({sub_sub_fd.name}, {'.','..','.DS_Store','._.DS_Store','._*'})); %covert to cell sub_sub_fd ={sub_sub_fd.name}; for y= 1:length(sub_sub_fd) save_fd= fullfile(a,strcat("rs_",b),sub_fd{x},sub_sub_fd{y}); mkdir(save_fd); end end msgbox("save fd created") ・for文とparfor文を組み合わせて連続処理をする。 parfor xx = 1:length(sub_fd) parfor yy = 1:length(sub_sub_fd) tmp_fd = fullfile(main_fd,sub_fd{xx},sub_sub_fd{yy}); tmp_img_lst = dir(tmp_fd); tmp_img_lst =tmp_im...
3年前
記事のアイキャッチ画像
【MATLAB】DICOM画像の色味(WW,WL)をReference画像へ合わせる
MATLAB [Japanese] - Radi_tech’s blog
MRIのDICOM画像の場合,ほとんどの画像がオペレーターにより装置上でWW,WLを調整の上サーバーへ転送されます. 深層学習や機械学習ではできるだけ入力画像条件を揃える方が良いため調整が必要で、その方法を紹介します. 参照用画像を読み込み 調整用画像を読み込み imhistmatchで調整 保存 〜 %参照用(Reference)画像を読み込む ref_img = dicomread(ref_path) %調整用(Adjust)画像を読み込む ad_img = dicomread(ad_path) use_img= imhistmatch(ad_img, ref_img,'method','polynomial'); % 'polynomial' = 多項式を用いた調整法 〜 これで調整終了 あとはdicomwriteするなり,JPEGなどで保存するなりでOK JPEG保存は↓↓↓ radi-tech.hatenablog.com 参考URL jp.mathworks.com
3年前
記事のアイキャッチ画像
【MATLAB】MRIのcontrastを重ねたpseudo-color imageを作成する.
MATLAB [Japanese] - Radi_tech’s blog
MRIは色々なContrastを撮像できますが,それらをJPEGのRGBのそれぞれのchannelに入れてpseudo-color imageを作成し,深層学習へ適応した報告があります. 参考文献; Hidetoshi Matsuo, et al. Diagnostic accuracy of deep‑learning with anomaly detection for a small amount of imbalanced data: discriminating malignant parotid tumors in MRI www.nature.com 手順 SizeをそろえたJPEG画像を用意する.(DICOMからResizeしたJPEG変換は別記事参照) "imread"が必要な画像を読みこみ. "rgb2gray"で一次元化する. 入れものとなる上記のJPEGと同様のSize × 3の配列を用意する. RGBのそれぞれのchannelに準備した画像データを入れてpseudo-color image 画像を確認 RGBの要素に分解して再度確認 radi-tech.hatenablog.com 〜 %SizeをそろえたJPEGを開く %今回はDWI b1000とADCを融合する %画像を読みこむ DWI_img =imread('b1000_path'); ADC_img =imread('ADC_path'); %gray scale の一次元へ変更する DWI_img_gy = rgb2gray(DWI_img); ADC_img_gy = rgb2gray(ADC_img); %画像サイズを得る [x,~]=size(DWI_img_gy); %入れものとなる3次元配列を用意する. ここでは"pRGB"という変数とする %'uint8'にしておくことが注意点 pRGB= zeros(x,x,3,'uint8'); %上記のGray scale画像を入れ込む %Blue channelは空にしておく pRGB(:,:,1)=[DWI_img_gy]; %Red channel pRGB(:,:,2)=[ADC_img_gy]; %Green channel pRGB(:,:,3)=[]; %Blue channel %画像の確認 fi...
3年前
記事のアイキャッチ画像
【MATLAB】DICOMを余白なしでJPEGへ変換
MATLAB [Japanese] - Radi_tech’s blog
MATLABでDICOMを読み込み,処理を経てJPEG保存します。 DICOMはuint16形式で読み込まれるので、最も一般的な画像保存関数”imwrite”が直接的には使えず,figureをたてて”saveas”で保存する必要があります。 手順 DICOM読み込み 各種処理(今回はresize) figureをたてる ”imshow”で表示 figureの余白削除の処理 "print"を用いて保存 %DICOMを読み込む DCM_img = dicomread(DCM_path); %resizeする rs_DCM_img =imresize(DCM_img,[512 512]); %figureをたてる figure(1) imshow(rs_DCM_img ,[],'Border','tight'); %Figureのプロパティを"inches"で処理する設定 set(figure(1),'Units','inches'); %現在の画像位置を取得 pos = get(figure(1),'Position'); %paper sizeを変更することで余白をカット set(figure(1),'PaperPositionMode','Auto','PaperUnits','Inches','PaperSize',[pos(3), pos(4)]) %print機能を利用してjpegで保存.’jpg’ではなく’jpeg’と書くことに注意 print(figure(1),’rs_DCM_img','-djpeg','-r0')
3年前
記事のアイキャッチ画像
【MATLAB】JPEGをDICOM情報を付加して保存する
MATLAB [Japanese] - Radi_tech’s blog
GANなどで生成した画像(JPEG)をDICOM で保存する方法 生成した画像をwork stationや各種ソフトで使用することを想定しています 手順 付加したいDICOM情報を持つファイルを用意 DICOM メタデータの取得 JPEGを用意 JPEGをGray scale or singleに変換 DICOMメタデータをつけて保存 ポイントはGray scale or singleへの変換です。JPEGがRGBの3次元に対して,DICOMは色情報を持たない2次元画像です。 また、DICOMメタデータのコピー元画像と混同しないようにUIDを立てておく方必要があります。 % pathを指定してDICOMメタデータを取得 dcm_info=dicominfo(dcm_path)); %コピーもと画像と混同しないようにUIDを立てておく %"dicomuid"は新たにUIDを作成する呪文 uid_1 = dicomuid; uid_2 = dicomuid; %メタデータを一部書き換え %studyとseriesを新たにする dcm_info.StudyInstanceUID =uid_1; dcm_info.SeriesInstanceUID=uid_2; %pathを指定してJPEGを取得 jpg_img =imread(jpg_path); % gray scaleへ変換する jpg_img =rgb2gray(jpg_img); %saveするpathを指定して(今はsave_pathとする)、dicom_infoを保存 dicomwrite(jpg_img,[],save_path,dcm_info); for文に組み込むとシリーズ全体の画像を一括処理が可能。 途中にimresizeやWindow levelの設定を組み込むと任意に調整したDICOM画像が作成可能。
3年前
記事のアイキャッチ画像
【MATLAB】for文の変数にしたがって連番で画像保存
MATLAB [Japanese] - Radi_tech’s blog
画像を保存する際、連番を降っておくと管理が簡単です。 ex) 001.jpg, 002.jpg, 003.jpg,.........100.jpg という感じ %複数枚あるMRIのjpg fileを想定 for x = 1:length(MR_fl) img = imread(fullfile(main_fd,MR_fl(x))); %saveするfile pathを作成 %'%03i'が連番を発生させるcode save_fl= strcat(num2str(x,'%03i'),'.jpg'); %saveするfull pathを作成 save_path = fullfile(save_fd,save_fl); %imgを[]のcolor map(最適カラーマップ)で,save_pathに保存 imwrite(img,[],save_path) end 4桁にしたいなら'%04i'を書けばOK
3年前
記事のアイキャッチ画像
【MATLAB】複数症例の画像を一括処理
MATLAB [Japanese] - Radi_tech’s blog
画像解析において、複数の症例の複数枚の画像を一括で処理したい場面は多い。 ex) 症例 001-010のMRI画像、それぞれ20枚ずつなど for文で連続処理をするcode 手順 Main folderを定義 内部のフォルダをセル型で一覧(リスト化でも可能) 内部フォルダ毎にファイルをセル型で一覧(リスト化でも可能) ファイルのリストでfor文で処理を実行 MATLAB ライブエディタを想定 % 症例が入っているMainのfoldを指定 MR_main_fd= uigetdir(); MR_fd=dir(MR_main_fd); %隠しファイルを読み込まない様に処理 MR_fd=MR_fd(~ismember({MR_fd.name}, {'.','..','.DS_Store','._.DS_Store'})); MR_fd=MR_fd([MR_fd(:).isdir]); %Cell型へ変換 MR_fd={MR_fd.name} とりえあず、上記で処理する各フォルダを定義できる。 for x= 1:length(MR_fd) %DICOM fileを一覧で得る。他の拡張子の場合 ’*.dcm’をjpgなどへ変更すればOK %前述の処理で得たフォルダ名をfullfileでくっつけてpath作成 → dir()でlistを得る MR_dcm_list= dir(fullfile(MR_main_fd, MR_fd{x}, '*.dcm')); %↑↑隠しファイルがある場合は、処理が必要 %↓↓ファイルのリストでfor文 for y= 1:length(MR_dcm_list) %file pathを定義 MR_dcm_fl= fullfile(MR_main_fd, MR_fd{x},MR_dcm_list(y).name %これでファイル毎のpathができるので、下に処理を書いて行けばOK end end
3年前
記事のアイキャッチ画像
【MATLAB】隠しファイルを読み込まない方法
MATLAB [Japanese] - Radi_tech’s blog
医用画像をfor文で連続するためのファイルリストを作成する時、隠しファイルがとても邪魔です。 pathが通らず処理が止まります。 一番初めに隠しファイルを除外するのが大切です。 MATLAB code % MR fd uigetdir()でファイルが入っているフォルダを選択 MR_fd= uigetdir(); % dir()でフォルダ内のファイルを取得 MR_fl=dir(MR_fd); % ↓↓で隠しファイルを除去 MR_fl=MR_fl(~ismember({MR_fl.name}, {'.','..','.DS_Store','._.DS_Store','._*'})); %cell型へ変換 listで扱う場合はいらない MR_fl={MR_fl.name} 上記で、隠しファイルがないファイル一覧が取得可能
3年前