一、图像类型的转换
转换类型 转换函数 用 处 ① 真彩图像→索引图像 X=dither(RGB,map) 节省存储空间,假彩色 ② 索引图像→真彩图像 RGB=ind2rgb(X,map) 便于图像处理 ③ 真彩图像→灰度图像 I=rgb2gray(RGB) 得到亮度分布 ④ 真彩图像→二值图像 BW=im2bw(RGB,level) 阈值处理,筛选 ⑤ 索引图像→灰度图像 I=ind2gray(X,map) Newmap=rgb2gray(map) 得到亮度分布 ⑥ 灰度图像→索引图像 [X,map]=gray2ind(I,n), X=grayslice(I,n) X=grayslice(I,v) 伪彩色处理 ⑦ 灰度图像→二值图像 BW=dither(I) BW=im2bw(I,level) 阈值处理,筛选 ⑧ 索引图像→二值图像 BW=im2bw(X,map,level) 阈值处理,筛选 ⑨ 数据矩阵→灰度图像 I=mat2gray(A,[max,min]) I=mat2gray(A) 产生图像 1、真彩图像→索引图像 【格式】X=dither(RGB,map) 【说明】按指定的颜色表map通过颜色抖动实现转换 【输入】RGB可以是double或uint8类型 【输出】X超过256色则为double类型,否则输出为uint8型 【例】 CLF RGB=imread('flowers.tif'); map=jet(256); X=dither(RGB,map); subplot(1,2,1);subimage(RGB);title('真彩图') subplot(1,2,2);subimage(X,map);title('索引图') 2、索引图像→真彩图像 【格式】RGB=ind2rgb(X,map) 【输入】X可以是double或uint8类型 【输出】RGB为double类型 【例】 CLF,load trees; RGB=ind2rgb(X,map); subplot(1,2,1);subimage(X,map);title('索引图') subplot(1,2,2);subimage(RGB);title('真彩图') 【格式】I=rgb2gray(RGB) 【输入】RGB可以是double或uint8类型 【输出】I类型同RGB 【例】 CLF,RGB=imread('flowers.tif'); I=rgb2gray(RGB); subplot(1,2,1);subimage(RGB);title('真彩图') subplot(1,2,2);subimage(I);title('灰度图') 【格式】BW=im2bw(RGB,level) 【说明】设置亮度阈值level,将真彩图像转换为二值图像 【输入】RGB可以是double或uint8类型 【输出】BW为uint8型 【例】 CLF,RGB=imread('flowers.tif'); BW=im2bw(RGB,0.5); subplot(1,2,1);subimage(RGB);title('真彩图') subplot(1,2,2);subimage(BW);title('二值图') 【格式1】I=ind2gray(X,map) 【格式2】Newmap=rgb2gray(map) 【说明】格式2将彩色调色板map转换为灰度调色板Newmap 【输入】X可以是double或uint8类型,map为double类型 【输出】I是double类型,Newmap为double类型 【例】 CLF,load trees; I=ind2gray(X,map); Newmap=rgb2gray(map); subplot(2,2,1);subimage(X,map);title('索引图') subplot(2,2,3);subimage(I);title('格式1灰度图') subplot(2,2,4);subimage(X,Newmap);title('格式2灰度图') 【格式1】1、[X,map]=gray2ind(I,n) 2、X=grayslice(I,n) 3、X=grayslice(I,v) 【说明】格式1:将灰度图像转换为灰度级为n的索引图像X,n的默认值为64; 格式2:将灰度图像I均匀量化为n个等级,然后转换为伪彩色图像X; 格式3:按指定的阈值矢量v(其中每个元素在0和1之间)对图像I进行阈值划分,然后转换成索引图像 【输入】I可以是double类型、uint8类型和uint16类型 【输出】map的行不大于256,则X为uint类型,否则为double类型 【例】 CLF,I=imread('rice.tif'); [X1,map1]=gray2ind(I,16); X2=grayslice(I,8); X3=grayslice(I,255*[0 0.21 0.23 0.26 0.30 0.35 0.6 1.0]'); subplot(2,2,1);subimage(I);title('灰度图') subplot(2,2,2);subimage(X1,map1);title('16灰度级图') subplot(2,2,3);subimage(X2,hot(8));title('均匀量化图') subplot(2,2,4);subimage(X3,jet(8));title('非均匀量化图') 【格式一】BW=dither(I);【格式一】BW=im2bw(I,level) 【说明】格式一用抖动的方式实现转换,格式二用阈值方式转换 【输入】I可以是double类型和uint8类型 【输出】BW为uint8类型 【例】 CLF,I=imread('saturn.tif'); BW1=dither(I); BW2=im2bw(I,0.5); subplot(2,2,1);subimage(I);title('灰度图') subplot(2,2,3);subimage(BW1);title('抖动二值化') subplot(2,2,4);subimage(BW2);title('阈值二值化') 【格式】BW=im2bw(X,map,level) 【输入】X可以是double类型和uint8类型 【输出】BW为uint8类型 【例】 CLF,load trees; BW=im2bw(X,map,0.5); subplot(1,2,1);subimage(X,map);title('索引图') subplot(1,2,2);subimage(BW);title('二值图') 【格式】1、I=mat2gray(A,[max,min]) 2、I=mat2gray(A) 【说明】按指定的取值区间[max,min]将数据矩阵A转换为灰度图像I。如不指定区间,自动取最大区间。 【输入】A为double类型 【输出】I为double类型 【例】 CLF;I=imread('rice.tif'); A=filter2(fspecial('sobel'),I); J=mat2gray(A); subplot(1,2,1);subimage(I);title('原图') subplot(1,2,2);subimage(J);title('转换图') (1) RGB模型 是色光的彩色模式,R代表红色,G代表绿色,B代表蓝色,通常所说的真彩色。 (2) NTSC模型 NTSC模型用于电视信号。其特点是亮度信号与色度信号相分离。一个信号能同时表示彩色图像和黑白图像。他的Y表示亮度,I表示色度,Q表示饱和度。 (3) HSV模型 根据人眼的视觉特性表示的颜色,H表示色调,S表示饱和度,V表示明度。 (4) YCbCr模型 一种彩色模型,Y表示亮度信号,Cb、Cr两个色度分量。 2、彩色转换函数
(1) RGB颜色空间转换到NTSC颜色空间 【格式】YIQMAP=rgb2ntsc(RGBMAP) 【说明】将RGB色表转换为YIQ色表 【输入】RGBMAP为double类型 【输出】YIQMAP为double类型
【格式】YIQ=rgb2ntsc(RGB) 【说明】表示将RGB图像转换为NTSC图像 【输入】RGB为double、uint8或uint16类型 【输出】YIQ为double类型 【例】 CLF,RGB=imread('flowers.tif'); YIQ=rgb2ntsc(RGB); subplot(2,3,1);subimage(RGB);title('RGB图像') subplot(2,3,3);subimage(mat2gray(YIQ));title('NTSC图像') subplot(2,3,4);subimage(mat2gray(YIQ(:,:,1)));title('Y分量') subplot(2,3,5);subimage(mat2gray(YIQ(:,:,2)));title('I分量') subplot(2,3,6);subimage(mat2gray(YIQ(:,:,3)));title('Q分量') (2) NTSC颜色空间转换到RGB颜色 【格式】RGBMAP=ntsc2rgb(YIQMAP) 【说明】将YIQ色表转换为RGB色表 【输入】YIQMAP为double类型 【输出】RGBMAP为double类型
【格式】RGB=ntsc2rgb(YIQ) 【说明】表示将YIQ图像转换为RGB图像 【输入】YIQ为double类型 【输出】RGB为double类型 【例】 CLF,load trees; YIQMAP=rgb2ntsc(map);map1=ntsc2rgb(YIQMAP); YIQMAP=mat2gray(YIQMAP); Ymap=[YIQMAP(:,1),YIQMAP(:,1),YIQMAP(:,1)]; Imap=[YIQMAP(:,2),YIQMAP(:,2),YIQMAP(:,2)]; Qmap=[YIQMAP(:,3),YIQMAP(:,3),YIQMAP(:,3)]; subplot(2,3,1);subimage(X,map); title('原始图像') subplot(2,3,2);subimage(X,YIQMAP);title('转换图像') subplot(2,3,3);subimage(X,map1); title('还原图像') subplot(2,3,4);subimage(X,Ymap); title('NTSC的Y分量') subplot(2,3,5);subimage(X,Imap); title('NTSC的I分量') subplot(2,3,6);subimage(X,Qmap);title('NTSC的Q分量')
(3) rgb2hsv
(4) hsv2rgb
(5) rgb2ycbcr
(6) ycbcr2rgb 三、纹理映射使用imshow命令时,MATLAB通常以二维视图形式显示一幅图像。纹理映射使用WARP命令通过插值的方法将一幅图像映射到一个曲面网格上。格式如下: WARP(X,MAP) -将索引图像显示在缺省表面上 WARP(I,N) -将灰度图像显示在缺省表面上 WARP(BW) -将二值图像显示在缺省表面上 WARP(RGB) -将真彩图像显示在缺省表面上 WARP(z,...) -将图像显示z表面上 WARP(x,y,z,...) -将图像显示(x,y,z)表面上 H = WARP(...) -返回图像的句柄 输入图像的数据格式可以是logical、uint8、uint16或double类型。 【例】 [x,y,z]=cylinder; I=imread('FLOWERS.TIF'); warp(x,y,z,I); 【例】 [X,Y,Z]=ELLIPSOID(0,0,0,1,2,3,50); SURF(X,Y,Z); RGB=IMREAD('FLOWERS.TIF'); WARP(X,Y,Z,RGB); P=PEAKS(50); RGB=IMREAD('greens.jpg'); WARP(P,RGB); |
|
来自: red_stone1 > 《待分类1》