Измените цветовую карту изображения на дейтеранопию в Matlab

Я долгое время пытался изменить свою цветовую карту своих изображений, используя пользовательскую цветовую карту 256x3, чтобы переключить впечатление человека с «нормальным зрением» на то, которое может видеть человек с дейтеранопией (красно-зеленая слепота).

Цветовая карта уже создана, но я никак не могу применить ее к исходному изображению.

Код

load('ColormapsDefVis.mat')

fig=figure
a=imread('Regenbogen.png');

[b map]=rgb2ind(a,256);

c=ind2rgb(b, DeuteranopiaColorMap);
imshow(c);

работал не так хорошо, как

load('ColormapsDefVis.mat')
fig=figure
a=imread('Regenbogen.png');

imshow(a);

set(fig,'Colormap',DeuteranopiaColorMap)

не.

Кто-нибудь знает, как правильно изменить пользовательскую цветовую карту?

Буду очень признателен за вашу помощь!


person Julia Wachter    schedule 15.12.2014    source источник
comment
Первый фрагмент кода у меня работает..... Конечно, только с моими данными, но работает...   -  person Ander Biguri    schedule 15.12.2014


Ответы (2)


Первый кусок кода работает. Вы, должно быть, делаете ошибку или интерпретируете результаты неправильно.

Я предлагаю вам взглянуть на вещь. Убедитесь, что ваше изображение unit8 или single. Кроме того, вы, вероятно, не знаете, что такое дизеринг, поэтому я предлагаю вам сделать rgb2ind(a,256, 'nodither'). Результаты сглаживания могут обманывать ваши глаза, но мы не можем этого знать, поскольку вы не разместили ни одного изображения.

Чтобы убедиться, что rgb2ind работает, посмотрите код ниже. Вы должны быть в состоянии проверить это на вашем компьютере.

img=imread('cameraman.tif');
indimg=img;
cmap=hsv(255); % colromap 1
cmap2=cmap(end:-1:1,:);  % colromap 2
subplot(121);
c=ind2rgb(indimg,cmap );
imshow(c)
subplot(122);
c2=ind2rgb(indimg,cmap2 );
imshow(c2)

введите здесь описание изображения

person Ander Biguri    schedule 15.12.2014

Большое спасибо за вашу помощь, Андер, подход с использованием цветовых карт был просто не тем эффективным решением, которое я искал. Хотя я уверен, что это тоже сработает, есть более простое решение проблемы :)

Чтобы создать впечатление слепоты на красно-зеленый цвет, я предположил, что люди, страдающие этим заболеванием, не могут различать красноватые и зеленоватые предметы. Поэтому мое решение состоит в том, чтобы построить среднее значение красного и зеленого каналов RGB-изображения в обоих каналах, чтобы сделать их неразличимыми.

a=imread('peppers.png');
figure,
subplot(121)
imshow(a)
c=(a(:,:,1)+a(:,:,2))/2; %Mean value between channel red and green
a(:,:,1)=c; %Switch the red channel to the mean
a(:,:,2)=c; %Switch the green channel to the mean
subplot(122)
imshow(a)

К сожалению, stackoverflow отказывается загружать изображения, так как у меня недостаточно репутации, но код должен работать с любым RGB-изображением, например, со встроенным демо-изображением 'peppers.png'.

Надеюсь, это тоже поможет кому-то еще!

person Julia Wachter    schedule 18.12.2014