1. 程式人生 > >數字影象處理三-亮度變換(1)

數字影象處理三-亮度變換(1)

這篇文章主要講解影象的亮度變換的基本原理,通過對影象的每個畫素值進行函式對映 G(x,y)=T(F(x,y));這裡主要介紹matlab中的rgb2gray函式和imadjust函式以及函式數學原理

rgb2gray

rgb2gray函式用法: I =rgb2gray(RGB);是把RGB影象轉變成灰度級影象
I = imread('by.jpg');
f = rgb2gray(I);
subplot(121);
imshow(I);
subplot(122);
imshow(f);


函式的數學原理: 以R、G、B為軸建立空間直角座標系,則RGB圖的每個象素的顏色可以用該三維空間的一個點來表示,而Gray圖的每個象素的顏色可以用直線R=G=B上的一個點來表示。 於是rgb轉gray圖的本質就是尋找一個三維空間到一維空間的對映,最容易想到的就是射影(即過rgb空間的一個點向直線R=G=B做垂線),事實上Matlab也是這樣做的, 並且有Gray = 0.29900 * R + 0.58700 * G + 0.11400 * B。灰度可以說是亮度(luminance)的量化值,而RGB的定義是客觀的三個波長值,轉換時需要考慮人眼對
不同波長的靈敏度曲線所以係數不相等。

imadjust

imadjust函式的用法:調節灰度影象的亮度或彩色影象的顏色矩陣 (1)、J = imadjust(I)
將灰度影象 I 中的亮度值對映到 J 中的新值並使 1% 的資料是在低高強度和飽和,這增加了輸出影象 J 的對比度值。
(2)、J = imadjust(I,[low_in; high_in],[low_out; high_out])
將影象I中的亮度值對映到J中的新值,即將low_in至high_in之間的值對映到low_out至high_out之間的值。low_in 以下與 high_in 以上的值被剪下掉了,也就是說,low_in 以下的值對映到 low_out,high_in 以上的值對映到high_out。它們都可以使用空的矩陣[],預設值是[0 1]。

(3)、J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
將影象 I 中的亮度值對映到 J 中的新值,其中 gamma指定描述值I和值J關係的曲線形狀。如果gamma小於1,此對映偏重更高數值(明亮)輸出,如果gamma大於1,此對映偏重更低數值(灰暗)輸出,如果省略此引數,預設為(線性對映)。 

(4)、newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)
調整索引色影象的調色盤map。如果low_in, high_in, low_out, high_out 和 gamma 都是標量,那麼對 r,g,b 分量同時都做此對映。對於每個顏色分量都有唯一的對映,當 low_in 和 high_in 同時為1*3向量或者 low_out 和 high_out 同時為1*3向量或者 gamma 為1*3向量時。調整後的顏色矩陣 newmap 和 map 有相同的大小。

(5)、RGB2 = imadjust(RGB1,...)
對 RGB 影象 RGB1 的紅、綠、藍調色盤分別進行調整。隨著顏色矩陣的調整,每一個調色盤都有唯一的對映值。
I = imread('by.jpg');
f = rgb2gray(I);
g = imadjust(f,[0.2,0.8],[]);
subplot(121);
imshow(f);
subplot(122);
imshow(g);

數學原理:例如:影象資料為unit8類(0-255),gamma=1時,影象f中某一點畫素值x經過變換後,得到影象f1的對應的畫素值xf滿足下面公式: xf = imadjust(f, [x1,y1],[x2,y2]);
當gamma不等於1的情況,暫時不清楚。