1.MATLAB图像处理基础知识

更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013

在MATLAB中,基本数据结构为数列,大部分图像也是以数列的方式存储的,例如,包含1024列768行的彩色图像,在MATLAB中被存储为1024X768的矩阵;其中,矩阵的值为色彩值。这样就把图像变成了数列了,MATLAB就可以使用数学函数对图像进行处理了。

更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013

1.MATLAB图像表达方式

在MATLAB中,图像可以以两种方式表达,分别为像素索引和空间位置。

(1) 像素索引

     像素索引是表达图像最方便的方法。在使用像素索引时,图像被视为离散的单元,按照空间顺序从上网下,从左往右排列。像素索引值为正整数。

    在使用像素索引时,像素值与索引有一一对应的关系,例如,位于第3行第3列的像素值存储在矩阵元素(3,3)中,可以使用MATLAB提供的函数进行访问。例如,使用命令A(3,3)可以获取第3行第3列的像素值,还可以使用命令A(3,3,:)获取RGB图像中第3行第3的R,G,B值。

(2)空间位置

    空间位置图像表达式方式是将图像与空间位置联系起来的一种表达方式,这种方式与像素索引表达式没有本质区别,但使用空间位置连续值取代像素索引离散值进行。

   例如,包含1024列768行的图像,使用默认的空间位置表示为:X向数据存储位置为[1 1024],Y向数据存储位置为[1  768],但是,由于数据存储位置为座标范围的中点位置,所以使用的位置范围分别为[0.5 1024.5]和[0.5 768.5]。


例1.

A=magic(5);   % 产生一个5X5的矩阵
>> image(A)   % image是用来显示附标图像,即显示的图像上有x,y座标轴的显示,可以看到图像的像素大小,
>>                     %imshow只是显示图像。它们都可以用subplot来定位图像显示的位置,用colormap来定义图像显示用的颜色查找表


2.MATLAB支持的文件格式

    图像格式指的是存储介质上存储图像采用的格式。根据操作系统、图像处理软件的不同,所支持的图像格式可能不同。目前,经常采用的图像格式有BMP,GIF,TIFF,PCX,JPEG,PSD,和WMF等,MATLAB支持大部分的图像格式。

在MATLAB中,可以使用imfinfo函数来获取图像文件信息。虽然更加文件类型的不同,获取的信息也不一样,但对于所有格式的图像文件,都可以获取以下信息:

文件名 、文件格式、文件格式版本、文件修改日期、文件大小、横向像素量、纵向像素量、像素值位数、图像类型如真彩色灰度值等。


例2

imfinfo('C:\Users\Administrator\Desktop\picture\logo.png')   %输入图片的路径

ans =

                  Filename: 'C:\Users\Administrator\Desktop\picture\logo.png'
               FileModDate: '27-Dec-2016 15:04:23'
                  FileSize: 138021
                    Format: 'png'
             FormatVersion: []
                     Width: 400
                    Height: 269
                  BitDepth: 24
                 ColorType: 'truecolor'
           FormatSignature: [137 80 78 71 13 10 26 10]
                  Colormap: []
                 Histogram: []
             InterlaceType: 'none'
              Transparency: 'alpha'
    SimpleTransparencyData: []
           BackgroundColor: []
           RenderingIntent: 'perceptual'
            Chromaticities: [0.3127 0.3290 0.6400 0.3300 0.3000 0.6000 0.1500 0.0600]
                     Gamma: 0.4545
               XResolution: 3780
               YResolution: 3780
            ResolutionUnit: 'meter'
                   XOffset: []
                   YOffset: []
                OffsetUnit: []
           SignificantBits: [8 8 8 8]
              ImageModTime: []
                     Title: []
                    Author: []
               Description: []
                 Copyright: []
              CreationTime: []
                  Software: []
                Disclaimer: []
                   Warning: []
                    Source: []
                   Comment: []
                 OtherText: []


3.MATLAB图像类型

在MATLAB中,图像的类型分为4类,

二进制图

索引图(伪彩色)

灰度图

RGB图(真彩色)


(1)二进制图

在二进制图中,像素的取值为两个离散数值0或1中的一个,0代表黑色,1代表白色


 A=[0 0 1;1 1 0; 0 0 1];
>> imshow(A,'InitialMagnification','fit')          %调整合适的窗口显示A。




(2)索引图

索引图像包括一个数据矩阵X,一个颜色映像矩阵Map。其中Map是一个包含三列、若干行的数据阵列,其中每个元素的值均为[0, 1]之间的双精度浮点型数据。Map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。在MATLAB中,索引图像是从像素值到颜色映射表值的“直接映射”。像素颜色由数据矩阵X作为索引指向矩阵Map进行索引,例如,值1指向矩阵Map中的第一行,值2指向第二行,以此类推。

索引图像的作用就是体积小,方便传输,只需要把索引表传输过去,接收方用对应的RGB颜色表还原就行。



(3)灰度图

灰度图通常由一个unit8、unit16、单精度类型或者双精度类型的数组描述,其实质是一个数据矩阵I,该矩阵中的数据均代表了一定范围内的灰度级,每一个元素与图像的一个像素点相对应,通常0代表黑色,1、255或65635(为数据矩阵的取值范围上限)代表白色。


(4)RGB图

RGB图像又称为真彩图像,它使用R、G、B 3个分量标识一个像素的颜色,R、G、B分别代表红、绿、蓝3种不同的基础颜色,通过3基色可以合成出任意颜色。所以对一个尺寸nxm的彩色图像来说,MATLAB中则存储为一个nxmx3 的多维数据数组,其中数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。图形文件格式把RGB图像存储为24位的图像,红、绿、蓝分量分别占用8位,因而理论上可以有2^24种颜色。


