數字圖像處理是一門集計算機科學、光學、數學、物理學等多學科的綜合科學。隨着計算機科學的發展,數字圖像處理技術取得了巨大的進展,呈現出強大的生命力,已經在多種領域取得了大量的應用,推動了社會的發展。其中,遙感領域中,對於影像數據的處理均基於數字圖像處理的技術。而遙感影像數據作為地理信息科學的重要數據源,如何從中獲取有用的信息,是地理信息數據處理中重要的內容。
MATLAB作為數學領域應用最廣泛的一種軟件,集成了對於圖片處理的函數和功能,成為了處理數字圖像問題的佼佼者。其出眾的計算能力和簡便的繪圖能力可以有效進行數字圖像的變換和操作。本文探究了MATLAB(R2014a)軟件下數字圖像處理部分簡單內容方法的操作實現,包括圖像變換、圖像增強等。
由於時間所迫和水平不足,對於本文中的問題請指出。
在這里首先將介紹基本的操作。
1 數字圖像處理基礎
1.1 MATLAB圖像處理基本操作
本文中對於大多數的操作,是對數字圖像處理領域中最為著名的“lena”圖片進行操作的。原圖如下(Figure 1):
Figure 1
首先,在MATLAB中顯示這幅圖片:
I=imread('lena.jpg'); imfinfo('lena.jpg') imshow(I);
其中,imread()可以讀取圖片,imfinfo()可以獲取圖片的信息(Figure 2),imshow()可以顯示圖片。
Figure 2
從Figure 2中可以看出,該圖片格式為png,長寬均為512px,顏色類型為真彩色。
處理后的圖片還需要進行保存:
imwrite(I,'lenaSave.jpg');
1.2 圖像數字化
使用imread()讀取圖像后,可以看到,讀入的圖片I是以一個512*512*3的矩陣進行保存的,即分別是RGB顏色的數字圖片。為了方便起見,在本文中,筆者將lena圖進行了轉換,轉換為灰度圖,即保存為一個512*512*1的矩陣。
為了完成這樣一個步驟,MATLAB中提供了相應的函數:
I1=rgb2gray(I); imshow(I1);
I1以512*512*1的矩陣形式進行存儲。效果如下圖(Figure 3):
Figure 3
1.3 直方圖
為了顯示圖像灰度的分布情況,還需要繪制灰度直方圖。可以使用如下代碼:
figure,imhist(I1);
效果如下(Figure 4):
Figure 4
1.4 圖像噪聲的添加
為了完成多種圖像處理的操作和試驗,還可以對圖片添加噪聲。所用函數為imnoise (I, type),該函數中的type可以為5種噪聲參數,分別為:'gaussian'(高斯白噪聲),'localvar'(與圖象灰度值有關的零均值高斯白噪聲),'poisson'(泊松噪聲),'salt & pepper'(椒鹽噪聲)和'speckle'(斑點噪聲)。
以下為高斯噪聲(Figure 5)和椒鹽噪聲(Figure 6)的代碼和效果:
I2=imnoise(I1,'gaussian'); figure,imshow(I2);
Figure 5
I3=imnoise(I1,'salt & pepper'); figure,imshow(I3);
Figure 6
2 圖像變換
2.1 傅立葉變換
傅立葉變換可以將圖像從空間域轉換到頻率域,然后再進行相應的處理。MATLAB中有傅立葉變換的函數。
原圖:
Figure 7
傅立葉變換:
F=fft2(I1); S=abs(F); figure,imshow(S,[]);
效果:
Figure 8
看上去是一片黑,事實上在全圖的左上角可以看出有一個白點(即左上角缺失了)。
平移:
Fc=fftshift(F); figure,imshow(abs(Fc),[]);
效果:
Figure 9
將頻率平移到中間。
頻譜圖:
figure,imshow(uint8(abs(Fc/256)));
效果:
Figure 10
之所以在本例中沒有使用lena的圖片,是因為該圖傅立葉頻譜圖並無特點。
傅立葉逆變換:
f=real(ifft2(F)/255); figure,imshow(f);
效果:
Figure 11
經過逆變換后,仍然為原圖。
具體代碼請參考:https://github.com/kkyyhh96/DigitalImageProcessing/tree/master/code中kyh_One.m和kyh_Two1.m的內容。