2015-04-23 3 views
1

У меня есть 8-битное изображение в оттенках серого с разными значениями (0,1,2,3,4, ..., 255). То, что я хочу сделать, - это цветное изображение в оттенках серого с такими цветами, как синий, красный и т. Д. До сих пор я делал эту раскраску, но только в оттенках серого. Как я могу сделать это с помощью реальных цветов?Окрашивание 8-битного изображения в оттенках серого в MATLAB

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

for k = 1:length(tifFiles) 
    baseFileName = tifFiles(k).name; 
    fullFileName = fullfile(myFolder, baseFileName); 
    fprintf(1, 'Now reading %s\n', fullFileName); 
    imageArray = imread(fullFileName); 

    %// Logic to replace white grayscale values with darkish gray here 
    ind_plain = find(imageArray == 255); 
    imageArray(ind_plain) = 50; 

    imwrite(imageArray, fullFileName); 
end 
+1

Я не эксперт по этому вопросу, но я нашел обмен файлами (http://www.mathworks.com/matlabcentral/fileexchange/8214-gray-image-to-color-image-conversion) на этом , – patrik

ответ

6

То, что вы просите, чтобы выполнить 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, который является частью панели инструментов обработки изображений.Это то, что он выглядит следующим образом:

enter image description here

Таким образом, мы можем загрузить в этот образ в MATLAB, как так:

imageArray = imread('cameraman.tif'); 

Далее, мы можем использовать изображение выше, генерировать карту цвета HSV затем pseudocolour изображения:

cmap = hsv(256); 
colourArray = ind2rgb(imageArray+1, cmap); 

Получает:

enter image description here


Примите к сведению, что вы не имеют использовать любой из цветных карт, что 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 изображения.


Удачи и получайте удовольствие!

+0

Спасибо! :) Работал отлично! – user1578688

+0

Кстати. Можно «переопределить» значения? Я имею в виду, например, что все значения «1» красны и т. Д. И т. Д. – user1578688

+0

Что такое .... Reasing? – rayryeng

Смежные вопросы