⑴ matlab 中如何把矩陣對應成一個有顏色的網格
p=
[0.29200.56250.20090.47400.95610.37560.76940.4906;
0.85800.61660.27310.90900.59550.16620.44420.4093;
0.33580.11330.62620.59620.028700.62060.4635;
0.680200.53690.32900.81210.83860.95170.6109;
0.05340.75460.05950.47820.61010.45160.64000.0712;
0.35670.791100.59720.70150.95660.24730.3143;
0.49830.81500.27130.16140.09220.14720.35270.6084;
0.43440.67000.40910.82950.42490.869900.1750;]
gridcolor(p)
運行結果:
自定義函數gridcolor
functiongridcolor(p)
[mn]=size(p);
p=round(1+127*p/max(p(1:end)));
p=flipud(p);
x=0:m-1;
y=0:n-1;
[X,Y]=meshgrid(x,y);
hmap=[ones(127,1)linspace(0.5,0,127)'zeros(127,1)];
hmap=[[111];hmap];
fori=1:m
forj=1:n
subfun(i,j,X(i,j),Y(i,j),hmap(p(i,j),:));
end
end
functionsubfun(m,n,x0,y0,c)
x=[x0x0;x0x0+1;x0+1x0+1];
y=[y0-1y0-1;y0y0-1;y0y0];
z=[11;11;11];
tcolor(1,1,1:3)=c;
tcolor(1,2,1:3)=c;
h=patch(x,y,z,tcolor);
set(h,'EdgeColor','none');
⑵ RGB與XYZ顏色空間的轉換
常用的幾個色域信息表:
關於RGB顏色空間與XYZ顏色空間的轉換,需要事先剝離RGB灰度編碼值的概念。RGB灰度編碼值是一個非線性的灰階數據。而針對RGB與XYZ空間來說,此處所指的都是RGB、XYZ顏色空間的三刺激值,是一個與自然界亮度呈線性的數據。且RGB空間與XYZ空間的轉換是基於線性的三刺激值數據進行的。
進行RGB與XYZ空間的轉換,需要知道,RGB空間的三基色在XYZ空間中的色坐標,以及白點分別在RGB、XYZ的三刺激值
RGB三基色在RGB顏色空間中的配色單元分別為 , , ;色坐標分別為 , , 。
RGB三基色在XYZ顏色空間中的色坐標分別為 , , ,其在XYZ顏色空間中的三刺激值分別為
XYZ三基色在XYZ顏色空間中的配色單元分別為 , , 。色坐標分別為 , , 。
任意一個顏色P在RGB顏色空間的三刺激值為 ,在XYZ顏色空間中的三刺激值為 。則有:
則有:
上圖矩陣,即為RGB顏色空間三刺激值與XYZ顏色空間三刺激值之間的轉換矩陣。其中RGB三基色在XYZ顏色空間的三刺激值已知。只需要得到 , , 的比例關系即可得到轉換矩陣。
已知,白點W在RGB顏色空間中的三刺激值分別為 ,在XYZ顏色空間的色坐標分別為 ,三刺激值分別為
設 ,帶入上式,則有
由此可得 , , 的比例關系,則可得RGB與XYZ的轉換矩陣。
BT2020、BT709、DCI-P3與XYZ的轉換矩陣分別如下:
⑶ matlab,如何將三幅灰度圖像合並為一張彩圖
1) HSV值與RGB顏色空間的相互轉換hsv2rgb( ) rgb2hsv( )
RGBMAP=hsv2rgb(HSVMAP) 其功能是:將一個HSV顏色圖轉換為RGB顏色圖。輸入矩陣輸入矩陣輸入矩陣輸入矩陣HSVMAP中的三列分別表示:色度、飽和度和純度值;輸出矩陣輸出矩陣輸出矩陣輸出矩陣RGBMAP各列分別表示紅、綠、藍的亮度。矩陣元素在區間 [0,1]。
⑷ MATLAB彩色空間轉換
可以用rgb2hsv函數來轉換例如:
t=imread('a.bmp');
hv=rgb2hsv(a);
imshow(hv);
可以通過下面的程序看一幅圖的HSV三個通道
RGB=reshape(ones(64,1)*reshape(jet(64),1.192)[64,64,3]);%調整顏色條的尺寸,將細長變長方形
HVS=rgh2hsv(RGB);%將RGB轉換為HSV,這條自己改成你所使用的圖
H=HSV(:,:,1);%提取64×64×3維矩陣中的64×64×1矩陣
S=HSV(:,:,2););%提取64×64×3維矩陣中的64×64×2矩陣
V=HSV(:,:,3););%提取64×64×3維矩陣中的64×64×3矩陣
subplot(2,2,1);imshow(H)%顯示為2×2圖中的圖1
subplot(2,2,2);imshow(S)
subplot(2,2,3);imshow(V)
subplot(2,2,4);imshow(RGB)
⑸ matlab如何將二維數組轉換為彩色圖像(32位無符號整型的二維數組)
這種情況下,你需要有一個colormap,即顏色表,所得到的彩色圖像是偽彩色圖像。
比如(請使用附件中的sample.mat):
clc;clear;closeall;
loadsample; %其中X是uint32矩陣,map是一個顏色表
figure,imshow(X),title('直接顯示');
figure,imshow(X,[]),title('歸一化顯示為灰度圖');
figure,imshow(X,map),title('使用map顯示為偽彩色圖');
figure,imshow(X,colormap('summer')),title('使用MATLAB內置的顏色表'); %colormap使用請查看幫助
⑹ 如何用matlab將矩陣中的數字變顏色
matlab讀取之後是一個RGB三原色組成的三維矩陣,現在需要將圖中黑、綠、黃、紅(圖上有兩種紅色需要視作一種)四種顏色的像素點分別以0,0.01,1和2來表示,希望得到像素點的二維矩陣,維數等於解析度,求具體實現的代碼
望採納
⑺ 顏色的空間變換是指
看到好文章,想保存怎麼辦!下載APP
顏色空間轉換(一)
最初九月雪
2014-12-10分享收藏
顏色空間轉換
不同彩色空間之間的轉換。
1,CMY/CMYK顏色空間
青、品紅、黃(CMY)(Cyan、Magenta、Yellow)彩色模型是彩色圖象印刷行業使用的彩色空間,在彩色立方體中它們是紅、綠、藍的補色,稱為減色基,而紅、綠、藍稱為加色基。在CMY模型中,顏色是從白光中減去一定成分得到的。CMY坐標可以從RGB模型中得到:
C = 1 – R
M = 1 – G
Y = 1 – B
由於在印刷時CMY模型不可能產生真正的黑色,因此在印刷業中實際上使用的是CMYK彩色模型,K為第四種顏色,表示黑色(black ink):從CMY 到CMYK的轉換:
K := min(C,M,Y)
C := C – K
M := M – K
Y := Y - K
[cpp] view plain
//RGB轉換為CMY
void rtRGB2CMY(RtScalar rgb, RtScalar& cmy)
{
cmy.val[0] = 255 - rgb.val[0];
cmy.val[1] = 255 - rgb.val[1];
cmy.val[2] = 255 - rgb.val[2];
}
//CMY轉換為RGB
void rtCMY2RGB(RtScalar cmy, RtScalar& rgb)
{
rgb.val[0] = 255 - cmy.val[0];
rgb.val[1] = 255 - cmy.val[1];
rgb.val[2] = 255 - cmy.val[2];
}
//CMY轉換為CMYK
void rtCMY2CMYK(RtScalar cmy, RtScalar& cmyk)
{
unsigned char temp = 0;
temp = min(min(cmy.val[0], cmy.val[1]), cmy.val[2]);
if (temp == 255 )
{
cmyk = rtScalar(0, 0, 0, 0);
}
else
{
cmyk.val[0] = cmy.val[0] - temp;
cmyk.val[1] = cmy.val[1] - temp;
cmyk.val[2] = cmy.val[2] - temp;
}
cmyk.val[3] = temp;
}
//CMYK轉換為CMY
void rtCMYK2CMY(RtScalar cmyk, RtScalar& cmy)
{
cmy.val[0] = cmyk.val[0] + cmyk.val[3];
cmy.val[1] = cmyk.val[1] + cmyk.val[3];
cmy.val[2] = cmyk.val[2] + cmyk.val[3];
}
2,HSI顏色空間
HSI色彩空間是從人的視覺系統出發,用色調(Hue)、色飽和度(Saturation或Chroma)和亮度 (Intensity或Brightness)來描述色彩。HSI色彩空間可以用一個圓錐空間模型來描述。用這種 描述HIS色彩空間的圓錐模型相當復雜,但確能把色調、亮度和色飽和度的變化情形表現得很清楚。 通常把色調和飽和度通稱為色度,用來表示顏色的類別與深淺程度。由於人的視覺對亮度的敏感 程度遠強於對顏色濃淡的敏感程度,為了便於色彩處理和識別,人的視覺系統經常採用HSI色彩空間, 它比RGB色彩空間更符合人的視覺特性。在圖像處理和計算機視覺中大量演算法都可在HSI色彩空間中 方便地使用,它們可以分開處理而且是相互獨立的。因此,在HSI色彩空間可以大大簡化圖像分析 和處理的工作量。HSI色彩空間和RGB色彩空間只是同一物理量的不同表示法,因而它們之間存在著 轉換關系。
HSI 色彩模型是從人的視覺系統出發,用 H 代表色相 (Hue)、S 代表飽和度 (Saturation) 和 I 代表亮度 (Intensity) 來描述色彩。飽和度與顏色的白光光量剛好成反比,它可以說是一個顏色鮮明與否的指標。因此如果我們在顯示器上使用 HIS 模型來處理圖像,將能得到較為逼真的效果。
色相 (Hue):指物體傳導或反射的波長。更常見的是以顏色如紅色,橘色或綠色來辨識,取 0 到 360 度的數值來衡量。
飽和度 (Saturation):又稱色度,是指色彩的強度或純度。飽和度代表灰色與色調的比例,並以 0% (灰色) 到 100% (完全飽和) 來衡量。
亮度 (Intensity):是指顏色的相對明暗度,通常以 0% (黑色) 到 100% (白色) 的百分比來衡量。
[cpp] view plain
//RGB轉換為HSI
void rtRGB2HSI(RtScalar rgb, RtScalar& hsi)
{
double maxv = 0, minv = 0, angle = 0;
RtScalar temp;
temp.val[0] = rgb.val[0] / 255.0;
temp.val[1] = rgb.val[1] / 255.0;
temp.val[2] = rgb.val[2] / 255.0;
maxv = max(max(temp.val[0], temp.val[1]), temp.val[2]);
minv = min(min(temp.val[0], temp.val[1]), temp.val[2]);
hsi.val[2] = (temp.val[0] + temp.val[1] + temp.val[2]) / 3.0;
hsi.val[1] = 1.0 - minv/hsi.val[2];
angle = (temp.val[0] + temp.val[0] - temp.val[1] - temp.val[2]) / 2.0 * sqrt((temp.val[0] - temp.val[1])*(temp.val[0] - temp.val[1]) + (temp.val[0] - temp.val[2])*(temp.val[1] - temp.val[2]));
if (temp.val[2] <= temp.val[1])
hsi.val[0] = angle / PI * 180.0;
else
hsi.val[0] = (2 * PI - angle)/PI * 180.0;
}
//HSI轉換為RGB
void rtHSI2RGB(RtScalar hsi, RtScalar& rgb)
{
int flag = 0;
double t1 = 0, t2 = 0, tv1 = 0, tv2 = 0, tv3 = 0;
RtScalar temp;
temp = hsi;
temp.val[0] = hsi.val[0] * PI / 180.0;
t1 = 2.0 * PI / 3.0;
t2 = 2.0 * t1;
if (temp.val[0] >= t1 && temp.val[0] < t2)
{
flag = 1;
temp.val[0] -= t1;
}
if (temp.val[0] >= t2)
{
flag = 2;
temp.val[0] -= t2;
}
tv1 = (temp.val[2] * (1 - temp.val[1])) * 255.0;
tv2 = (temp.val[2] * (1 + temp.val[1] * cos(temp.val[0]) / cos(PI / 3 - temp.val[0]))) * 255.0;
tv3 = (3.0 * temp.val[2] - tv1 - tv2) * 255.0;
switch (flag)
{
case 0:
rgb = rtScalar(tv2, tv3, tv1, 0);
break;
case 1:
rgb = rtScalar(tv1, tv2, tv3, 0);
break;
case 2:
rgb = rtScalar(tv3, tv1, tv2, 0);
break;
}
}
3,YUV顏色空間
在現代彩色電視系統中,通常採用三管彩色攝像機或彩色CCD(點耦合器件)攝像機,它把攝得的彩色圖像 信號,經分色、分別放大校正得到RGB,再經過矩陣變換電路得到亮度信號Y和兩個色差信號R-Y、B-Y, 最後發送端將亮度和色差三個信號分別進行編碼,用同一信道發送出去。這就是我們常用的YUV色彩空間。 採用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V分量, 那麼這樣表示的圖就是黑白灰度圖。彩色電視採用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機 的兼容問題,使黑白電視機也能接收彩色信號。根據美國國家電視制式委員會,NTSC制式的標准,當白光的 亮度用Y來表示時,它和紅、綠、藍三色光的關系可用如下式的方程描述:Y=0.3R+0.59G+0.11B 這就是常用 的亮度公式。色差U、V是由B-Y、R-Y按不同比例壓縮而成的。如果要由YUV空間轉化成RGB空間,只要進行 相反的逆運算即可。與YUV色彩空間類似的還有Lab色彩空間,它也是用亮度和色差來描述色彩分量,其中L為 亮度、a和b分別為各色差分量。
YUV與RGB相互轉換的公式如下(RGB取值范圍均為0-255):
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
[cpp] view plain
// RGB轉換為YUV
void rtRGB2YUV(RtScalar rgb, RtScalar& yuv)
{
yuv.val[0] = 0.299*rgb.val[0] + 0.587*rgb.val[1] + 0.114*rgb.val[2]; // y
yuv.val[1] = -0.147*rgb.val[0] - 0.289*rgb.val[1]+ 0.436*rgb.val[2]; // u
yuv.val[2] = 0.615*rgb.val[0] - 0.515*rgb.val[1] - 0.1*rgb.val[2]; // v
}
// YUV轉換為RGB
void rtYUV2RGB(RtScalar yuv, RtScalar& rgb)
{
rgb.val[0] = yuv.val[0] + 1.14*yuv.val[2]; // r
rgb.val[1] = yuv.val[0] - 0.39*yuv.val[1] - 0.58*yuv.val[2];
rgb.val[2] = yuv.val[0] + 2.03*yuv.val[1];
}
⑻ 求助:將一個給定矩陣按照自己定義的顏色條顯示圖像
沒人交流啊,自己頂一個吧。查到colormapeditor函數,可以自己定義顏色條,先設置顏色條的階數,可通過類似於colormap(hot(64))這樣的命令設置成64階的,再設置顏色條的最小值、最大值,每個值對應的顏色,顏色條兩個顏色節點之間的值和顏色都默認是線性插值的。對於一些特殊的值,可以微調到特定的顏色。這樣,自己定義好一個顏色條之後,保存。下次畫任何圖都可以載入這個顏色條。理論上,問題圓滿解決。可是,實際是,下次再載入次顏色條到任何圖像中時,顏色條的取值范圍會隨著圖像像素值的整體取值范圍改變,但是顏色范圍卻不會改變,這就使得顏色映射完全不對了。這是為什麼呢正在痛苦的解決之中 查看原帖>>