У меня есть двумерная помеченная матрица из bwlabel
, но она может иметь метки с индексами больше 4000. Это просто показать через imshow
с более чем 256 цветами:
img = zeros(1000, 1000);
%Put 4000 seeds
for numCentroid = 1:4000
x = randi([1 size(img, 1)]);
y = randi([1 size(img, 2)]);
img(x, y) = 1;
end
D = bwdist(img);
% Create the 'cell' regions
L_img = watershed(D); % We obtain a labelled image
imshow(L_img, repmat(colorcube(256), 20, 1));
Однако, когда мы делаем то же самое, но с imwrite
:
imwrite(L_img, repmat(colorcube(256), 20, 1), 'p.tif');
И получаем эту ошибку:
Ошибка при использовании wtifcНеверная карта цветов для 8-битного изображения, должна иметь размеры n X 3 (n <= 256).</p>
Воспроизводится также с другими форматами, такими как png:
imwrite(uint16(randi([0 4000], 200)), colorcube(4001), 'p.png')
Ошибка при использовании writepng (строка 76)Неправильная битовая глубина для индексированного изображения;должно быть 1, 2, 4 или 8.
Вот пример изображения, которое мы хотим сохранить:
![image to write](https://i.stack.imgur.com/k9Rg1.png)
Нам нужно получить индексированное изображение, помеченное каждой отдельной областью.Как мы можем сохранить это изображение?
Поскольку мы знаем, что это проблема самого imwrite
, поскольку он преобразует двойную матрицу в uint8
, мы попытались поместить ту же матрицу, что и uint16
.Это также не работает.
Редактировать 1:
Отображение битовой глубины изображения в Matlab - это правильные 16 бит.
imfinfo('p.tif')
Однако, если вы проверитето же самое, но в Windows: right click on the file -> Properties -> Details
, он имеет 8-битную глубину.Это соотносится с:
help imwrite
Допустимые значения для BitDepth файлов TIFF Изображения в градациях серого: 1, 2, 4, 8 или 16Изображения в оттенках серого с альфа-каналом: 8 или 16Проиндексированные изображения: 1, 2, 4 или 8Truecolor изображения: 8 или 16