圖象函式

圖像函式(image function)是指在各種軟體中能夠動態生成gif格式的圖像數據流並輸出到伺服器的一系列函式。

不同軟體套用的圖像函式不一樣,下面進行舉例對圖像函式進行說明。

基本介紹

  • 中文名:圖像函式
  • 外文名:image function
  • 套用領域:計算機等
  • 實質:計算機函式
  • 套用對象:圖像參數
  • 涉及軟體:SQL、PHP等
SQL Server,查找特定字元串PATINDEX,獲取文本指針TEXTPTR,檢測文本指針是否有效TEXTVALID,讀取文本圖像列內容READTEXT,寫入文本圖像列內容WRITETEXT,更新文本圖像列內容UPDATETEXT,PHP,Matlab中圖像函式,圖像增強,圖像的變換,圖像處理工具箱,

SQL Server

查找特定字元串PATINDEX

語法與字元串的patindex一樣。

獲取文本指針TEXTPTR

SQLServer在存儲文本類型(ntext、text)和圖像數據類型(image)時,默認情況是與常見的基本數據類型(如char、int等)這樣的數據時單獨存儲的,也就是說,如 果一個表中的欄位有基本類型和圖像文本類型,那么,在輸入數據時,基本類型和圖像檔案數據並不是保存在同一個頁面上,而是分離存儲的。分離存儲後,那么基本類型數據和文本圖像類型數據所在的頁面就是通過文本指針建立聯繫,是一個16位元組的二進制類型指針。在基本類型數據頁面中存儲的就是這些指向數據的指針,這樣在需要的時候通過指針來操作文本和圖像數據。Textptr函式就可以用於獲得文本和圖像數據存儲的文本指針,這個指針獲得後就可以被操作文本和圖像數據的函式(wrutetext、readtext和updatetext等)進行操作。如果沒有有效的指針,文本和圖像函式是無法運算元據的。
語法結構:
textptr( column )
這裡的column就是表中的文本和圖像數據列(text、ntext和image)名稱。
返回值:
varbinary類型16位元組指針。
配合使用的函式:
在編寫含有TEXTPTR函式的T-SQL代碼時,下表所示的函式經常被使用。
格式
說明
patindex('%pattern%',expression)
返回字元串在text或ntext列中的字元位置
datalength(expression)
返回text、ntext和image列中數據的長度
set textsize
返回對select語句所返回的text、ntext或image數據的限制(位元組數)。settextsize 0表示不限制。
substring(text_column,start,length)
返回二進制列中又指定的start偏移量和length指定的varchar類型的字元串。字元串的長度硬小於8kb

檢測文本指針是否有效TEXTVALID

textvalid函式用於檢測文本指針是否有效。
語法結構:
textvalid( 'table.column',text_ptr )
參數說明:
table:表的名稱,必須包含
column:表中的二進制數據列(text、ntext和image)名稱
text_ptr:要檢測的文本指針
返回值:
int,如果指針有效返回1,否則分那會0。

讀取文本圖像列內容READTEXT

readtext函式用於讀取文本或圖像列的內容,按照指定的偏移量開始讀取指定位元組數。如果是圖像列(image),這樣讀取的是位元組數,而不是現實圖像本身。
語法結構:
readtext{ table.column text_ptr offset size } [holdlock]
參數說明:
table:表名稱
column:列名稱
text_ptr:有效的文本指針,即16位元組的binary數據。
offset:開始讀取text、image類型數據之前,要跳過的位元組數。讀取ntext類型數據之前要跳過的字元數。
size:讀取的位元組數(使用text或image數據類型時)或字元數(使用ntext數據類型時)。如果size為0,則讀取4KB數據。
holdlock:使文本值被鎖定以進行讀取,直到十五結束為止。其他用戶可以讀取該值,但不能對其進行修改。
varchar字元。
示例:以後寫

寫入文本圖像列內容WRITETEXT

