1. 程式人生 > >1.MATLAB影象處理基礎知識

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