exponenta event banner

Подклассы встроенных типов без свойств

Специализированные числовые типы

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

Дополнительные сведения см. в разделе Подклассы встроенных типов MATLAB.

Класс для управления данными uint8

В этом примере показан класс, производный от встроенного uint8 класс. Этот класс упрощает процесс поддержания коллекции данных изображения интенсивности, определенных uint8 значения. Основные операции класса включают в себя:

  • Возможность преобразования различных классов данных изображения в uint8 уменьшение объема хранения объектных данных.

  • Метод отображения изображений интенсивности, содержащихся в объектах подкласса.

  • Возможность использования всех методов, поддерживаемых uint8 данные (например, size, индексация, reshape, bitshift, cat, fft, арифметические операторы и так далее).

Данные класса представляют собой матрицы данных изображения интенсивности, хранящиеся в суперклассной части объекта подкласса. Этот подход не требует свойств.

DocUint8 в классе хранятся данные изображения, которые при необходимости преобразуют данные:

classdef DocUint8 < uint8
   methods
      function obj = DocUint8(data)
         if nargin == 0
            data = uint8(0);
         end
         obj = obj@uint8(data); % Store data on superclass
      end
      function h = showImage(obj)
         data = uint8(obj);
         figure; colormap(gray(256))
         h = imagesc(data,[0 255]);
         axis image
         brighten(.2)
      end
   end
end

Использование класса DocUint8

Создание объектов DocUint8

DocUint8 класс предоставляет метод для отображения всех изображений, сохраненных как DocUint8 объектов согласованным образом. Например:

cir = imread('circuit.tif');
img1 = DocUint8(cir);
img1.showImage;

Поскольку DocUint8 подклассы uint8, вы можете использовать любой uint8 методы. Например,

size(img1)
ans =
   280   272

возвращает размер данных изображения.

Операции индексирования

Унаследованные методы выполняют операции индексирования, но возвращают объекты того же класса, что и подкласс.

Поэтому можно выполнить индексацию данных изображения и вызвать метод подкласса:

showImage(img1(100:200,1:160));

Подстрочные ссылочные операции (управляемые унаследованными subsref метод) возвращает DocUint8 объект.

Индексированным элементам можно присвоить следующие значения:

img1(100:120,140:160) = 255;
img1.showImage;

Подстрочные операции назначения (управляемые унаследованными subsasgn метод) возвращает DocUint8 объект.

Операции конкатенации

Работа по конкатенации DocUint8 потому что этот класс наследует uint8 horzcat и vertcat методы, которые возвращают DocUint8 объект:

showImage([img1 img1]);

Операции с данными

Методы, которые работают со значениями данных, такими как арифметические операторы, всегда возвращают объект встроенного типа (не типа подкласса). Например, умножение DocUint8 объекты возвращает uint8 объект, поэтому вызов showImage выдает ошибку:

a = img1.*1.8;
showImage(a);
Check for missing argument or incorrect argument data type in call to function 'showImage'.

Для выполнения операций этого типа реализуйте метод подкласса для переопределения унаследованного метода. times метод реализует умножение массива (элемент за элементом).

Добавить этот метод в DocUint8 класс:

function o = times(obj,val)
   u8 = uint8(obj).*val; 
   o = DocUint8(u8);
end

При переопределении uint8 MATLAB ® вызывает метод подкласса, а не метод базового класса. Метод подкласса должен:

  • Позвоните в uint8 times метод на DocUint8 данные объекта.

  • Создание нового DocUint8 с использованием uint8 данные.

После добавления times метод к DocUint8 , вывод выражений умножения является объектом DocUint8 класс:

showImage(img1.*1.8);

Связанные темы