images.blocked.Adapter class

Пакет: images.blocked

Интерфейс Adapter для blockedImage объекты

Описание

images.blocked.Adapter класс задает интерфейс для основанного на блоке чтения и записи данных массива. Классы, которые наследовались этому интерфейсу, могут использоваться с blockedImage объекты, включая основанную на блоке потоковую обработку данных массива.

images.blocked.Adapter классом является handle класс.

Атрибуты класса

Abstract
true

Для получения информации об атрибутах класса см. Атрибуты класса.

Создание

Чтобы реализовать этот класс, вы должны:

  • Наследуйтесь images.blocked.Adapter класс. Введите следующий синтаксис как первую линию вашего файла определения класса:

    classdef MyAdapter < images.blocked.Adapter
        ...
    end
  • Задайте три требуемых метода для чтения данных изображения от диска: openToRead, getInfo, и getIOBlock.

  • Опционально, задайте методы, которые включают дополнительное чтение и запись возможностей. Таблица приводит полный набор возможностей, предлагаемых Adapter методы.

  • Опционально, для однофайловых мест назначения, задайте Extension свойство, которое задает расширение файла, чтобы использовать, автоматически создавая целевое местоположение. Свойство должно быть строкой, такой как "jpg". Для адаптеров, которые хранят данные в папке, не добавляйте это свойство или задавайте значение свойства как пустое ([]).

ВозможностьМетоды, чтобы реализовать
Считайте (Необходимые) данные

openToRead – Открытый исходный код для чтения

getInfo – Соберите информацию об источнике

getIOBlock – Получите заданный блок I/O

Запишите данные (Необязательно)

openToWrite – Создайте и откройте место назначения для записи

setIOBlock – Установите заданный блок I/O

Выполните очищают задачи (Необязательно)close – Выполните очищают задачи, такие как закрытие дескрипторов файлов
Включите параллельный блок, обрабатывающий (Необязательно)openInParallelToAppend – Используйте адаптер в параллельном режиме с apply объектная функция
Продолжите писать после прерывания (Необязательно)alreadyWritten – Включите опцию резюме в apply объектная функция

Примеры

свернуть все

В этом примере показано, как задать и использовать пользовательский адаптер, который считывает 3-D данные об изображении TIFF как одно объемное изображение.

Создайте .m файл определения класса, который содержит код, реализующий ваш пользовательский адаптер. Необходимо сохранить этот файл в рабочей папке или в папке, которая находится на пути MATLAB®. Имя .m файл должен совпасть с именем вашего объекта. Например, если вы хотите, чтобы ваш адаптер имел имя My3DTIFFAdapter, затем имя .m файлом должен быть My3DTIFFAdapter.m. .m файл определения класса должен содержать следующие шаги:

  • Шаг 1: Наследуйтесь классу images.blocked.Adapter.

  • Шаг 2: Задайте требуемые методы.

В дополнение к этим шагам задайте любые другие свойства или методы, что необходимо обработать и анализировать данные.

%% STEP 1: INHERIT FROM ADAPTER CLASS
classdef My3DTIFFAdapter < images.blocked.Adapter
    
    properties
        File (1,1) string
        Info (1,1) struct
    end    
    