4.   MATLAB图像类型转换

在一些图像操作中,需要对图像的类型进行变换。例如,对一幅索引彩色图进行滤波,首先应该将其转换成RGB图像,此时,对图像使用滤波器时,MATLAB将对图像中的颜色进行滤波,如果不把索引图像进行转换,MATLAB则对图像调色板的序号进行滤波。

下面对MATLAB图像处理中常用的一些类型转换函数进行介绍

(1)灰度图转换成索引图

     使用  gray2ind  函数可以将灰度图转化成索引图,其语法格式

 [X,map]=gray2ind(I,n): 根据指定的灰度级数n和颜色图map,将灰度图像I转换成索引图像X,n的默认值为64.

例:

A=imread('C:\Users\Administrator\Desktop\picture\MATLAB图像处理\1.4.jpg');
subplot(2,2,1);
imshow(A);
title('原图(RGB图)');
>> I=rgb2gray(A); %RGB图转化为灰度图
>> subplot(2,2,2);
>> imshow(I);
>> title('灰度图');
>> [X,map]=gray2ind(I); %灰度图转化为索引图
>> subplot(2,2,3);
>> imshow(X);
>> title('灰度图转化为索引图的X矩阵');
>> subplot(2,2,4);
>> imshow(map);
>> title('灰度图转化为索引图的调色板图map');



(2)索引图转换为灰度图

     使用  ind2gray  函数可以将索引图转换为灰度图,语法格式为

  I=ind2gray(X,map):将具有调色板矩阵的索引图转换成灰度图,丢弃图像的色彩和饱和度,仅保留了图像的亮度信息。

  该指令的输入图像可以是double或int8类型,输出图像为double类型

例:

A=imread('C:\Users\Administrator\Desktop\picture\MATLAB图像处理\1.4.jpg');
>> subplot(2,2,1);
>> imshow(A);
>> title('原图(RGB图)');
>> [X,map]=rgb2ind(A,256);%RGB图转化为索引图,map中至少包含256种颜色
>> subplot(2,2,2);
>> imshow(X);
>> title('RGB转化为索引图中的X矩阵');
>> subplot(2,2,3);
>> imshow(map);
>> title('RGB转化为索引图中的调色板图map');
>> I=ind2gray(X,map);
>> subplot(2,2,4);
>> imshow(I);
>> title('索引图转换为灰度图');





(3)RGB图转换为灰度图

使用   rgb2gray   函数可以将一幅RGB图转换成灰度图,语法格式为

 I=rgb2gray(RGB):将RGB图转换成灰度图I。

(4)RGB图转化为索引图

    使用rgb2ind函数可以将RGB图转化成索引图,可采用的方法包括直接转化法(已被放弃的用法,新版MATLAB已不支持)、均值量化、最小量化、颜色图近似。

 [X,map]=rgb2ind(RGB):直接将RGB图像转化为具有调色板图map的矩阵X(以被弃用);

 [X,map]=rgb2ind(RGB,tol):用均值量化的方法将RGB图像转化为索引图像X,tol的范围为0.0--1.0;

 [X,map]=rgb2ind(RGB,n):使用最小方差量化方法将RGB图像转化为索引图像,map中包含至少n个颜色。

  X=rgb2ind(RGB,map):通过将RGB图中的颜色与调色板图map中最相近的颜色匹配,将RGB转化为具有map颜色的索引。

(5)索引图转换为RGB图

   使用 ind2RGB  函数可以将索引图转化成RGB图像,语法格式

  RGB=ind2rgb(X,map):将矩阵X及相应的调色板图map转换成真彩图像RGB。


例:

A=imread('C:\Users\Administrator\Desktop\picture\MATLAB图像处理\1.4.jpg');
subplot(2,2,1);
imshow(A);
title('原图(RGB图)');
[X,map]=rgb2ind(A,256);%RGB图转化为索引图,map中至少包含256种颜色
subplot(2,2,2);
imshow(X);
title('RGB转化为索引图中的X矩阵');
subplot(2,2,3);
imshow(map);
title('RGB转化为索引图中的调色板图map');
>> RGB=ind2rgb(X,map); %索引图转换为RGB图
>> subplot(2,2,4);
>> imshow(RGB);
>> title('索引图转换为RGB图');





(6)将矩阵转换成灰度图像

使用 mat2gray 函数可以将一个数据矩阵转换为一幅灰度图像,语法格式

 I=mat2gray(X,[Xmin,Xmax]):按指定的取值区间[Xmin,Xmax]将数据矩阵X转化为图像I,Xmin对应灰度0,Xmax对应灰度1。如果不指定区间[Xmin,Xmax]时,MATLAB则自动将X矩阵中最小设为Xmin,最大设为Xmax。


例:

A=magic(10);
>> I=mat2gray(A);
>> imshow(I,'InitialMagnification','fit')        %调整合适的窗口显示A。


5.MATLAB图像数据 读/写

(1).读数据

    在MATLAB中,可以使用 imread 函数读取程序中支持的文件,该命令的相应格式如下:

    A = imread(filename, fmt)
    [X, map] = imread(...)
    [...] = imread(filename)
    [...] = imread(URL,...)
    [...] = imread(...,Param1,Val1,Param2,Val2...)


  在MATLAB中,可用 load 指令读入 .mat 类型的数据

关于 imread 和 load

load是导入文件,一般从mat文件中
imread是图像处理工具箱的库函数,处理图像比较方便

(2)写数据

     在MATLAB中,可以使用 imwrite 命令将MATLAB工作区中的图像数据写入到支持格式的图像文件中。

  例1

  A=imread(‘..........’);

  imwrite(A ,' ......... ');     % 省略号为读和写的路径

更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013


发布了91 篇原创文章 · 获赞 320 · 访问量 53万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章