RGB图像,索引图像,灰度图像,二值图像相互转换

%小白从零开始学习图像处理,自己看的不知道理解的是不是正确,在慢慢进步
1.将RGB图像转换为灰度图像
close all
clear all
clc
RGB=imread(‘haixiquan.jpg’); %读取RGB图像
gray=rgb2gray(RGB); %将RGB图像转换为灰度图像
figure;
set(0,‘defaultFigurePosition’,[100,100,1000,500]);%设置显示图像的窗口大小
set(0,‘defaultFigureColor’,[1 0 0]);%设置显示的背景颜色
subplot(121),imshow(RGB),title(‘RGB图像’);
%subplot是图像分割函数,imshow是显示图像函数,title是在图像上面加标题
subplot(122),imshow(gray),title(‘灰度图’);
《RGB图像,索引图像,灰度图像,二值图像相互转换》
首先对各个函数理解一下
1.imread() 就是调入图像
2.rgb2gray() 就是RGB转换为灰度的函数
3.set(0,‘defaultFigurePosition’,[100,100,1000,500]); 设置显示图像的窗口位置大小,100,100 是图形显示在窗口的位置坐标,换一下大小就可以看出来,1000,500是显示figure的大小
4.title 就是图片上标题
5.set(0,‘defaultFigureColor’,[1 0 0]); 设置显示的背景颜色,[0 0 0]显示黑色背景,[1 0 0]显示背景是红色

2.彩色索引表换位灰色索引表
close all
clear all
clc
RGB=imread(‘haixiquan.jpg’); %提取RGB图像
[X,map]=rgb2ind(RGB,0.2); %将RGB图像转变为索引图像,获得map表
newmap=rgb2gray(map); %将彩色的索引表换为灰色索引表
figure;
set(0,‘defaultFigureColor’,[0 0 0]);
subplot(131),imshow(X,map);
subplot(132),imshow(X,newmap);
subplot(133),imshow(RGB);
《RGB图像,索引图像,灰度图像,二值图像相互转换》
所用一些函数的解释
这里解释一下 [X,map]=rgb2ind(RGB,0.2) %RGB转换为索引图像时有常用三种不同的转换方法,最小方差转换、均匀量化转换和颜色近似法转换。

3.RGB图像转换为索引图像
close all
clear all
clc
RGB=imread(‘haixiquan.jpg’);
[X1,map1]=rgb2ind(RGB,64);
[X2,map2]=rgb2ind(RGB,0.2);
map3=colorcube(128);
X3=rgb2ind(RGB,map3);
figure;
set(0,‘defaultFigurePosition’,[100,100,500,500]);
set(0,‘defaultFigurecolor’,[0 0 0]);
subplot(221),imshow(X1,map1),title(‘最小方差’);
subplot(222),imshow(X2,map2),title(‘均匀方差量化’);
subplot(223),imshow(X3,map3),title(‘颜色近似法转换’);
subplot(224),imshow(RGB),title(‘原图’);
《RGB图像,索引图像,灰度图像,二值图像相互转换》
解释一下这个图像转换中遇到的问题
[X1,map1]=rgb2ind(RGB,64) %就是使用最小方差量化将RGB图像转换为索引图像X. MAP最多包含N种颜色。 N必须<= 65536。

[X2,map2] = rgb2ind(RGB,TOL) %使用均匀量化将RGB图像转换为索引图像X. map最多包含(FLOOR(1 / TOL)+1)^ 3种颜色。 TOL必须介于0.0和1.0之间。这里FLOOR=1,当TOL等于0.2时,则表示216种颜色。

map3 = colorcube(128);
X3 = rgb2ind(RGB,map3);
%上面的两行代码则是创建一个指定颜色数目的所以表,然后用这个索引表进行近似显示RGB图。colorcube增强的彩色立方体颜色。colorcube(M)返回一个包含彩色立方体的M-by-3矩阵。 colorcube本身的长度与当前的色彩映射相同。 彩色立方体在RGB色彩空间中包含尽可能多的定期间隔的颜色,同时尝试提供更多的灰色,纯红,纯绿和纯蓝色的步骤。 该多维数据集的算法灵感来自默认的Macintosh系统colortable,对于M = 256,colorcube返回完全相同的颜色。 对于M <8,返回长度为M的灰色斜坡。
%这段全是抄的,我是TM的没看懂,还有那个抖动的原理,算了算了等再学一算时间看看能不能有所理解。
4.灰度图像转换为索引图像
close all
clear all
clc
RGB=imread(‘haixiquan.jpg’);
gray=rgb2gray(RGB);
[X,map]=gray2ind(gray,16); %转换为16中颜色的索引表
figure;
set(0,‘defaultFigureposition’,[200 200 500 500]);
set(0,‘defaultFigurecolor’,[1 0 0]);
subplot(131),imshow(RGB),title(‘RGB图像’);
subplot(132),imshow(gray),title(‘灰度图像’);
subplot(133),imshow(X,map),title(‘索引图像’);
《RGB图像,索引图像,灰度图像,二值图像相互转换》
《RGB图像,索引图像,灰度图像,二值图像相互转换》
5.灰度图像转换为二值图像
close all
clear all
clc
RGB=imread(‘haixiquan.jpg’);
gray=rgb2gray(RGB);
BW1=im2bw(gray,0.4);
BW2=im2bw(gray,0.7);
figure;
set(0,‘defaultFigureposition’,[150 150 500 500]);
set(0,‘defaultFigurecolor’,[1 1 0]);
subplot(221),imshow(RGB),title(‘RGB图像’);
subplot(222),imshow(gray),title(‘灰度图像’);
subplot(223),imshow(BW1),title(‘阈值0.4二值图像’);
subplot(224),imshow(BW2),title(‘阈值0.7二值图像’);
《RGB图像,索引图像,灰度图像,二值图像相互转换》
《RGB图像,索引图像,灰度图像,二值图像相互转换》
《RGB图像,索引图像,灰度图像,二值图像相互转换》
%自己理解的解释
阈值就是灰度图像转换后矩阵里的数例如255转换为double浮点类型1.000
其他的数也发生变化但是再0-1之间,这样和阈值对比,大于阈值为1(白),小于阈值为0(黑)。

6.RGB图像直接转变为二值图像

close all
clear all
clc
RGB=imread(‘haixiquan.jpg’);
BW1=im2bw(RGB,0.3);
BW2=im2bw(RGB,0.7);
figure;
set(0,‘defaultFigureposition’,[150 150 500 500]);
set(0,‘defaultFigurecolor’,[1 1 0]);
subplot(131),imshow(RGB),title(‘RGB图像’);
subplot(132),imshow(BW1),title(‘阈值0.3二值图像’);
subplot(133),imshow(BW2),title(‘阈值0.7二值图像’)
《RGB图像,索引图像,灰度图像,二值图像相互转换》
%总结一下遇到的问题
1.在调用set函数时有关背景颜色显示时候的矩阵是不是[0 0 0]这个是不是就是RGB三原色的那个三位矩阵的意思,感觉是这个意思。
2.有关索引图像那三种转换算法不理解
3.先将RGB图像转换为灰度图像然后再转换为二值图像与RGB直接转换为二值图像有什么区别,有关uint8,double,logical图像转换还是不清楚,慢慢来喽
%后天要考6级了,裸考听力,加油 冲冲冲

    原文作者:芳芳小可爱
    原文地址: https://blog.csdn.net/haixiquan/article/details/110951664
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