%% STEP 2: DEFINE REQUIRED METHODS
    methods
        
        % Define the openToRead method
        function openToRead(obj,source)
            obj.File = source;
        end

        % Define the getInfo method      
        function info = getInfo(obj)
            % Read raw file info
            finfo = imfinfo(obj.File);
            
            % Make sure all slices are the same size.
            assert(all(finfo(1).Width==[finfo.Width]), ...
                'All slices do not have the same width.');
            assert(all(finfo(1).Height==[finfo.Height]), ...
                'All slices do not have the same height.');
            obj.Info.Size = [finfo(1).Height, finfo(1).Width, numel(finfo)];
            
            % The first two dims of the smallest unit of data that can be
            % read depends on the type of TIFF file - stripped or tiled.
            % The third dim is always 1 - indicating that the smallest unit
            % that can be read in the third dimensions is 1 (one slice).
            if isempty(finfo(1).TileWidth)
                % This is a stripped TIFF file
                obj.Info.IOBlockSize = [finfo(1).RowsPerStrip, finfo(1).Width, 1];
            else
                % This is a tiled TIFF file
                obj.Info.IOBlockSize = [finfo(1).TileLength, finfo(1).TileWidth, 1];
            end
            
            % This is usually the same for a data set and can be hardcoded.
            assert(finfo(1).BitsPerSample==8 && finfo(1).BitDepth==8)
            obj.Info.Datatype = "uint8";
            obj.Info.InitialValue = cast(0,obj.Info.Datatype);
            info = obj.Info;
        end
        
        % Define the getIOBlock method
        function block = getIOBlock(obj,ioblockSub,level)
            assert(level==1)
            
            % Convert ioblockSub (which is in terms of IOBlockSize) into a
            % 'PixelRegion' coordinate.
            regionStart = (ioblockSub-1).*obj.Info.IOBlockSize + 1;
            regionEnd = (ioblockSub).*obj.Info.IOBlockSize;
            rows = [regionStart(1), regionEnd(1)];
            cols = [regionStart(2), regionEnd(2)];
            slices = [regionStart(3), regionEnd(3)];
            
            block = tiffreadVolume(obj.File, ...
                'PixelRegion',{rows,cols,slices});
        end

    end
end

Ваш пользовательский адаптер теперь готов. Используйте My3DTIFFAdapter чтобы создать адаптер возражают что файлы чтений с 3-D данными об изображении TIFF.

Создайте блокированное изображение, которое считывает данные с помощью пользовательского адаптера, My3DTIFFAdapter. Этот адаптер присоединен к примеру как к вспомогательному файлу. Отобразите размер блокированного изображения.

filename = 'mri.tif';
a = My3DTIFFAdapter
a = 
  My3DTIFFAdapter with properties:

    File: ""
    Info: [1×1 struct]

bim = blockedImage(filename,'Adapter',My3DTIFFAdapter);
bimSize = bim.Size
bimSize = 1×3

   128   128    27

Для сравнения создайте блокированное изображение, которое считывает данные с помощью адаптера по умолчанию. Отобразите размер блокированного изображения.

bimDefault = blockedImage(filename);
bimDefaultSize = bimDefault.Size
bimDefaultSize = 27×2

   128   128
   128   128
   128   128
   128   128
   128   128
   128   128
   128   128
   128   128
   128   128
   128   128
      ⋮

Протестируйте пользовательский адаптер путем чтения одного квадранта объемных данных.

regionStart = [1 1 1];
regionEnd = [bimSize(1:2)/2 bimSize(3)];
vol = getRegion(bim,regionStart,regionEnd);

Отобразите данные.

p = uipanel(figure);
volshow(vol,'Parent',p);

Советы

  • Тулбокс включает несколько встроенных адаптеров, которые разделяют на подклассы от Adapter класс. Все эти адаптеры поддерживают и операции чтения и операции записи. Все адаптеры, которые работают на базисе на блок, таком как GenericImageBlocks, может использоваться с параллельным режимом apply объектная функция.

    АдаптерОписание
    BINBlocksСохраните каждый блок как двоичный файл в папке
    GenericImage Сохраните блоки в одном изображении
    GenericImageBlocksСохраните каждый блок как файл изображения в папке
    H5Сохраните блоки в одном изображении HDF5
    H5BlocksСохраните каждый блок как файл HDF5 в папке
    InMemoryСохраните блоки в переменной в оперативной памяти
    JPEGBlocksСохраните каждый блок как файл JPEG в папке
    MATBlocksСохраните каждый блок как файл MAT в папке
    PNGBlocksСохраните каждый блок как файл PNG в папке
    TIFFСохраните блоки в одном файле TIFF

Смотрите также

Введенный в R2021a