Matlab学习日记之映像

映像

  映像读取

     I = imread('pout.tif');  读取文件名为pout.tif的映像,并储存到变量I中
     imshow(I);      显示该映像

    imageinfo('pout.tif')    读取该映像的文件信息

    imtool('pout.tif')    获取映像工具,可以读取每块像素点上的值(黑白映像为0和1,0代表黑色,1代表白色。灰度映像为0-255,值越大图像越白。

                三色映像中的每个颜色也是0-255)

  

 

 

  映像操作

     I=imread('rice.png');

    J=immultiply(I,1.5);  将I映像中的各像素点值乘1.5倍(使图像亮度提高)

     

 

 

     I=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J);    imadd(I,J)将映像I和映像J叠加在一起(两个映像的像素点的值也会叠加)
     subplot(1,3,1);imshow(I);

    subplot(1,3,2);imshow(J);

    subplot(1,3,3);imshow(K);

 

    imhist(I)  显示映像I像素值的分布直方图

    

    I=imread('pout.tif');J=histeq(I);    histeq(I)扩大映像I像素点值的分布
      subplot(1,4,1);imhist(I);

    subplot(1,4,2);imshow(I);

    subplot(1,4,3);imhist(J);

    subplot(1,4,4);imshow(J);

 

    subplot(1,2,1);imshow(I);J=imrotate(I,35,'bilinear')    将映像I旋转35度存储到J中

    subplot(1,2,2);imshow(J)    

    

 

    imwrite(I,'rice2.jpg')    将映像I以名字为rice2类型为JPG的格式写入当前文件夹中

    

    灰度映像转为黑白映像

    I=imread('rice.png');
    level=graythresh(I);    获取映像I的灰度门限值(即区分黑于白的中间值)
    bw=im2bw(I,level);     利用im2bw(I,level)将映像I按照门限值level来转换为黑白映像(即小于门限值的像素点全改写为0,大于门限值的像素点

                  改写为255,达到只剩黑白颜色的映像)
    subplot(1,2,1);imshow(I);

    subplot(1,2,2);imshow(bw);

  

 

 

    %转换为黑白映像后会发现并不是十分的完美,有些像素点并没转换成功,仔细发现原来是因为原映像中存在亮度有差异导致的结果,

    所以需要对原映像先做一个处理

    BG=imopen(I,strel('disk',15))    利用imopen()函数获取映像I的背景图

    I2=imsubtract(I,BG);         将映像I的所有的像素点的值减去背景图像素点的值
    subplot(1,3,1);imshow(I);
    subplot(1,3,2);imshow(BG)

    subplot(1,3,3);imshow(I2);

    

 

    %这是就发现映像I2的亮度就比较均匀,再使用之前的方式对映像I2进行转为即可

    level2=graythresh(I2);
    bw2=im2bw(I2,level2)
    subplot(1,2,1);imshow(bw);

    subplot(1,2,2);imshow(bw2);

 

    %计算‘rice.png’中米粒的个数

    I=imread('rice.png');

    BG=imopen(I,strel('disk',15))

    I2=imsubtract(I,BG);

    level2=graythresh(I2);
    bw2=im2bw(I2,level2)

       [labeled,numObjects]=bwlabel(BW,8);    

    将映像像素点组成的矩阵复制给labeled,依次扫描矩阵,若遇到的是米粒采用深度优先(个人猜测)的方法将该米粒所覆盖的像素点填充1。

    继续扫矩阵遇到米粒描填充2,依次类推。扫描方式从上到下,从左到右。

  

 

     %获取到了labeled对米粒的操作就更方便了

    RGB_label=label2rgb(labeled);imshow(RGB_label);  将不同的米粒以不同颜色渲染

    

 

   

    %获取映像中某一个米粒的信息(根据labeled中的索引来确定是第几个),信息包括:米粒的面积、中心坐标、对角边界坐标。

    graindata=regionprops(labeled,'basic');

    graindata(51)    显示对51个米粒的信息

    

 

 

 

学习资料源于:https://www.bilibili.com/video/BV1GJ41137UH

 

posted @ 2021-04-07 16:26  bird7  阅读(138)  评论(0编辑  收藏  举报