writetext函式用於向文本或圖像寫入內容,同時可以選擇為最小日誌記錄,這樣寫入操作產生的日誌寫的I/O次數少,對資料庫性能影響小。
語法結構:
writetext{ table.column text_ptr } [ with log ] { data }
參數說明:
table:表名稱
column:列名稱
text_ptr:有效的文本指針,即16位元組的binary數據。
with log:由資料庫的恢復模式來決定writetext操作產生的日誌行為。因為text、ntext、imge類型的數據一般情況下都比較大。比如一幅圖片可能上百KB,我們知道一個數據頁面的容量是標準的8KB。所以一幅圖片很可能就需要幾時個甚至更多的數據頁面,所以writetext操作所產生的I/O次數是很多的,而過多的I/O次數將影響資料庫的性能。該參數的引入是交給資料庫的恢復模式來決定的writetext操作將產生的日誌行為。當資料庫公仔在完全恢復模式時,產生的日誌最多,因此對資料庫性能的影響也最大。當工作在簡單恢復模式時,產生的日誌最少。
data:要存儲的text、ntext或image類型的數據。writetext以互動方式插入的最大文本長度約為120KB。

更新文本圖像列內容UPDATETEXT

updatetext函式更新文本或圖像列中的內容。與writetext的區別在於該函式可以僅更新列中的一部分,而writetext是更新整個列。
語法結構:
updatetext{ table.name.dest_column_name dest_text_ptr }  { null | insert_offset }  { with log }  { inserted_data | { table.name.src_column_name src_text_ptr } }
語法中的參數說明如下。
table_name:表名稱。
dest_column_name:列名稱。
dest_text_ptr:有效的文本指針,即16位元組的binary數據。
insert_offset:以0為基礎的更新其實位置,對於Textimage列,insert_offset是在插入新數據前要從現有列的起點跳過的位元組數。對於ntext列,insert_offset是字元數(每個ntext字元占用2個位元組)。從此基數為零的起始點開始的現有text、ntext或image數據向右移,為新數據留出空間。值為0表示將新數據插入現有數據的開始處。值為null則將新數據追加到享有數據值後。
delete_length:從insert_offset位置開始、要從現有text、ntext、或image列中刪除的數據長度。delete_length值對於text和image列用位元組指定,對於ntext列用字元指定。每個ntext字元占用2個位元組。值為0表示不刪除數據。值為null則刪除現有text或image列中從insert_offset位置開始到末尾的所有數據。
withlog:日子記錄由資料庫的當前模式決定。
inserted_date:要插入現有text、ntext或image列的insert_offset位置的數據。這是單個char、nchar、varchar、nvarchar、binary、varbinary、text、 ntext或image值。inserted_data可以是文字或變數。
table_name.src_column_name:用作插入數據源的表或text、ntext、image列的名稱。
src_text_ptr:指向用作插入數據源的text、ntext或image列的文本指針值,通常使用textptr函式獲得。

PHP

