0

很长一段时间以来,我一直在尝试使用自定义 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)

没有。

有谁知道如何正确更改自定义颜色图?

非常感谢您的帮助!

4

2 回答 2

0

第一段代码有效。您必须犯错误或错误地解释结果。

我建议你看一个东西。确保您的图像是unit8single。此外,您可能不知道会发生什么抖动,所以我建议您这样做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)

在此处输入图像描述

于 2014-12-15T17:21:36.097 回答
0

非常感谢您的帮助 Ander,使用颜色图的方法并不是我正在寻找的有效解决方案。虽然我相信它也会起作用,但有一种更简单的方法可以解决这个问题:)

为了获得红绿盲的印象,我认为患有这种疾病的人无法区分红色和绿色物体。所以我的解决方案是在两个通道中绘制红色和绿色 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”。

希望这对其他人也有帮助!

于 2014-12-18T11:52:05.967 回答