matlab灰度變換相關的學習筆記

前言

  最近讀了《岡薩雷斯 數字圖像處理》有關灰度變換部分的相關內容,想借此作個學習筆記。函數

RGB圖像

  matlab中彩色圖像經過RGB圖像來表示。RGB圖像中的RGB分別表示紅、綠、藍三種顏色。能夠將RGB圖像當作一個M×N×3的三維矩陣,其中M、N分別表示圖像的高和寬。若一幅RGB圖像的類型爲double型,它的取值範圍是[0,1];若類型爲uint8,它的取值範圍是[0,255]。學習

clipboard.png

  matlab中提取rgb圖像不一樣顏色份量的代碼:ui

>>fr = rgb_image(:,:,1);
>>fg = rgb_image(:,:,2);
>>fb = rgb_image(:,:,3);

灰度化

  若是在matlab中將rgb圖像其中一個顏色的份量單獨做爲一幅M×N的圖像來顯示,獲得的圖像會是怎樣的呢?例如將紅色份量做爲一幅圖像,結果會不會是一幅「紅色的圖像」呢?答案是:不會。顯示的圖像是一幅相似黑白照片的圖像。
  當一幅rgb圖像每個點的三個彩色份量的值都相等,即R=G=B。咱們就能夠用其中一維來表示這個圖片,由於三個份量都相等。這一個過程就叫作「灰度化」,灰度化之後獲得的圖片矩陣會從3維降至2維,這張圖片看起來也是黑白的。
  經常使用的灰度化方法有份量法、最大值法、均值法、加權平均法。在此着重介紹加權平均法。因爲人眼對綠色的敏感最高,對藍色敏感最低,所以,按下式對RGB三份量進行加權平均能獲得較合理的灰度圖像。
  加權平均法的表達式:f(i,j)=0.2989R(i,j)+0.5870G(i,j)+0.1140B(i,j)。matlab提供了rgb2gray()函數進行了灰度化,其原理就是加權平均法。spa

rgbImage = imread('Lena.jpg');
grayImage=rgb2gray(rgbImage);
subplot(1,2,1);imshow(rgbImage);title('RGB圖像');
subplot(1,2,2);imshow(grayImage);title('灰度圖像');

clipboard.png

灰度變換背景知識

  RGB灰度變換是一種「空間域」的操做,即直接對圖像進行具體的操做。灰度變換的做用就是讓圖片看起來更加清晰,爲二值化和邊緣檢測等操做打下基礎。
  RGB圖像通過灰度化之後獲得M×N灰度圖像。能夠將其當作一個定義域離散的二元函數f(i,j),其中i,j分別是M、N之間的正整數;f(i,j)表示灰度值,圖像類型不一樣值域不一樣。你們能夠想象有不少長短不一樣的牙籤緊密插在泡沫塑料板的樣子,大概圖像以下圖。code

clipboard.png

  若是用數學式子表示,即爲:g(i,j) = T[f(i,j)];其中g(i,j)是處理後的圖像;f(i,j)是處理前的圖像;T[ ]是處理手段,這些手段是各類各樣的,能夠根據須要進行調整。例如,若是您以爲某個區域內的「牙籤」太長,能夠對其進行「修剪」,因而這個區域的灰度值減小了。或者您以爲某個區域「牙籤」長短的差距不明顯,其實可經過讓長的「牙籤」變動長,短的「牙籤」變動短的思路實現差距明顯化。圖片

灰度變換方法

  如前文說起,灰度變換的本質就是對圖像的灰度值進行修改。雖然咱們能夠逐個逐個像素點進行修改,可是工做量很龐大。如下將介紹一種典型的思路。
  咱們知道T[ ]是變換的手段,若是咱們想讓圖片中亮的更亮,暗的更暗,能夠將原圖像經過一個映射關係獲得處理後的圖像。這個映射關係就是T[ ]。
  matlab當中經常使用的灰度變換函數是imadjust(I,[low_in; high_in],[low_out; high_out],gamma)。這個函數的具體參數就不做具體說明了。它的映射關係以下圖所示:ip

clipboard.png

  gamma的取值不一樣,曲線的陡峭程度也不一樣。數學

clipboard.png

  以圖(c)的曲線爲例子進行說明,上圖的橫座標爲原圖像的灰度值,縱座標爲輸出圖像的灰度值,假設定義域和值域均爲[0,255]。it

clipboard.png

  上圖是一張須要進行灰度變換的灰度圖。先從左上角第一個像素開始,該像素的灰度值爲254。對該像素進行圖(c)所示的映射,可得254通過變換後獲得的值爲255。而後下一個像素的灰度值爲143,對其進行映射,獲得的值是一個比143要少的數。該點實際上變暗了。當gamma小於1的時候,進行的處理就是將原圖像變暗。圖像處理

rgbImage = imread('Lena.jpg');
grayImage=rgb2gray(rgbImage);
J1 = imadjust(grayImage,[0 1],[0 1],2.5);
J2 = imadjust(grayImage,[0 1],[0 1],1.5);
J3 = imadjust(grayImage,[0 1],[0 1],0.67);
J4 = imadjust(grayImage,[0 1],[0 1],0.4);
subplot(1,5,1);imshow(J1);title('gamma=2.5');
subplot(1,5,2);imshow(J2);title('gamma=1.5');
subplot(1,5,3);imshow(grayImage);title('原灰度圖像');
subplot(1,5,4);imshow(J3);title('gamma=0.67');
subplot(1,5,5);imshow(J4);title('gamma=0.4');

clipboard.png

  咱們還能夠根據本身的須要,將灰度變換曲線定義爲以下幾種關係。因此說,變換的手段是各類各樣的。

clipboard.png

灰度直方圖

  灰度直方圖是統計圖片灰度分佈的圖像,其橫座標是灰度值,縱座標是該灰度值的數量。imhist()函數能繪製灰度直方圖。

rgbImage = imread('Lena.jpg');
grayImage=rgb2gray(rgbImage);
subplot(1,2,1);imshow(grayImage);title('原灰度圖像');
subplot(1,2,2);imhist(grayImage);title('灰度直方圖');

clipboard.png

  將原灰度直方圖和gamma=0.4的灰度直方圖進行對比,變換後灰度值較大的像素數量變多,灰度值較小的像素數量變少,圖像總體呈現變亮。

clipboard.png

相關文章
相關標籤/搜索