额,问题是这样的。在用imread读入彩色图像后再用imshow显示的话,是原图显示的,但是一旦对图像矩阵进行了一系列的处理后,再用imshow就是灰度图像了。怎么样才可以作为彩色图像显示呢?
之前看过论坛中的一个帖子,有人建议用imagesc,这个是伪彩色显示,有没有直接点的彩色图像显示函数呢?
或者有人又建议在读入图像的时候用[A,map]=imread();变成索引图像,我这样做了,得到的map是0(后发现读入图像不是索引图像的话的得不到map的)。后来又直接把图像在读入后用rgb2ind改为索引图像得到map,但是在对A处理后,再用imshow(A',map)得到的图像失真的厉害,也就是之前的map已经对应不上现在的A’。有尝试过用map和A做同样的变换处理,但是都不能解决问题。
例如:
f=imread('C:\Users\TOSHIBA\Documents\MATLAB\color seg\candydish.jpg');
[x1,map1]=rgb2ind(f, 128,'nodither');
x2 = cast(x1,'double')/.255;
figure
imshow(x2,map1)
这样只是对x1进行了一个uint到double的转换,图像就变的面目全非了。。
初学图像不久,这个彩色图像显示问题困扰我许久了。。。特来求教坛子里的达人们~~~
附件是对(x1,map1)图像(原图的索引图像)与(x2,map1)图像(将x1稍作处理的索引图像)的显示结果。
MATLAB有一个叫颜色映象的数据结构来代表颜色值。颜色映象定义为一个有三列和若干行的矩阵。利用0到1之间的数,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、黄、蓝三种颜色的强度,形成一种特定的颜色。一些有代表性的RGB值在表1中给出。
表1 简单颜色
Red Green Blue 颜色
0 0 0 黑
1 1 1 白
1 0 0 红
0 1 0 绿
0 0 1 蓝
1 1 0 黄
1 0 1 洋红
0 1 1 青蓝
2/3 2/3 1 天蓝
1 0.5 0 橘黄
0.5 0 0 深红
0.5 0.5 0.5 灰色
有十个MATLAB函数产生预定的颜色映象。见表2
表2 标准颜色影像
hsv 色彩饱和值(以红色开始和结束)
hot 从黑到红到黄到白
cool 青蓝和洋红的色度
pink 粉红的彩色度
gray 线性灰度
bone 带一点蓝色的灰度
jet hsv的一种变形(以蓝色开始和结束)
copper 线性铜色度
prim 三棱镜。交替为红色、橘黄色、黄色、绿色和天蓝色
flag 交替为红色、白色、蓝色和黑色
按缺省,上面所列的各个颜色映象产生一个64×3的矩阵,指定了64种颜色RGB的描述。这些函数都接受一个参量来指定所产生矩阵的行数。比如hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红和黄,到白。
大多数计算机在一个8位的硬件查色表中一次可以显示256种颜色,当然有些计算机的显示卡可以同时显示更多的颜色。这就意味着在不同的图中,一般一次可以用三或四个64×3的颜色映象。如果使用了更多的颜色映象输入项,计算机必须经常在它的硬件查色表中调出输入项。比如,当在画MATLAB图形时背景图案发生了变化,就是发生了这种情况。所以,除非计算机有一次显示更多种颜色的显示卡,最好任何一次所用的颜色映象输入项数都小于256。
rgb2gray是将灰度图像转换为rgb彩色图像,试试imwrite函数,imwrite图像写出