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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章