Прежде всего, чтобы получить заголовок DICOM, вам нужно использовать dicominfo
, который будет возвращать struct
, содержащую каждое из полей. Если вы хотите использовать поле InstanceNumber
для сортировки по, вы можете сделать это таким образом.
%// Get all of the files
directory = uigetdir();
files = dir(fullfile(directory, '*.dcm'));
filenames = cellfun(@(x)fullfile(directory, x), {files.name}, 'uni', 0);
%// Ensure that they are actually DICOM files and remove the ones that aren't
notdicom = ~cellfun(@isdicom, filenames);
files(notdicom) = [];
%// Now load all the DICOM headers into an array of structs
infos = cellfun(@dicominfo, filenames);
%// Now sort these by the instance number
[~, inds] = sort([infos.InstanceNumber]);
infos = infos(inds);
%// Now you can loop through and display them
dcm = dicomread(infos(1));
him = imshow(dcm, []);
for k = 1:numel(infos)
set(him, 'CData', dicomread(infos(k)));
pause(0.1)
end
Это, как говорится, необходимо тщательно изучить DICOM, используя InstanceNumber. Это не надежный способ сделать это, потому что «Номер экземпляра» может ссылаться на один и тот же образ, полученный со временем или на разные фрагменты в трехмерном томе. Если вы хотите того или другого, я бы выбрал что-то более конкретное.
Если вы хотите отсортировать физические фрагменты, я бы порекомендовал сортировку по полю SliceLocation
(если есть). Если сортировка по времени, вы можете использовать TriggerTime
(если имеется).
Также вам нужно будет учесть, что в вашей папке также может быть несколько series, поэтому, пожалуйста, рассмотрите возможность использования SeriesNumber
для их дифференциации.
Действительно большое спасибо ,,, но когда я попробовал свой код, я вернулся со следующей ошибкой. Ссылка на содержание структуры из объекта неструктурированного массива. Ошибка в проекте3> Load_Image_Callback (строка 190) [~, inds] = sort ([infos.InstanceNumber]); –
@AhmedHassaan Извините, что! Мне пришлось изменить вызов 'cellfun' на' dicominfo', чтобы вернуть структуру, а не ячейку. Проверьте это сейчас. – Suever