上一期医学图像处理——线型滤波
“之前介绍的都是灰度图像,是没有RGB概念的,今天小白的朋友给大家带来了一起我们肉眼见到的彩色图像的处理方式。”
基础知识
一幅RGB图像就是彩色像素的一个M*N*3数组,也可以看作一个由三幅灰度图像形成的“堆”,当将其送到彩色监视器的红、绿、蓝输入端时,便形成了一幅彩色图像。下面一张图经典的阐述了以上的概念。
表示方法
令fR,fG,fB表示三种RGB分量图像,一幅图像就是用cat(级联)操作将三个分量组成起来的彩色图像。
令rgb_image代表一幅RGB图像,下面命令可提取出三幅分量图像。
实战演练
以下我们就用一张五彩斑斓的图来试一试;
rgb_image=imread('C:\Users\xptyxx\Desktop\royins.png');
fR=rgb_image(:,:,1);
fG=rgb_image(:,:,2);
fB=rgb_image(:,:,3);
figure(1)
subplot(2,2,1);imshow(rgb_image);title('原图像');
subplot(2,2,2);imshow(fR);title('提取红色分量后');
subplot(2,2,3);imshow(fG);title('提取绿色分量后');
subplot(2,2,4);imshow(fB);title('提取蓝色分量后');
结果如下:
从图中可以看到,由于我们只显示了红或绿或蓝这样的单通道,所以提取出的读是灰度图。而凡是对应于正红、绿、蓝的地方都被替代为了白色的灰度值。
但是上面这种RGB通道分量的提取的效果,并不是我想要的结果。我们想要的结果是有红绿蓝色的分量。故要进行RGB阈值分割,阈值分割的基本思想是确定一个阈值,然后把每个像素点的灰度值和阈值相比较,根据比较的结果把该像素划分为两类——前景与背景。
代码略长,在这里只展示提取红色分量的,绿色与蓝色套路相同:
rgb_image=imread('C:\Users\xptyxx\Desktop\RGB.png');
[m,n,d]=size(rgb_image);
level2=70;%设置阈值
%提取红色分量,不满足阈值要求的置为白色
for i=1:m
for j=1:n
if((rgb_image(i,j,1)-rgb_image(i,j,2)>level2)&&(rgb_image(i,j,1)-rgb_image(i,j,3)>level2))
r(i,j,1)=rgb_image(i,j,1); %保留满足条件的像素点
r(i,j,2)=rgb_image(i,j,2);
r(i,j,3)=rgb_image(i,j,3);
else
r(i,j,1)=255; %(白色的rgb值均为255)
r(i,j,2)=255;
r(i,j,3)=255;
end
end
end
figure;
subplot(2,2,1);imshow(rgb_image);title('原图像');
subplot(2,2,2);imshow(r);title('提取红色分量后');
从代码中我们可以看到我们其实使用了R和其他两分量的差值去与阈值比较的。而得出来的图像就是我们非常期望的提取结果了(最后一个长方形由于其具有的蓝色分量比较大,故也被提取了出来,所以阈值的选取还是蛮重要的)。
今天的介绍就到这里啦!
内容很简单,但自己尝试一下会觉得很有意思哟,快动手试试吧!