Matlab 图像处理基本操作

来源:互联网 发布:轰趴馆 知乎 编辑:程序博客网 时间:2024/05/01 03:29

一、图像基本操作

1.读取图像并显示

>> clear;closeall        %清空Matlab工作平台所有变量(准备工作)
>>I=imread('pout.tif');  %该图像是Matlab图形工具箱中自带的图像(\toolbox\images\imdemos)
>> imshow(I)

Matlab <wbr>图像处理基本操作

2.检查内存(数组)中的图像

>>whos

Name     Size                   Bytes   Class

      291x240                  69840  uint8 array

Grand total is 69840 elementsusing 69840 bytes

表示该图像采用8位存储方式并占用了69840B的存储空间。


3.实现图像直方图均衡化:

>>figure,imhist(I)   % 在新图中显示图像I的直方图

Matlab <wbr>图像处理基本操作
>>I2=histeq(I);  %均衡化以后的图像存在I2数组中(图像灰度值扩展到整个灰度范围,对比度提高)
>>figure,imshow(I2)  % 显示均衡化后的图像
>>figure,imhist(I2)   %显示均衡后的灰度值分布情况

8位图像取值范围:[0,255],16位图像取值范围:[0,655351],双精度图像取值范围:[0,1]

Matlab <wbr>图像处理基本操作Matlab <wbr>图像处理基本操作

 

4.保存图像:

>>imwrite(I2,'pout2.png');   % 将图像由原先的tif格式另存为png格式

Matlab <wbr>图像处理基本操作

 

5.检查新生成文件的信息:

>>imfinfo('pout2.png')    % 观察保存图像的文件信息

ans =

                 Filename:'pout2.png'       %文件名
              FileModDate: '11-Apr-200921:55:35'   % 文件修改日期
                 FileSize:36938      % 文件大小
                   Format:'png'       文件格式
            FormatVersion:[]         格式
                    Width:240       % 文件宽度
                   Height:291       % 文件高度
                 BitDepth:8         % 文件位深度
                ColorType: 'grayscale'  % 颜色类型

                      ……

二、图像处理Matlab的应用:

实例:消除rice.png图像中亮度不一致的背景,并使用阈值将修改后的图像转换为二值图像,使用成员标记返回图像中对象的个数以及统计特性。按照如下步骤进行:

1.读取和显示图像

>> clear;closeall
>> I=imread('rice.png');
>> imshow(I)

Matlab <wbr>图像处理基本操作

 

2.估计图像背景:

图像中心位置背景亮度强于其他部分亮度,用imopen函数和一个半径为15的圆盘结构元素对输入的图像I进行形态学开操作,去掉那些不完全包括在圆盘中的对象,从而实现对背景亮度的估计。

>> clear;closeall
>> I=imread('rice.png');
>> imshow(I)
>>background=imopen(I,strel('disk',15));
>> imshow(background)
>>figure,surf(double(background(1:8:end,1:8:end))),zlim([0,255]);
>>set(gca,'ydir','reverse');

Matlab <wbr>图像处理基本操作Matlab <wbr>图像处理基本操作

显示了背景图(左)和背景表面图(右)

 

3.从原始图像中减去背景图像(原始图像I减去背景图像得到背景较为一致的图像):

>>I2=imsubtract(I,background);
>> figure,imshow(I2)

Matlab <wbr>图像处理基本操作

 

4.调节图像的对比度(图像较暗,可用imadjust函数命令来调节图像的对比度)

>>I3=imadjust(I2,stretchlim(I2),[0 1]);
>> figure,imshow(I3);

Matlab <wbr>图像处理基本操作

 

5.使用阈值操作将图像转换为二进制(二值)图像(bw),调用whos命令查看图像的存储信息.

>>level=graythresh(I3);   %图像灰度处理
>>bw=im2bw(I3,level);    % 图像二值化处理
>>figure,imshow(bw)      % 显示处理后的图片

>> whos
 Name            Size                   Bytes  Class

             256x256                  65536  uint8 array
 I2            256x256                  65536  uint8 array
 I3            256x256                  65536  uint8 array
 background    256x256                  65536  uint8 array
 bw            256x256                  65536  logical array
 level           1x1                         double array

Grand total is 327681 elementsusing 327688 bytes

Matlab <wbr>图像处理基本操作

 

6.检查图像中对象个数(bwlabel函数表示了二值图像中的所有相关成分并返回在图像中找到的对象个数)

>>[labeled,numObjects]=bwlabel(bw,4);

>> numObjects  

numObjects =

  101

表示图像中的米粒对象个数是101.

 

7.检查标记矩阵:(imcrop命令进行交互式操作,图像内拉出较小矩形并显示已标记的对象和部分背景内的像素)

>>grain=imcrop(labeled)

grain =

         42   42   42   42   42   42   42    0
         42   42   42   42   42   42   42    42
         42   42   42   42   42   42   42    42
         42   42   42   42   42   42   42    42
         42   42   42   42   42   42   42    42
         42   42   42   42   42   42   42    42
      42   42   42   42   42   42   42   42    42
      42   42   42   42   42   42   42   42   42


8.观察标记矩阵(用label2rgb将其显示为一副伪彩色的索引图像):

>>RGB_label=label2rgb(labeled,@spring,'c','shuffle');
>> imshow(RGB_label);

Matlab <wbr>图像处理基本操作

 

9.测量图像对象或区域的属性(Regionprops,返回一个结构数据)

>>graindata=regionprops(labeled,'basic')

graindata =

101x1 struct array withfields:
    Area
   Centroid
   BoundingBox
>>graindata(40).Area   %显示矩阵中第40个元素的属性

ans =

  197

>>graindata(40).BoundingBox,graindata(40).Centroid   % 寻找最近的边缘和中心点

ans =

  82.5000  59.5000  24.0000   20.0000


ans =

  95.4213   70.4924

>>allgrains=[graindata.Area];    % 创建一个新的向量allgrains,其包含每个米粒的范围
>> whos allgrains
 Name           Size                   Bytes  Class

 allgrains      1x101                    808  double array

Grand total is 101 elementsusing 808 bytes

>>allgrains(51)    % 相当于整个矩阵的索引为51的属性是多少,可见与原来得到的结果相同

ans =

  140

>>max(allgrains)   % 获取最大的米粒大小

ans =

   404
>>biggrain=find(allgrains==404)   % 使用find命令返回这个最大尺寸米粒的标记号

biggrain =

   59

>>mean(allgrains)   %获取米粒的平均大小

ans =

 175.0396

 

9.绘制包含30个柱的直方图来说明米粒大小的分布情况

>>hist(allgrains,30)

Matlab <wbr>图像处理基本操作

     (米粒大小分布柱状图)

 

 

相关链接:

 Matlab 图像处理相关函数命令大全

0 0
原创粉丝点击