病理图像处理个人手札(二)Matlab入门技能:图像的读入、显示&保存
1.Matlab图像处理入门技能
(1)图像的读入:imread函数
语法:imread(‘filename’)
需注意的是这里的filename是一个含有图像文件全名(名称+图片格式)的字符串哟!一般的我们可以把需要处理的图片放到电脑matlab文件的bin子文件里,这样在调用时就不用在filename里写图片路径了。或者不怕麻烦的可以把图片属性里的存储路径copy出来填写到filename位置也行!
e.g.
f=imread(‘F:\360MoveData\Users\Administrator\Desktop\ADI-ANGRDDNVCINI.png’);
%读入图像
使用size函数我们就可以知道导入的图片的大小
e.g.
[M,N]=size(f);%获取图像大小
(2)图像的显示 :imshow函数
语法1:inshow(f,G)
f是图像,G是灰度,省略时默认为256.
语法2:inshow(f,[low high])
一般的规则是小于或等于low的值都显示为黑色,所有大于或等于high的值显示为白色。当low和high缺省时low自动设置为f的最小值,high自然是设置为f的最大值。
如:inshow(f,[ ])
e.g.
imshow(f,[2 256]);%显示图像
(3)图像的存储:imwrite函数
语法:imwrite(f,‘Filename’)
e.g.
imwrite(f,‘F:\360MoveData\Users\Administrator\Desktop\code基地\dustbin of image\try02.png’)
注意:和上面imread语句一样,要详细到具体文件名,包括图像类型(.jpg等)
2.彩色图像表示方式
彩色图像可以看成RGB三个通道聚合成的图像。一幅RGB图像就是彩色像素的一个M N 3数组,也可以看作一个由三幅灰度图像形成的“堆”,当将其送到彩色监视器的红、绿、蓝输入端时,便形成了一幅彩色图像。下面一张图经典的阐述了以上的概念。

令fR,fG,fB表示三种RGB分量图像,一幅图像就是用cat(级联)操作将三个分量组成起来的彩色图像。
语法:
rgb_image=cat(3,fR,fG,fB)
令rgb_image代表一幅RGB图像,下面命令可提取出三幅分量图像。
fR=rgb_image(:, :, 1);
fG=rgb_image(:, :, 2);
fB=rgb_image(:, :, 3);
实例:
rgb_image=imread('F:\360MoveData\Users\Administrator\Desktop\324231.jpg');
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和其他两分量的差值去与阈值比较的。而得出来的图像就是我们非常期望的提取结果了(最后一个长方形由于其具有的蓝色分量比较大,故也被提取了出来,所以阈值的选取还是蛮重要的)。
