1. 程式人生 > >Matlab中的stretchlim函式詳解

Matlab中的stretchlim函式詳解

imadjust函式是MATLAB的一個工具箱函式,一般的語法呼叫格式為:

f1=imadjust(f,[low_in  high_in],[low_out  high_out],gamma)

(注:本文所述影象資料均為Uint8,對於Matlab,矩陣中的一個元素即是一個畫素點)

該函式的意義如圖1所示,把影象灰度變換到新影象f1的過程中,中灰度值低於low_in的畫素點在f1中灰度值被賦值為low_out,同理,f中灰度值高於high_in的畫素點變換到f1時其灰度值也被賦值為high_out;而對於引數gamma,當gamma<1時,灰度影象靠近low_in的灰度值較低畫素點灰度值變高,其灰度變化範圍被拉伸,灰度值靠近high_in的一端灰度變化範圍被壓縮,影象整體變明亮。如圖1(a)所示,同理,當gamma>1時,則灰度影象的靠近low_in的灰度值較低畫素點灰度值變低,其灰度變化範圍被壓縮,灰度值靠近high_in的一端的灰度變化範圍被拉伸,如圖1(c)所示。

a

b

c

圖1

​而對於中間的兩個引數,通過調整其值,主要可以實現以下四種變換。

(1).負片變換

即取反變換,對一個灰度影象取反(負片)變換即為255減去中的每個畫素點的灰度值,得到的新影象f1 即為負片變換後的影象。

示例程式碼:

f1=imadjust(f,[0 1],[1 0]);

圖2

(2).兩引數為空的變換

變換命令程式碼如下:

                   f1=imadjust(f,[ ],[ ],0.6);

其實質就是隻改變引數gamma的變換,文章開篇已述,此處便不再贅述。

當然,該變換也可結合Matlab工具箱函式stretchlim得到。其具體呼叫格式為:

f1=imadjust(f,stretchlim(f),[ ]);

該呼叫方法能自動確定閾值,完成對比度拉伸。

(3).大到小變換

所謂大到小變換,即將圖片f較大的灰度值變化區間壓縮為較小的灰度值變化區間達到降低圖片f1對比度的作用,示例程式碼如下:

  f1=imadjust(f,[0 1],[0.3 0.7]);

圖3

 

其意義為將影象中灰度值區間壓縮變換到f1 

中,且f1的灰度值變化範圍為255*0.3~255*0.7。變化公式大致如此,對於任意的變換區間,有:  

圖片中的任一畫素點的灰度值x,變換後得到f1影象中對應畫素點灰度值Xf,變換公式如下:

(4).小到大變換

與大到小變換相反,將圖片較小的灰度值變化區間擴充套件為較大的灰度值變化區間;示例程式碼如下:

                  f1=imadjust(f,[0.3 0.6],[0.1 1]);

與(3)變換相反,該型別變換能提高圖片f1對比度,如圖3所示。

圖4

其變換過程類似變換(3),對於任一的  

圖片中的任一畫素點的灰度值x,變換後得到f1 影象中相應畫素點的灰度值Xf ,變換公式如下: