В этом примере показано, как разработать пользовательский datastore, который поддерживает операции записи. Datastore называют DICOMDatastore
потому что это поддерживает DICOM ® (Цифровая Обработка изображений и Коммуникации в Медицине) данные, которые являются международным стандартом для медицинской информации обработки изображений.
Тема Разрабатывает Пользовательский Datastore, описывает общий процесс для создания пользовательского datastore, а также конкретных требований, чтобы добавить различные части функциональности. Существует множество суперклассов, от которых можно разделить на подклассы в зависимости от того, в каких частях функциональности вы нуждаетесь (параллельная оценка, пишущий операции, перестановку, и так далее). В частности, можно добавить поддержку записи операций путем разделения на подклассы от matlab.io.datastore.FileWritable
. Однако для самого широкого набора записи функциональности, необходимо также разделить на подклассы от matlab.io.datastore.FoldersPropertyProvider
, который добавляет Folders
свойство к datastore. Полные требования, чтобы добавить поддержку записи пользовательскому datastore покрыты в, Добавляет Поддержка Записи данных.
Эта таблица содержит код и объяснения DICOMDatastore
класс.
classdef DICOMDatastore < matlab.io.Datastore & ... matlab.io.datastore.FileWritable & ... matlab.io.datastore.FoldersPropertyProvider | Заголовок класса
|
properties Files matlab.io.datastore.FileSet end | Общественные собственности
|
properties (Constant) SupportedOutputFormats = ... [matlab.io.datastore.ImageDatastore.SupportedOutputFormats, "dcm"]; DefaultOutputFormat = "dcm"; end |
|
methods(Access = public) function myds = DICOMDatastore(location) % The class constructor to set properties of the datastore. myds.Files = matlab.io.datastore.FileSet(location, ... "IncludeSubfolders", true); populateFoldersFromLocation(myds,location); reset(myds); end | Открытые методы Раздел открытых методов задает общие методы datastore что использование класса, чтобы управлять данными. Открытые методы внешне доступны, так пользователи класса Конструктор
|
function tf = hasdata(myds) %HASDATA Returns true if more data is available. % Return logical scalar indicating availability of data. % This method should be called before calling read. This % is an abstract method and must be implemented by the % subclasses. hasdata is used in conjunction with read to % read all the data within the datastore. tf = hasNextFile(myds.Files); end |
|
function [data, info] = read(myds) %READ Read data and information about the extracted data. % Return the data extracted from the datastore in the % appropriate form for this datastore. Also return % information about where the data was extracted from in % the datastore. Both the outputs are required to be % returned from the read method and can be of any type. % info is recommended to be a struct with information % about the chunk of data read. data represents the % underlying class of tall, if tall is created on top of % this datastore. This is an abstract method and must be % implemented by the subclasses. % In this example, the read method reads data from the % datastore using a custom reader function, MyFileReader, % which takes the resolved filenames as input. if ~hasdata(myds) error("No more data to read.\nUse reset method to " ... + "reset the datastore to the start of the data. Before " ... + "calling the read method, check if data is available " ... + "to read by using the hasdata method."); end file = nextfile(myds.Files); try data = dicomread(file.Filename); catch ME error("%s has failed", file.FileName); end info.FileSize = size(data); info.Filename = file.Filename; end | |
function reset(myds) %RESET Reset to the start of the data. % Reset the datastore to the state where no data has been % read from it. This is an abstract method and must be % implemented by the subclasses. % In this example, the datastore is reset to point to the % first file (and first partition) in the datastore. reset(myds.Files); end | |
function frac = progress(myds) %PROGRESS Percentage of consumed data between 0.0 and 1.0. % Return fraction between 0.0 and 1.0 indicating progress as a % double. The provided example implementation returns the % ratio of the index of the current file from FileSet % to the number of files in FileSet. A simpler % implementation can be used here that returns a 1.0 when all % the data has been read from the datastore, and 0.0 % otherwise. % % See also matlab.io.Datastore, read, hasdata, reset, readall, % preview. frac = progress(myds.Files); end end | |
methods(Access = protected) function dsCopy = copyElement(myds) %COPYELEMENT Create a deep copy of the datastore % Create a deep copy of the datastore. We need to call % copy on the datastore's property FileSet because it is % a handle object. Creating a deep copy allows methods % such as readall and preview, which call the copy method, % to remain stateless. dsCopy = copyElement@matlab.mixin.Copyable(myds); dsCopy.Files = copy(myds.Files); end | Защищенные методы Защищенные методы переопределяют методы, которые были наследованы классом, и они только доступны для Защищенный |
function tf = write(myds, data, writeInfo, outFmt, varargin) if outFmt == "dcm" dicomwrite(data, writeInfo.SuggestedOutputName, varargin{:}); else write@matlab.io.datastore.FileWritable(myds, data, ... writeInfo, outFmt, varargin{:}); end tf = true; end | Защищенный |
function files = getFiles(myds) files = myds.Files.FileInfo.Filename; end end | Защищенный |
end | Закончите |
DICOMDatastore
КлассПосле того, как вы реализуете DICOMDatastore
класс, можно использовать конструктора, чтобы создать новый DICOMDatastore
возразите что ссылки местоположение набора файлов DICOM. Например, если у вас есть файлы DICOM в папке C:\Data\DICOM\series-000001\
:
ds = DICOMDatastore("C:\Data\DICOM\series-000001")
ds = DICOMDatastore with properties: Files: [1×1 matlab.io.datastore.FileSet] SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff" "dcm"] DefaultOutputFormat: "dcm" Folders: {'C:\Data\DICOM\series-000001'}
Пользователи класса DICOMDatastore
имейте доступ к этим открытым методам:
methods(ds)
Methods for class DICOMDatastore: DICOMDatastore copy isPartitionable preview read reset writeall combine hasdata isShuffleable progress readall transform Methods of DICOMDatastore inherited from handle.
В частности, с поддержкой writeall
, можно записать файлы в новое местоположение:
writeall(ds,"C:\Data2\DICOM\")
C:\Data2\DICOM\series-000001
.Для получения общей информации об авторских классах в MATLAB®, смотрите Классы.
matlab.io.Datastore
| matlab.io.datastore.FileWritable
| matlab.io.datastore.FoldersPropertyProvider