Advertisement

病理图像处理个人手札(二)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和其他两分量的差值去与阈值比较的。而得出来的图像就是我们非常期望的提取结果了(最后一个长方形由于其具有的蓝色分量比较大,故也被提取了出来,所以阈值的选取还是蛮重要的)。

全部评论 (0)

还没有任何评论哟~