То, что вы просите, чтобы выполнить pseudo colouring изображений. Выполнение этого в MATLAB на самом деле довольно просто. Вы можете использовать интенсивности оттенков серого как индекс в цветовой карте, и каждая интенсивность создаст уникальный цвет. Во-первых, вам нужно создать цветную карту длиной 256 элементов, затем используйте ind2rgb
, чтобы создать свое цветное изображение, учитывая интенсивность/индекс оттенков серого вашего изображения.
Существует много разных цветовых карт, доступных вам в MATLAB. Вот текущие доступные цветовые карты в среде MATLAB без недавно добавил Parula цветовую карту, которая была введена в R2014:
Как цвет карты работы является то, что более низкие значения индексов/оттенки серого имеют цвета, которые перемещаются в направлении влево сторона спектра и более высокие индексы/оттенки серого имеют цвета, которые движутся к правой стороне спектра.
Если вы хотите создать цветовую карту с 256 элементами, вы просто используете любую из этих цветовых карт как функцию и задаете 256 в качестве входного параметра для создания 256-цветной цветовой карты для вас. Например, если вы хотите использовать карту цветов HSV, вы могли бы сделать это в MATLAB:
cmap = hsv(256);
Теперь, учитывая ваше полутоновое изображение в MATLAB рабочей области хранятся в imageArray
, просто использовать ind2rgb
таким образом:
colourArray = ind2rgb(double(imageArray)+1, cmap);
Первый аргумент - это изображение в оттенках серого, которое вы хотите использовать для псевдоколоры, а второй вход - это цветовая карта, созданная любой из функций отображения цвета MATLAB. colourArray
будет содержать ваше псевдоцветное изображение. Обратите внимание, что мы смещение Изображение в оттенках серого на 1, а также отличное от double
. Причина этого заключается в том, что MATLAB является 1-индексированным языком программирования, поэтому мы должны начинать индексирование в массивы/матрицы, начиная с 1. Поскольку ваши интенсивности варьируются от [0,255]
, и мы хотим использовать их для индексации в цветовой карте, мы необходимо сделать это от [1,256]
, чтобы разрешить индексирование. Кроме того, вы, скорее всего, используете uint8
изображений, и поэтому добавление 1 к uint8
просто насытит любые значения, которые уже находятся в диапазоне от 255 до 255. Мы не сможем перейти на 256. Поэтому вам нужно отобразить изображение временно до double
, чтобы мы могли увеличить точность изображения, а затем добавить 1, чтобы изображение могло перейти на 256, если оно было выполнено.
Вот пример использования изображения cameraman.tif
, который является частью панели инструментов обработки изображений.Это то, что он выглядит следующим образом:
Таким образом, мы можем загрузить в этот образ в MATLAB, как так:
imageArray = imread('cameraman.tif');
Далее, мы можем использовать изображение выше, генерировать карту цвета HSV затем pseudocolour изображения:
cmap = hsv(256);
colourArray = ind2rgb(imageArray+1, cmap);
Получает:
Примите к сведению, что вы не имеют использовать любой из цветных карт, что MATLAB предоставляет. Фактически, вы можете создать свою собственную цветовую карту. Все, что вам нужно сделать, это создать матрицу размером 256 x 3, где каждый столбец обозначает долю красного (первого столбца), зеленого (второй столбец) и синего (третьего столбца) значений для каждой интенсивности. Поэтому первая строка дает вам цвет, который отображается в интенсивности 0, вторая строка дает вам цвет, который отображается на интенсивность 1 и т. Д. Кроме того, вы должны убедиться, что интенсивности с плавающей точкой и варьируются от [0,1]
. Например, это первые 10 строк карты цветов HSV генерироваться выше:
>> cmap(1:10,:)
ans =
1.0000 0 0
1.0000 0.0234 0
1.0000 0.0469 0
1.0000 0.0703 0
1.0000 0.0938 0
1.0000 0.1172 0
1.0000 0.1406 0
1.0000 0.1641 0
1.0000 0.1875 0
1.0000 0.2109 0
Вы можете использовать эту пользовательскую карту цветов в ind2rgb
для pseudocolour изображения.
Удачи и получайте удовольствие!
Я не эксперт по этому вопросу, но я нашел обмен файлами (http://www.mathworks.com/matlabcentral/fileexchange/8214-gray-image-to-color-image-conversion) на этом , – patrik