Поместите данные в определенный блок блокированного изображения
Создайте блокированное изображение, к которому можно записать данные. Вы задаете формат блокированного изображения в destination
параметр. Чтобы записать в память, задайте пустую матрицу. Необходимо также задать размер изображения и размер блоков, в которые вы хотите разделенное на блоки изображение. Параметр начального значения зависит от формата, который вы задали в месте назначения. Чтобы создать перезаписываемое блокированное изображение, задайте 'Mode'
параметр со значением 'w'
для режима записи.
destination = []; imgsize = [5 7]; blocksize = [2 2]; initval = uint8(0); bim = blockedImage(destination,imgsize,blocksize,initval, "Mode", 'w');
Запишите данные с заданными блоками в блокированном изображении при помощи setBlock
объектная функция. blocksubs
параметр задает координаты блока, с которым вы хотите записать данные. blockdata
параметр задает данные, чтобы записать в заданный блок. Размер blockdata должен совпадать с размером блока.
blocksubs = [1 1];
blockdata = ones(2,2,"uint8");
setBlock(bim, blocksubs, blockdata)
Закройте изображение для записи.
Переключите блокированное изображение на режим чтения путем устанавливания параметра 'Режима' на 'r' для чтения.
bim.Mode = 'r'
bim = blockedImage with properties: Read only properties Source: [5x7 uint8] Adapter: [1x1 images.blocked.InMemory] Size: [5 7] SizeInBlocks: [3 4] ClassUnderlying: "uint8" Settable properties BlockSize: [2 2]
Создайте полный образ при помощи gather
функция, чтобы собрать все отдельные блоки.
fullImage = gather(bim);
Отобразите детали блокированного изображения в командной строке.
disp(fullImage)
1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Создайте блокированное изображение.
bim = blockedImage('tumor_091R.tif');
Отобразите блокированное изображение и чертите круговой ROI на изображении.
h = bigimageshow(bim); hROI = drawcircle(gca, 'Radius', 470, 'Position', [1477 2284]);
Задайте уровень разрешения, на котором можно создать маску.
maskLevel = 3;
Создайте перезаписываемое блокированное изображение в памяти.
bmask = blockedImage([], [200 200], bim.Size(maskLevel,1:2), false, "Mode", "w");
Задайте запуск и конечные точки для маски.
bmask.WorldStart = bim.WorldStart(maskLevel, 1:2); bmask.WorldEnd = bim.WorldEnd(maskLevel, 1:2);
Отобразите количество блоков.
disp(bmask.SizeInBlocks);
1 1
Преобразуйте координаты ROI в пиксельный уровень.
roiPositionsRC = fliplr(hROI.Vertices); % x,y to row,column roiPosSub = world2sub(bmask, roiPositionsRC, "level", 1); for cSub = 1:bmask.SizeInBlocks(2) for rSub = 1:bmask.SizeInBlocks(1) blockSub = [rSub, cSub]; [pStart, pEnd] = blocksub2sub(bmask, blockSub, "Level", 1); % Create a grid encompassing all pixels in the block in X-Y order [xgrid,ygrid] = meshgrid(pStart(2):pEnd(2), pStart(1):pEnd(1)); % Create in/out mask for this block tileMask = inpolygon(xgrid, ygrid,... roiPosSub(:,2), roiPosSub(:,1)); % Write out the block setBlock(bmask, blockSub, tileMask); end end
Переключите блокированное изображение на режим чтения.
bmask.Mode = 'r';
Отобразите маску.
figure bigimageshow(bmask)
bim
— Блокированное изображениеblockedImage
объектБлокированное изображение в виде blockedImage
объект.
blocksub
— Блокируйте вектор индексаБлокируйте вектор индекса в виде 1 N вектором индекса блока с целочисленным знаком. Допустимые элементы лежат в диапазоне от 1
к соответствующему элементу в SizeInBlocks
свойство.
Пример: [3, 2, 1]
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
blockdata
— Блок данныхБлок данных в виде числового массива с размерностями то соответствие BlockSize
. Тип совпадает с типом, заданным ClassUnderlying
свойство. setBlock
автоматически обрезки блокируются вдоль ребер, чтобы соответствовать Size
свойство.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.