PHP中有一組圖像函式,可以動態生成gif格式的圖像數據流並輸出到伺服器。要使這組函式能夠工作,系統中必須有gd庫的支持。如果是在Unix下,應該在編譯PHP之前先取得gd的源碼並編譯之,生成libgd.a和一些.h檔案,分別拷到系統的庫目錄和頭檔案目錄中(例如/usr/lib和/usr/include):如果是在Windows下,PHP3.0的安裝程式會安裝一個gd.dll檔案,在程式中加一句,d1(”gd.dll"):,即可使用圖像函式。
主要的圖像函式有:
1.ImageCreate(寬度,高度)
返回一個圖像描述符。
2. ImageCreateFromGif(檔案名稱):
返回一個圖像描述符。
3.ImageColorAllocate(圖像描述符,紅,綠,藍)
返回一個顏色描述符。由於Gif圖像只能有256色,必須先對它分配調色板,這個語句就是分配一個調色板項。
4.ImageColorTransparent(圖像描述符,顏色描述符):
指定某顏色為透明色。
5.畫圖函式
ImageArc(圖像描述符,圓心橫坐標,圓心縱坐標,橢圓寬,橢圓高,起始角,終止角,顏色描述符);
ImageChar(圖像描述符,字型,x,y,字元,顏色描述符);
ImageCharUp(圖像描述符,字型,x,卜字元,顏色描述符):
ImageCopyResized(目標圖像描述符,源圖像描述符,目標x, 目標y,源x,源卜 目標寬,目標高,源寬,源高):
ImageDashedLine(圖像描述符,x1,y1,x2,y2,顏色描述符);
ImageFSll(圖像描述符,起始點x,起始點y真顏色描述符):
ImageFilledPolygon(圖像描述符,各頂點數組,頂點數,顏色描述符);
ImageFilledRectangle(圖像描述符,x1,y1,x2,y2,顏色描述符):
ImageFillToBorder(圖像描述符,起始點x,起始點y,邊界色,填充色):
ImageLine(圖像描述符,x1,y1,x2,y2,顏色描述符);
ImagePolygon(圖像描述符,各頂點數組,頂點數,顏色描述符):
ImageRectangle(圖像描述符,x1,C,x2,y2,顏色描述符);
ImageSetPixel(圖像描述符,x,y,顏色描述符):
PHP進階及PHP資料庫編程技術
ImageString(圖像描述符,字型,x,y,字元串,顏色描述符);
ImageStringUp(圖像描述符,字型,x,卜字元串,顏色描述符);
這些都是畫圖函式,需要略作解釋的就是多邊形的頂點數組內依次存放著第一點x,第一點y,第二點x,第二點y,…
6.ImageLoadFont(檔案名稱);
檔案應該是一個點陣圖字型檔,返回一個字型號。系統預設帶有1-5字型號,可以直接使用。
7.ImageSX,ImageSY
分別得到一個圖像的寬度和高度,接收一個圖像描述符參數。
8.ImageColorAt(圖像描述符,x,y);
ImageColorClosest(圖像描述符,紅,綠,藍);
ImageColorExac(圖像描述符,紅,綠,藍):
ImageColorSet(圖像描述符,顏色描述符,紅,綠,藍):
ImageColorsForlndex(圖像描述符,顏色描述符):
ImageColorsTotal(圖像描述符):
前三個返回一個顏色描述符。ImageColorExact如果找不到匹配返回-1。
ImageColorsForlndex返回一個三項的數組,元素分別是紅,綠,藍值。
ImageColorsTotal返回總顏色數。
9. ImageFontHeight, ImageFontWidth
接收一個字型號作為參數。
10.IrnageGif(圖像描述符,[檔案名稱]);
如無檔案名稱,則將出f數據流送往瀏覽器。這時程式一開始應該有一句:Header("Content·typ&image/gift)
11.ImageDestroy(圖像描述符):
圖像函式中有一個小Bug:濃PHP3.0RC和PHP3.0RC3ForUnix的源碼中已經發現,現在從www.php.net上的下載檔案應該已經更改),就是不管x的值是什麼,ImageSetPixel總是在(卜y)處畫點,不過這個問題不是很大。

Matlab中圖像函式

圖像增強

1.直方圖均衡化的 Matlab 實現

1.1 imhist 函式
功能:計算和顯示圖像的色彩直方圖
格式:imhist(I,n)
imhist(X,map)
說明:imhist(I,n) 其中,n 為指定的灰度級數目,預設值為256;imhist(X,map) 就算和顯示索引色圖像 X 的直方圖,map 為調色板。用
stem(x,counts) 同樣可以顯示直方圖。
1.2 imcontour 函式
功能:顯示圖像的等灰度值圖
格式:imcontour(I,n),imcontour(I,v)
說明:n 為灰度級的個數,v 是有用戶指定所選的等灰度級向量。
1.3 imadjust 函式
功能:通過直方圖變換調整對比度
格式:J=imadjust(I,[low high],[bottom top],gamma)
newmap=imadjust(map,[low high],[bottom top],gamma)
說明:J=imadjust(I,[low high],[bottom top],gamma) 其中,gamma 為校正量r,[low high] 為原圖像中要變換的灰度範圍,[bottom top]
指定了變換後的灰度範圍;newmap=imadjust(map,[low high],[bottom top],gamma) 調整索引色圖像的調色板 map 。此時若 [low high] 和
[bottom top] 都為2×3的矩陣,則分別調整 R、G、B 3個分量。
1.4 histeq 函式
功能:直方圖均衡化
格式:J=histeq(I,hgram)
J=histeq(I,n)
[J,T]=histeq(I,...)
newmap=histeq(X,map,hgram)
newmap=histeq(X,map)
[new,T]=histeq(X,...)
說明:J=histeq(I,hgram) 實現了所謂“直方圖規定化”,即將原是圖象 I 的直方圖變換成用戶指定的向量 hgram 。hgram 中的每一個元素
都在 [0,1] 中;J=histeq(I,n) 指定均衡化後的灰度級數 n ,預設值為 64;[J,T]=histeq(I,...) 返回從能將圖像 I 的灰度直方圖變換成
圖像 J 的直方圖的變換 T ;newmap=histeq(X,map) 和 [new,T]=histeq(X,...) 是針對索引色圖像調色板的直方圖均衡。
2.噪聲及其噪聲的 Matlab 實現

imnoise 函式
格式:J=imnoise(I,type)
J=imnoise(I,type,parameter)
說明:J=imnoise(I,type) 返回對圖像 I 添加典型噪聲後的有噪圖像 J ,參數 type 和 parameter 用於確定噪聲的類型和相應的參數。
3.圖像濾波的 Matlab 實現

3.1 conv2 函式
功能:計算二維卷積
格式:C=conv2(A,B)
C=conv2(Hcol,Hrow,A)
C=conv2(...,'shape')
說明:對於 C=conv2(A,B) ,conv2 的算矩陣 A 和 B 的卷積,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 則 size(C)=[Ma+Mb-1,Na+Nb-1];
C=conv2(Hcol,Hrow,A) 中,矩陣 A 分別與 Hcol 向量在列方向和 Hrow 向量在行方向上進行卷積;C=conv2(...,'shape') 用來指定 conv2
返回二維卷積結果部分,參數 shape 可取值如下:
》full 為預設值,返回二維卷積的全部結果;
same 返回二維卷積結果中與 A 大小相同的中間部分;
valid 返回在卷積過程中,未使用邊緣補 0 部分進行計算的卷積結果部分,當 size(A)>size(B) 時,size(C)=[Ma-Mb+1,Na-Nb+1]

3.2 conv 函式
功能:計算多維卷積
格式:與 conv2 函式相同
3.3 filter2函式
功能:計算二維線型數字濾波,它與函式 fspecial 連用
格式:Y=filter2(B,X)
Y=filter2(B,X,'shape')
說明:對於 Y=filter2(B,X) ,filter2 使用矩陣 B 中的二維 FIR 濾波器對數據 X 進行濾波,結果 Y 是通過二維互相關計算出來的,其大
小與 X 一樣;對於 Y=filter2(B,X,'shape') ,filter2 返回的 Y 是通過二維互相關計算出來的,其大小由參數 shape 確定,其取值如下

full 返回二維相關的全部結果,size(Y)>size(X);
same 返回二維互相關結果的中間部分,Y 與 X 大小相同;
valid返回在二維互相關過程中,未使用邊緣補 0 部分進行計算的結果部分,有 size(Y)<size(X) 。
3.4 fspecial 函式
功能:產生預定義濾波器
格式:H=fspecial(type)
H=fspecial('gaussian',n,sigma) 高斯低通濾波器
H=fspecial('sobel') Sobel 水平邊緣增強濾波器
H=fspecial('prewitt') Prewitt 水平邊緣增強濾波器
H=fspecial('laplacian',alpha) 近似二維拉普拉斯運算濾波器
H=fspecial('log',n,sigma) 高斯拉普拉斯(LoG)運算濾波器
H=fspecial('average',n) 均值濾波器
H=fspecial('unsharp',alpha) 模糊對比增強濾波器
說明:對於形式 H=fspecial(type) ,fspecial 函式產生一個由 type 指定的二維濾波器 H ,返回的 H 常與其它濾波器搭配使用。
4.彩色增強的 Matlab 實現

4.1 imfilter函式
功能:真彩色增強
格式:B=imfilter(A,h)
說明:將原始圖像 A 按指定的濾波器 h 進行濾波增強處理,增強後的圖像 B 與 A 的尺寸和類型相同

圖像的變換


1. 離散傅立葉變換的 Matlab 實現
Matlab 函式 fft、fft2 和 fftn 分別可以實現一維、二維和 N 維 DFT 算法;而函式 ifft、ifft2 和 ifftn 則用來計算反 DFT 。
這些函式的調用格式如下:
A=fft(X,N,DIM)
其中,X 表示輸入圖像;N 表示採樣間隔點,如果 X 小於該數值,那么 Matlab 將會對 X 進行零填充,否則將進行截取,使之長度為
N ;DIM 表示要進行離散傅立葉變換。
A=fft2(X,MROWS,NCOLS)
其中,MROWS 和 NCOLS 指定對 X 進行零填充後的 X 大小。
A=fftn(X,SIZE)
其中,SIZE 是一個向量,它們每一個元素都將指定 X 相應維進行零填充後的長度。
函式 ifft、ifft2 和 ifftn的調用格式於對應的離散傅立葉變換函式一致。
例子:圖像的二維傅立葉頻譜
% 讀入原始圖像
I=imread('lena.bmp');
imshow(I)
% 求離散傅立葉頻譜
J=fftshift(fft2(I));
figure;
imshow(log(abs(J)),[8,10])
2. 離散餘弦變換的 Matlab 實現
2.1. dCT2 函式
功能:二維 DCT 變換
格式:B=dct2(A)
B=dct2(A,m,n)
B=dct2(A,[m,n])
說明:B=dct2(A) 計算 A 的 DCT 變換 B ,A 與 B 的大小相同;B=dct2(A,m,n) 和 B=dct2(A,[m,n]) 通過對 A 補 0 或剪裁,使 B 的大
小為 m×n。
2.2. dict2 函式
功能:DCT 反變換
格式:B=idct2(A)
B=idct2(A,m,n)
B=idct2(A,[m,n])
說明:B=idct2(A) 計算 A 的 DCT 反變換 B ,A 與 B 的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通過對 A 補 0 或剪裁,使 B的大小為 m×n。
2.3. dctmtx函式
功能:計算 DCT 變換矩陣
格式:D=dctmtx(n)
說明:D=dctmtx(n) 返回一個 n×n 的 DCT 變換矩陣,輸出矩陣 D 為double類型。
3. 圖像小波變換的 Matlab 實現
3.1 一維小波變換的 Matlab 實現
(1) dwt 函式
功能:一維離散小波變換
格式:[cA,cD]=dwt(X,'wname')
[cA,cD]=dwt(X,Lo_D,Hi_D)
說明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函式 'wname' 對信號 X 進行分解,cA、cD
分別為近似分量和細節分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的濾波器組 Lo_D、Hi_D 對信號進行分解。
(2) idwt 函式
功能:一維離散小波反變換
格式:X=idwt(cA,cD,'wname')
X=idwt(cA,cD,Lo_R,Hi_R)
X=idwt(cA,cD,'wname',L)
X=idwt(cA,cD,Lo_R,Hi_R,L)
說明:X=idwt(cA,cD,'wname') 由近似分量 cA 和細節分量 cD 經小波反變換重構原始信號 X 。
'wname' 為所選的小波函式
X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重構濾波器 Lo_R 和 Hi_R 經小波反變換重構原始信號 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信號 X 中心附近的 L 個點。
3.2 二維小波變換的 Matlab 實現
二維小波變換的函式
函式名函式功能
dwt2
二維離散小波變換
wavedec2
二維信號的多層小波分解
idwt2
二維離散小波反變換
waverec2
二維信號的多層小波重構
wrcoef2
由多層小波分解重構某一層的分解信號
upcoef2
由多層小波分解重構近似分量或細節分量
detcoef2
提取二維信號小波分解的細節分量
appcoef2
提取二維信號小波分解的近似分量
upwlev2
二維小波分解的單層重構
dwtpet2
二維周期小波變換
idwtper2
二維周期小波反變換

(1) wcodemat 函式
功能:對數據矩陣進行偽彩色編碼
格式:Y=wcodemat(X,NB,OPT,ABSOL)
Y=wcodemat(X,NB,OPT)
Y=wcodemat(X,NB)
Y=wcodemat(X)
說明:Y=wcodemat(X,NB,OPT,ABSOL) 返回數據矩陣 X 的編碼矩陣 Y ;NB 偽編碼的最大值,即編碼範圍為 0~NB,預設值 NB=16;
OPT 指定了編碼的方式(預設值為 'mat'),即:
OPT='row' ,按行編碼
OPT='col' ,按列編碼
OPT='mat' ,按整個矩陣編碼
ABSOL 是函式的控制參數(預設值為 '1'),即:
ABSOL=0 時,返回編碼矩陣
ABSOL=1 時,返回數據矩陣的絕對值 ABS(X)
(2) dwt2 函式
功能:二維離散小波變換
格式:[cA,cH,cV,cD]=dwt2(X,'wname')
[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
說明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函式 'wname' 對二維信號 X 進行二維離散小波變幻;cA,cH,cV,cD 分別為近似分量、水平細節分量、垂直細節分量和對角細節分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通濾波器 Lo_D 和 Hi_D 分解信號 X 。
(3) wavedec2 函式
功能:二維信號的多層小波分解
格式:[C,S]=wavedec2(X,N,'wname')
[C,S]=wavedec2(X,N,Lo_D,Hi_D)
說明:[C,S]=wavedec2(X,N,'wname') 使用小波基函式 'wname' 對二維信號 X 進行 N 層分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通濾波器 Lo_D 和 Hi_D 分解信號 X 。
(4) idwt2 函式
功能:二維離散小波反變換
格式:X=idwt2(cA,cH,cV,cD,'wname')
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
X=idwt2(cA,cH,cV,cD,'wname',S)
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
說明:X=idwt2(cA,cH,cV,cD,'wname') 由信號小波分解的近似信號 cA 和細節信號 cH、cH、cV、cD 經小波反變換重構原信號 X;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) 使用指定的重構低通和高通濾波器 Lo_R 和 Hi_R 重構原信號 X ;X=idwt2(cA,cH,cV,cD,'wname',S)和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 個數據點。
(5) waverec2 函式
說明:二維信號的多層小波重構
格式:X=waverec2(C,S,'wname')
X=waverec2(C,S,Lo_R,Hi_R)
說明:X=waverec2(C,S,'wname') 由多層二維小波分解的結果 C、S 重構原始信號 X ,'wname'
為使用的小波基函式;X=waverec2(C,S,Lo_R,Hi_R) 使用重構低通和高通濾波器 Lo_R 和 Hi_R 重構原信號。

圖像處理工具箱


1. 圖像和圖像數據
預設情況下,MATLAB將圖像中的數據存儲為雙精度類型(double),64位浮點數,所需存儲量很大;MATLAB還支持另一種類型無符號整型(uint8),即圖像矩陣中每個數據占用1個位元組。
在使用MATLAB工具箱時,一定要注意函式所要求的參數類型。另外,uint8與double兩種類型數據的值域不同,編程需注意值域轉換。
從uint8到double的轉換
---------------------------------------------
圖像類型 MATLAB語句
---------------------------------------------
索引色 B=double(A)+1
索引色或真彩色 B=double(A)/255
二值圖像 B=double(A)
---------------------------------------------
從double到uint8的轉換
---------------------------------------------
圖像類型 MATLAB語句
---------------------------------------------
索引色 B=uint8(round(A-1))
索引色或真彩色 B=uint8(round(A*255))
二值圖像 B=logical(uint8(round(A)))
---------------------------------------------
2. 圖像處理工具箱所支持的圖像類型
2.1 真彩色圖像
R、G、B三個分量表示一個像素的顏色。如果要讀取圖像中(100,50)處的像素值,可查看三元數據(100,50,1:3)。
真彩色圖像可用雙精度存儲,亮度值範圍是[0,1];比較符合習慣的存儲方法是用無符號整型存儲,亮度值範圍[0,255]

2.2 索引色圖像
包含兩個結構,一個是調色板,另一個是圖像數據矩陣。調色板是一個有3列和若干行的色彩映象矩陣,矩陣每行代表一種顏色,3列分別代表紅、綠、藍色強度的雙精度數。

注意:MATLAB中調色板色彩強度[0,1],0代表最暗,1代表最亮。
常用顏色的RGB值
--------------------------------------------
顏色 R G B 顏色 R G B
--------------------------------------------
黑 0 0 1 洋紅 1 0 1
白 1 1 1 青藍 0 1 1
紅 1 0 0 天藍 0.67 0 1
綠 0 1 0 橘黃 1 0.5 0
藍 0 0 1 深紅 0.5 0 0
黃 1 1 0 灰 0.5 0.5 0.5
--------------------------------------------
產生標準調色板的函式
-------------------------------------------------
函式名 調色板
-------------------------------------------------
Hsv 色彩飽和度,以紅色開始,並以紅色結束
Hot 黑色-紅色-黃色-白色
Cool 青藍和洋紅的色度
Pink 粉紅的色度
Gray 線型灰度
Bone 帶藍色的灰度
Jet Hsv的一種變形,以藍色開始,以藍色結束
Copper 線型銅色度
Prim 三稜鏡,交替為紅、橘黃、黃、綠和天藍
Flag 交替為紅、白、藍和黑
--------------------------------------------------
預設情況下,調用上述函式灰產生一個64×3的調色板,用戶也可指定調色板大小。

索引色圖像數據也有double和uint8兩種類型。
當圖像數據為double類型時,值1代表調色板中的第1行,值2代表第2行……
如果圖像數據為uint8類型,0代表調色板的第一行,,值1代表第2行……
2.3 灰度圖像
存儲灰度圖像只需要一個數據矩陣。
數據類型可以是double,[0,1];也可以是uint8,[0,255]
2.4 二值圖像
二值圖像只需一個數據矩陣,每個像素只有兩個灰度值,可以採用uint8或double類型存儲。
MATLAB工具箱中以二值圖像作為返回結果的函式都使用uint8類型。
2.5 圖像序列
MATLAB工具箱支持將多幀圖像連線成圖像序列。
圖像序列是一個4維數組,圖像幀的序號在圖像的長、寬、顏色深度之後構成第4維。
分散的圖像也可以合併成圖像序列,前提是各圖像尺寸必須相同,若是索引色圖像,調色板也必須相同。
可參考cat()函式 A=cat(4,A1,A2,A3,A4,A5)
3. MATLAB圖像類型轉換
圖像類型轉換函式
---------------------------------------------------------------------------
函式名 函式功能
---------------------------------------------------------------------------
dither 圖像抖動,將灰度圖變成二值圖,或將真彩色圖像抖動成索引色圖像
gray2ind 將灰度圖像轉換成索引圖像
grayslice 通過設定閾值將灰度圖像轉換成索引色圖像
im2bw 通過設定亮度閾值將真彩色、索引色、灰度圖轉換成二值圖
ind2gray 將索引色圖像轉換成灰度圖像
ind2rgb 將索引色圖像轉換成真彩色圖像
mat2gray 將一個數據矩陣轉換成一副灰度圖
rgb2gray 將一副真彩色圖像轉換成灰度圖像
rgb2ind 將真彩色圖像轉換成索引色圖像
----------------------------------------------------------------------------
4. 圖像檔案的讀寫和查詢
4.1 圖形圖像檔案的讀取
利用函式imread()可完成圖形圖像檔案的讀取,語法:
A=imread(filename,fmt)
[X,map]=imread(filename,fmt)
[...]=imread(filename)
[...]=imread(filename,idx) (只對TIF格式的檔案)
[...]=imread(filename,ref) (只對HDF格式的檔案)
通常,讀取的大多數圖像均為8bit,當這些圖像載入到記憶體中時,Matlab就將其存放在類uint8中。此為Matlab還支持16bit的PNG和TIF圖像,當讀取這類檔案時,Matlab就將其存貯在uint16中。
注意:對於索引圖像,即使圖像陣列的本身為類uint8或類uint16,imread函式仍將顏色映象表讀取並存貯到一個雙精度的浮點類型的陣列中。
4.2 圖形圖像檔案的寫入
使用imwrite函式,語法如下:
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
imwrite(...,filename)
imwrite(...,parameter,value)
當利用imwrite函式保存圖像時,Matlab預設的方式是將其簡化道uint8的數據格式。
4.3 圖形圖像檔案信息的查詢 imfinfo()函式
5. 圖像檔案的顯示
5.1 索引圖像及其顯示
方法一:
image(X)
colormap(map)
方法二:
imshow(X,map)
5.2 灰度圖像及其顯示
Matlab 7.0 中,要顯示一副灰度圖像,可以調用函式 imshow 或 imagesc (即imagescale,圖像縮放函式)
(1) imshow 函式顯示灰度圖像
使用 imshow(I) 或 使用明確指定的灰度級書目:imshow(I,32)

由於Matlab自動對灰度圖像進行標度以適合調色板的範圍,因而可以使用自定義大小的調色板。其調用格式如下:
imshow(I,[low,high])
其中,low 和 high 分別為數據數組的最小值和最大值。
(2) imagesc 函式顯示灰度圖像
下面的代碼是具有兩個輸入參數的 imagesc 函式顯示一副灰度圖像
imagesc(1,[0,1]);
colormap(gray);
imagesc 函式中的第二個參數確定灰度範圍。灰度範圍中的第一個值(通常是0),對應於顏色映象表中的第一個值(顏色),第二個值(通常是1)則對應與顏色映象表中的最後一個值(顏色)。灰度範圍中間的值則線型對應與顏色映象表中剩餘的值(顏色)。
在調用 imagesc 函式時,若只使用一個參數,可以用任意灰度範圍顯示圖像。在該調用方式下,數據矩陣中的最小值對應於顏色映象表中的第一個顏色值,數據矩陣中的最大值對應於顏色映象表中的最後一個顏色值。
5.3 RGB 圖像及其顯示
(1) image(RGB)
不管RGB圖像的類型是double浮點型,還是 uint8 或 uint16 無符號整數型,Matlab都能通過 image 函式將其正確顯示出來。
RGB8 = uint8(round(RGB64×255)); % 將 double 浮點型轉換為 uint8 無符號整型
RGB64 = double(RGB8)/255; % 將 uint8 無符號整型轉換為 double 浮點型
RGB16 = uint16(round(RGB64×65535)); % 將 double 浮點型轉換為 uint16 無符號整型
RGB64 = double(RGB16)/65535; % 將 uint16 無符號整型轉換為 double 浮點型
(2) imshow(RGB) 參數是一個 m×n×3 的數組
5.4 二進制圖像及其顯示
(1) imshow(BW)
在 Matlab 7.0 中,二進制圖像是一個邏輯類,僅包括 0 和 1 兩個數值。像素 0 顯示為黑色,像素 1 顯示為白色。
顯示時,也可通過NOT(~)命令,對二進制圖象進行取反,使數值 0 顯示為白色;1 顯示為黑色。
例如: imshow(~BW)
(2) 此外,還可以使用一個調色板顯示一副二進制圖像。如果圖形是 uint8 數據類型,則數值 0 顯示為調色板的第一個顏色,數值 1 顯示為第二個顏色。
例如: imshow(BW,[1 0 0;0 0 1])
5.5 直接從磁碟顯示圖像
可使用一下命令直接進行圖像檔案的顯示:
imshow filename
其中,filename 為要顯示的圖像檔案的檔案名稱
如果圖像是多幀的,那么 imshow 將僅顯示第一幀。但需注意,在使用這種方式時,圖像數據沒有保存在Matlab 7.0 工作平台。如果希望將圖像裝入工作檯中,需使用getimage 函式,從當前的句柄圖形圖像對象中獲取圖像數據,命令形式為: rgb = getimage;

相關詞條

熱門詞條

聯絡我們