當前位置:
首頁 > 最新 > 岡薩雷斯-數字圖像處理

岡薩雷斯-數字圖像處理

第二章基本原理

2.1數字圖像的表示

一副圖像可以被定義為一個二維函數f(x,y)

其中x和y是空間(平面)坐標,f在任何坐標點(x,y)處的振幅稱為圖像在該點的亮度

灰度:用來表示黑白圖像亮度的一個術語

圖像關於坐標及振幅連續。當f的x,y分量和振幅都是有限且連續的量時,稱該圖像為數字圖像

2.1.1坐標約定

2.1.2圖像的矩陣表示

2.2讀取圖像

使用函數imread可以將圖像讀入MATLAB環境,imread的語法是

imread("filename』)

函數size可以給出一副圖像的行數和列數:

[M,N] = size(f)

函數whos可以顯示出一個數組的附加信息:

whosf

2.3顯示圖像

在MATLAB桌面中一般使用函數imshow來顯示,該函數的基本語法為

imshow(f,G)

其中f是一個圖像數組,G是顯示該圖像的灰度級數。若將G省略,則默認的灰度級數是256。

語法:

imshow(f,[low high])

會將所有小於等於low的值都顯示黑色,所有大於等於high的值都顯示白色,界於之間的值將以默認的級數顯示為中等亮度值。

語法:

Imshow(f,[ ])

可以將變數low設置為數組f的最小值,high設置為數組f的最大值。這一語法在顯示一副動態範圍較小的圖像或者既有正值又有負值的圖像非常有用。

函數impixelinfo用來交互地顯示單個像素的坐標值及亮度值。

函數imdistline可以測得圖上兩點的歐幾里得距離。

注意:只要用逗號或分號正確的分隔開不同的命令,一行中就可以寫幾條命令,任何時候都可以用分號取消一個命令行的輸出。

2.4保存圖像

使用函數imwrite可以將圖像寫到磁碟上,該函數的語法為:

imwrite(f,『filename』)

函數imwrite可以有其他參數,具體取決於所選的文件格式。後續章節中大部分工作都是處理JPEG和TIFF格式的圖片,所以我們將注意力放在這兩種格式上。

只適用於JPEG的函數imwrite語法為:

imwrite(f,『filename.jpg』, 『quality』, q)

其中q是0-100的整數(由於JPEG壓縮,q越小,圖像退化就越嚴重)。

只適用於tif圖像的函數imwrite語法:

imwrite(g, 『filename.tif』, 『compression』, 『parameter』, 『resolution』,[colres, rowres])

其中『parameter』可以是以下值:『none』表示無壓縮

『packbits』表示比特包壓縮(非二值圖像默認參數)

『ccitt』表示ccitt壓縮(二值圖像默認參數)

[colres rowres]包含兩個整數,分別表示列解析度和行解析度。用標量res來指定解析度和使用[res res]是等價的。

要了解圖像文件的詳細信息,可以使用函數imfinfo,語法為:

imfinfofilename

其中filename是存在磁碟中的圖像全名。

2.5數據類

double、uint8、uint16、uint32、int8、int16、int32、single、char、logical

MATLAB中所有的數值計算都可以用double類來進行,所以它也是圖像處理應用領域最常用的類型

uint8數據類也是頻繁使用的數據類,尤其是在存儲設備中讀取數據時,8比特圖像中是實際中最常用的圖像。

2.6圖像類別

工具箱支持以下4種圖像類型:

l亮度圖像(Intersityimages)

l二值圖像(Binaryimages)

l索引圖像(Indexedimages)

lRGB圖像(RGB images)

2.6.1亮度圖像

一幅亮度圖像是一個數據矩陣,其歸一化的取值表示亮度。

2.6.2二值圖像

一幅二值圖像是一個取值只有0和1的邏輯數組

使用函數logical可以將所有非零的量轉換為邏輯1,而將所有的0值轉換為邏輯0。

要測試一個數組是否為邏輯數組,可以使用函數islogical。

2.6.3術語注釋

在我們提到一幅圖像時,是指一幅『data_class image_type image』。

其中,data_class 是指數據類

Image_tyoe是圖像類型

例如 uint8亮度圖像。

2.7數據類與圖像類型之間的轉換

2.7.1數據類間的轉換

通用的語法:

B = data_class_name(A)

其中,data_class_name是數據類名稱

注意:進行數據類轉換時,不會對元素取值進行範圍縮放。

2.7.2圖像類和類型間的轉換

工具箱中提供了執行必要縮放的函數,以在圖像類和類型間的轉換。

包括im2uint8、im2uint16、mat2gray、im2double、im2bw。

函數im2uint8可以檢測出輸入的數據類,並進行必要的縮放,以便工具箱能將這些數據類型識別為有效的圖像數據。

具體實現:將所有輸入小於0的值設置為0,所有大於1的值設置為255,再將所有其他的值乘以255後四捨五入。

注意,im2uint8的舍入行為與數據類轉換函數uint8不同,後者只是簡單的將小數部分全部捨去。

函數mat2gray可以將一個double類的任意數組轉換為取值範圍為[0, 1],其基本語法為:

g = mat2gray(A, [Amin, Amax])

規定參數Amin和Amax,是為了在轉換過程中將A中小於Amin的值轉換為0,大於Amax的值轉換為1。

函數im2double將輸入轉換為double類。若輸入是uint8、uint16或者logical類,則輸出取值範圍為[0,1]的double類;若輸入已經是double類,則輸入與輸出相同。

具體實現:輸入為uint8類數據時,每個值除以255;uint16類數據每個值除以65535。

函數im2bw用於將亮度圖像轉化為灰度圖像。語法為:

g = im2bw(f, T)

該函數通過閾值處理,將f中小於閾值T的像素點轉換為0,其餘轉換為1.無論輸入為何種數據類,T的範圍都必須是[0,1],默認閾值為0.5。im2bw會自動將輸出的二值圖像聲明為logical數組。若輸入為uint8、uint16類圖像,則先將每個像素點分別除以255、65535,再使用閾值;若輸入為double類圖像,直接使用閾值;若輸入為logical數組,則輸入與輸出相同。

2.8數組索引

2.8.1向量索引

維數為1 x N的數組稱為行向量,v(1)是向量v的第一個元素,依次類推。

MATLAB中向量的元素用方括弧[]括起,並用空格或逗號隔開。

使用轉置運算符(.』)可以將行向量轉換為列向量。

要存取元素的數據塊,可以使用MATLAB的冒號:

存取v中前三個元素 v(1:3)

存取v中第三個元素到最後一個 v(3:end)

若v是一個向量,則語句v(:)將產生一個列向量,語句v(1:end)將產生一個行向量。

索引並不限於連續的元素,例如:

v(1: 2 : end)

表示索引從1開始計數,步長為2,直到最後一個元素。步長可以為負。

函數linspace的語法為:

X = linspace(a,b, n)

該語句將產生含有n個元素(默認100)的行向量X,這n個元素線性地隔開並包含a和b。

一個向量也可以做另一個向量的索引。例如

v([1,4, 5])

上述命令將挑出向量v的第一個、第四個和第五個元素。

2.8.2矩陣索引

在MATLAB中,矩陣可以很方便的用一列方括弧括起並用分號隔開的行向量表示。例如:

A = [1 23; 4 5 6; 7 8 9]

A = [1, 2,3; 4, 5, 6; 7, 8, 9]

注意此處分號的作用,與之前提到的取消命令行輸出或者在同一行中寫入多行命令不同。

從矩陣中挑出元素需要兩個索引,例如:

A(2,3)

表示提取A 中第二行第三列元素。

矩陣索引中使用冒號操作符來在矩陣中選擇一個二維元素塊,例如:

C3 =A(: , 3)

將矩陣的第3列挑選出來。

R2 =A(2, : )

將矩陣的第二行挑選出來。

使用end運算符也可進行矩陣索引,例如:

A(end,end)

表示最後一行最後一列元素。

使用向量作為矩陣的索引為元素的選擇提供了一種強大的方法。例如:

E =A( [1 3], [2 3])

使用矩陣定址可以實現更加複雜的方案。使用索引矩陣是一種特別有用的定址方式是形式A(D)。其中D 是一個邏輯數組,該方式將索引所有logical數組中值為1位置的A中元素。

最後,在做矩陣索引時,單個冒號會選擇該數組中的全部元素(以逐列的方式)並將這些元素排列成一個列向量的形式。例如

v =T2( : )

冒號的使用很有幫助,如我們想求一個矩陣所有元素的和,可以使用語句

s =sum( A( : ) )

一般來說,sum(v)會將向量v中所有元素求和,若一個矩陣輸入到sum中,其結果是一個行向量,且行向量包含輸入數組每一列的和。

使用冒號運算符實際上是矩陣或多維數組的一種線性索引方式。事實上,MATLAB將每個數組都作為列向量來存儲,而不管它實際的維度是多少。這個列有數組列首尾相連而成,使用單個下標存儲A可直接對該列索引。這種類型的索引時為了優化程序而使循環向量化的基本成分。

2.8.3選擇數組的維度

本書常使用如下形式:

Operate(A, dim)

Operate表示MATLAB的一種可用操作,A是一個數組,dim是一個標量。例如:

k =size(A, 1)

上述命令沿A的第一個維度(在MATLAB中定義為垂直方向)給出A的大小,即給出A 的行數。類似的,size(A,2)返回的是A的列數。

函數ndims的語法為:

d =ndims(A)

它將給出數組A的維度。函數ndim的返回值不會小於2,因為即使是標量,也認為有兩個維度,這是的標量是大小為1 x 1的數組。

2,9一些重要的標準數組

七種數組生成數組

lzeros(M, N)生成一個大小為M x N的double類數組,其元素均為0。

lones(M, N)生成一個大小為M x N的double類數組,其元素均為1。

lture(M,N)生成一個大小為M x N的logical類數組,其元素均為1。

lfalse(M,N)生成一個大小為M x N的logical類數組,其元素均為0。

lmagic (M,N)生成一個大小為M xN的魔方方陣,該方陣中每一行每一列及主對角線中元素均相等,易於生成,常用於測試

lrand (M,N)生成一個大小為M xN的矩陣,其元素均為區間[0,1]內均勻分布的隨機數

lrandn (M,N)生成一個大小為M xN的矩陣,其元素是正態分布的隨機數。

2.10 M函數編程

2.10.1 M文件

MATLAB中M文件可以是執行一系列MATLAB語句的腳本,也可以說接受變數併產生一個或多個輸出的函數。

M文件函數的組成部分為

l函數定義行

lH1行

l幫助文本

l函數體

l命令

函數定義行的形式為

function[outputs] = name(inputs)

其中,輸出變數用方括弧[]括起,若只有單一輸出可以不使用方括弧直接列出;若函數沒有輸出則無需等號或方括弧,只需要使用字function。輸入變數必須位於圓括弧內。函數名必須以字母開頭。

2.10.2運算符

2.10.3流控制

2.10.4代碼優化

向量化循環和預分配數組

2.10.5互動式io

2.10.6單元數組和結構簡介


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

是什麼讓相愛的人分開?
讓家庭充滿溫馨的六個愛的法則

TAG:全球大搜羅 |